From 37f3fa77658ba8dd608086bcf1ea889dda053aaa Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Tue, 23 Jul 2024 15:41:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E5=AE=9E=E7=8E=B0=E5=88=9D?= =?UTF-8?q?=E6=AD=A5=E6=88=90=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + .../sharpworld.metadata.v8.bin | Bin 0 -> 907 bytes .../sharpworld.projects.v8.bin | Bin 0 -> 78366 bytes .../sharpworld.strings.v8.bin | Bin 0 -> 115247 bytes .vs/SharpWorld/DesignTimeBuild/.dtbcache.v2 | Bin 0 -> 83916 bytes ...a6ef5db8-f1d3-464d-8e1a-7ef7d7e5e95e.vsidx | Bin 0 -> 8228 bytes ...c7c53628-8347-4b57-86e0-bc7766e5842b.vsidx | Bin 0 -> 10773 bytes ...ca68d0be-283a-4633-9151-42e030f8275b.vsidx | Bin 0 -> 16404 bytes ...e5fd841f-228c-4293-b42b-af1ec09c67e0.vsidx | Bin 0 -> 8346 bytes ...faa1d97a-3642-4d84-bf5f-489d4a20d18f.vsidx | Bin 0 -> 13506 bytes .vs/SharpWorld/v17/.futdcache.v2 | Bin 0 -> 244 bytes .vs/SharpWorld/v17/.suo | Bin 0 -> 54784 bytes .vs/SharpWorld/v17/DocumentLayout.json | 138 +++++++++++++ SharpWorld.sln | 25 +++ SharpWorld/CoreImplement.cs | 195 ++++++++++++++++++ SharpWorld/EntitySpawn.cs | 169 +++++++++++++++ SharpWorld/MassFoster.cs | 99 +++++++++ SharpWorld/Movement.cs | 68 ++++++ SharpWorld/Program.cs | 24 +++ SharpWorld/ShapeVolume.cs | 86 ++++++++ SharpWorld/SharpWorld.cs | 154 ++++++++++++++ SharpWorld/SharpWorld.csproj | 10 + SharpWorld/VariableType.cs | 114 ++++++++++ 23 files changed, 1085 insertions(+) create mode 100644 .gitignore create mode 100644 .vs/ProjectEvaluation/sharpworld.metadata.v8.bin create mode 100644 .vs/ProjectEvaluation/sharpworld.projects.v8.bin create mode 100644 .vs/ProjectEvaluation/sharpworld.strings.v8.bin create mode 100644 .vs/SharpWorld/DesignTimeBuild/.dtbcache.v2 create mode 100644 .vs/SharpWorld/FileContentIndex/a6ef5db8-f1d3-464d-8e1a-7ef7d7e5e95e.vsidx create mode 100644 .vs/SharpWorld/FileContentIndex/c7c53628-8347-4b57-86e0-bc7766e5842b.vsidx create mode 100644 .vs/SharpWorld/FileContentIndex/ca68d0be-283a-4633-9151-42e030f8275b.vsidx create mode 100644 .vs/SharpWorld/FileContentIndex/e5fd841f-228c-4293-b42b-af1ec09c67e0.vsidx create mode 100644 .vs/SharpWorld/FileContentIndex/faa1d97a-3642-4d84-bf5f-489d4a20d18f.vsidx create mode 100644 .vs/SharpWorld/v17/.futdcache.v2 create mode 100644 .vs/SharpWorld/v17/.suo create mode 100644 .vs/SharpWorld/v17/DocumentLayout.json create mode 100644 SharpWorld.sln create mode 100644 SharpWorld/CoreImplement.cs create mode 100644 SharpWorld/EntitySpawn.cs create mode 100644 SharpWorld/MassFoster.cs create mode 100644 SharpWorld/Movement.cs create mode 100644 SharpWorld/Program.cs create mode 100644 SharpWorld/ShapeVolume.cs create mode 100644 SharpWorld/SharpWorld.cs create mode 100644 SharpWorld/SharpWorld.csproj create mode 100644 SharpWorld/VariableType.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..84b77cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*/bin/* +*/obj/* + diff --git a/.vs/ProjectEvaluation/sharpworld.metadata.v8.bin b/.vs/ProjectEvaluation/sharpworld.metadata.v8.bin new file mode 100644 index 0000000000000000000000000000000000000000..bb23da201f8a29b2aba6864235e29a53735ca145 GIT binary patch literal 907 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 literal 0 HcmV?d00001 diff --git a/.vs/SharpWorld/DesignTimeBuild/.dtbcache.v2 b/.vs/SharpWorld/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000000000000000000000000000000000000..ec0fb3644c81e60ede678cb9d0b185f7f85c70bd GIT binary patch literal 83916 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 literal 0 HcmV?d00001 diff --git a/.vs/SharpWorld/FileContentIndex/a6ef5db8-f1d3-464d-8e1a-7ef7d7e5e95e.vsidx b/.vs/SharpWorld/FileContentIndex/a6ef5db8-f1d3-464d-8e1a-7ef7d7e5e95e.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..e87daf0fb58a18ad575f0188234d92ea713bd459 GIT binary patch literal 8228 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 RSLI<(`0dhJVbPiy{|njLB5MEu literal 0 HcmV?d00001 diff --git a/.vs/SharpWorld/FileContentIndex/c7c53628-8347-4b57-86e0-bc7766e5842b.vsidx b/.vs/SharpWorld/FileContentIndex/c7c53628-8347-4b57-86e0-bc7766e5842b.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..778a5d57c6145334957a42cb195ce79a087d3b81 GIT binary patch literal 10773 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 SQycv6A%A|oLFV?`Wd0W#Z3*lE literal 0 HcmV?d00001 diff --git a/.vs/SharpWorld/FileContentIndex/ca68d0be-283a-4633-9151-42e030f8275b.vsidx b/.vs/SharpWorld/FileContentIndex/ca68d0be-283a-4633-9151-42e030f8275b.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..ccc40b53c4e5e905e40ad0756d93b780b91fa7c8 GIT binary patch literal 16404 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 Wc$WWPmj2`KeDlAn)=O;fllZ^0L~OqR literal 0 HcmV?d00001 diff --git a/.vs/SharpWorld/FileContentIndex/e5fd841f-228c-4293-b42b-af1ec09c67e0.vsidx b/.vs/SharpWorld/FileContentIndex/e5fd841f-228c-4293-b42b-af1ec09c67e0.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..36bf86e32e1ecb54c4187bd4bef55ec3eb515021 GIT binary patch literal 8346 zcmYkA2Y8i57KR7KhPw9NVr)S%6uSXTFOr*tdv6F4FceW#6b0-p#)duiuCXgN?7jDf z*b%X8cYATWySm?Z{`c~j+ftlxKX$J{xG z&73iR-sHN%tZ8$PnjG3SXYTBSeq78=n>Vj<&b;|E=T^>`_sy(t7r(W9*`PaD$y}`* z&=C3zNvSNQbyMn1Y5PzW%2Qg9QeR3VQ(7w?WwUBZ1JPx0O4CbS)T+MnlW9eiPYYG0 zKCR(j-Ss&yrIkvRy;0EP2Bk_FXRZAyJs5$>=fspoL{##eb&;83mVvyLr}TYFo2H~L z)hYEv7~h5ELs6EQdMU_DQhF+4P>tNGvMf}+H0YujMTLQs&Ww85EKg}_w5lv)dC<`M z^u{MEt10Ux1C{krt5hS(U`6HiQU60qgCeWy(ia()jb^bdjF+S&v;OEV1ND{4U};LX zgqfNu!jI}TL|-I9(Pn1l5$!;9sSZ`&-Y7`RQo1&JsiW*4FU2VveN?F~OQKT7a-~OU zUo`bcmz7ewpyc)^Da}qv)2T~oa7qhfnKZ=uVXuw@QCJW*N@M0n2Ks10d&9pRYTOZ} z2(>zLrKKDdL#s(Sl%;lEMJXgz%0`v)EFBq-@-q;|)1$klqb61Aqy3=Gpk8G$N@k|V zthFx;v>)VcMK2ZfQIoo8X=FJhRP)s`%?)odkdtigGFTD;sGu&YS1%bTSN-ugBBreR z@*f$^?%Cga>mA(9An(b9Ntd8Z=4$PvJv9^70SgNm5s+zv=ASddpWGX!M zQa&?pi=$rMXNB2!WfUS@KrQB;tswJh=@ zKZ-#$((-6skdlJbw$yT{QoW=ymJ=0}d>JT=r=wCe3*)Tygu$~VSMo2P>QxbG?<>{! zmm;Z*+^TzZsYy0dqjew#QoUL=oW>m-b6HZ#dDhe$yGY4Vgj1tQg+Xhrlj28x<7bex z^e0bIUKz@5Jg)+^9`U>yv=8@P0}g>}LIoG?YeS_io*jbwDb>OCpmG||y1j!N!j0g@ za1*F3huvmybGQZE5^e>zhTFh0xGgM)+rjPO4sb`f6Rdzk;m&XuI1KIzwWbm8aHzc% z&m-X|xEtIZ?g96Nd%?ZoK5$=H1xLd%&@X%EeLq+YYhW#`gY~chHo_*@3|rv-a2#xf zIoJlHGX3~md{;dXF)xC7h~?gT5~P`ESP z1rCF|!b&(Cj({WKD7YKk9qs}5gnPlg;XZI*SOrJJF>oy04_3n(SPSc5J#2uDun9K9 z7Pvng2U}qdw!wDT0ms8UEWje{gcD#FoCv$&0dNwW45z>YVGo=Nr@`rP20RGPga^Yz z;4FA3JPaNVXTu}lk#G(?3LXvT!g+8$JO&;MkAug<6X1#PBzQ7B1)d5|gT3%{*ay#m zXTr1K+3*~=0GX;N5T`ya(P3?}PWl2jC+3Abbcu3?G4y!pGp_@Co=Nd{X;Op=W_$GV{z75}j@506KJ-7tE4?ln(!jIs`@Dunc zTnayf%i!m5Is5{C3BQ70!~NIPOHeaSe?5*;n=&_5X~($G{T9g&7f>r=b5IkY7e zRnDavX+FwDwN#|e)FSOlg;c4wT4}9nD)o<(c4=d1Q)*DTC2U%w+!{9aR;h9G(tOnC z<*!oSU0;kEkK(euO^Es~^&P(AcZ^D7^gCRBYNQ2u7_s8FO8?#R(@6b4Z14CRrn%bI zT97)1(b0Fbo|{#+htV;wF_9H}AEO*OH_p^>^{7>@tOaSE;;d1wTBI$hP1+i*tVBR-XZlda=pAasoWq- ztD~@;)is`%_fV(Q>sX(rsBeQtEv>fq#RSzj(^(c9Vl-=~YCM{?UD^=ZB;Ov@9$M65 zbq+iWt6N*cGN*AG6oWnFqBR$z=d^~d85`OhYX7-d0mtn5c)T`^W6f$jN?SzRu6^AQ zt75ffM~s+{`h4{A+BL-5S?$3m#Oe$bqF;gfZq*c{-g$P}_QlA+gz(&@{|`F99&2LE zccOCHpw)8Cq{v2(R<|)$(b^hk&k?oDTVq7qqzH=4$uo1=r!vcClb)MZ?$%mZhlW;# z_QYOk4(*b9w_5X3d+;4$%~r)H!~38r)N}GWTC?&LmA(J7U1D_{ZSrXyA8N}s&ALUN zy`Q`rTjal8S_p66!7k@QZSNJbc1wL%j8kh>?2K%eH>&J2YAs0Xqt$!O=cGQ=XV>d& zwT#TjBey>7-gyO$?lbRlr(*Mo@@##ZTC;L4%5L{*^6vE6_1$T$ z3$@T~I996sW z=kt)=O+!^K=#5}?EY7NRY^YC8K`Yg!IJ%_nW6evmyTK>GC(5nfgVv%ni={((@~T%! z?ceHr`yOtS-O$isp>8eeHn(~n*)Ex&{q2+KUK3(0pO);NvyM~Q^Y^*+N%c;&wn@FJ zR$m$d6cCWqPOL@)P>Kit%(X1XlA2x-s>5Nv-$C=IUj=IRN zZ+G9OzDHbcP`me(YaFBBj+tiTx$OJFS*r~#O1oq`UNz3T-`;+Uw1(zFi&DQI9G~k; zQD*PmD%JS*wK|H@{p!BHC9J+y~D3CZ7(M+d@5OpFgYD!6(co);7*u=}qQ% zeJ9$FSI}>Lw{~ksTgR%+XTjPO>KRwcr}tb%=rE~g;Zs)?S{It#ofB2gZa&{qrTygC z{08;C>sXydw>onLJ==r#wlym^M%m}yJ*?gO^EV-@V<;*vt8WYM2CF^$6lK;v8?N>D z2U~mZ`&*Cq@hGWpORH`CPPVUHsBOF+CGVxXzehFAiqq;j`QCLNv-{P3y{D~3{d%uv z`!rh_=U|v>9G%}W?%S=1tUY@68hdYLw^)_Ro}0htwMl(utvRVre0D}VHJ^Hwea@ZB z7OCfC^^W##wB|#LQhy7udZ&1$e0tsLJ#V$Wcd@_i)yMwMOTF6Gme7Keiymk_oVw+ dy=JGx9Ufn&C4=?14iDXMb$`v)&z2iy{6E5VDBS=6 literal 0 HcmV?d00001 diff --git a/.vs/SharpWorld/FileContentIndex/faa1d97a-3642-4d84-bf5f-489d4a20d18f.vsidx b/.vs/SharpWorld/FileContentIndex/faa1d97a-3642-4d84-bf5f-489d4a20d18f.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..9f3da434ad18dcdb87bf12a8dc32a89dcb9be450 GIT binary patch literal 13506 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 literal 0 HcmV?d00001 diff --git a/.vs/SharpWorld/v17/DocumentLayout.json b/.vs/SharpWorld/v17/DocumentLayout.json new file mode 100644 index 0000000..244cab3 --- /dev/null +++ b/.vs/SharpWorld/v17/DocumentLayout.json @@ -0,0 +1,138 @@ +{ + "Version": 1, + "WorkspaceRootPath": "D:\\Projects\\CSharp\\SharpWorld\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|d:\\projects\\csharp\\sharpworld\\sharpworld\\movement.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|solutionrelative:sharpworld\\movement.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|d:\\projects\\csharp\\sharpworld\\sharpworld\\shapevolume.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|solutionrelative:sharpworld\\shapevolume.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|d:\\projects\\csharp\\sharpworld\\sharpworld\\massfoster.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|solutionrelative:sharpworld\\massfoster.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|d:\\projects\\csharp\\sharpworld\\sharpworld\\entityspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|solutionrelative:sharpworld\\entityspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|d:\\projects\\csharp\\sharpworld\\sharpworld\\coreimplement.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|solutionrelative:sharpworld\\coreimplement.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|d:\\projects\\csharp\\sharpworld\\sharpworld\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}|SharpWorld\\SharpWorld.csproj|solutionrelative:sharpworld\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 187, + "SelectedChildIndex": 7, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:129:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + }, + { + "$type": "Bookmark", + "Name": "ST:130:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + }, + { + "$type": "Bookmark", + "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" + }, + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "CoreImplement.cs", + "DocumentMoniker": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\CoreImplement.cs", + "RelativeDocumentMoniker": "SharpWorld\\CoreImplement.cs", + "ToolTip": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\CoreImplement.cs", + "RelativeToolTip": "SharpWorld\\CoreImplement.cs", + "ViewState": "AQIAAHcAAAAAAAAAAAAAAIIAAABVAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-23T04:58:50.253Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "EntitySpawn.cs", + "DocumentMoniker": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\EntitySpawn.cs", + "RelativeDocumentMoniker": "SharpWorld\\EntitySpawn.cs", + "ToolTip": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\EntitySpawn.cs", + "RelativeToolTip": "SharpWorld\\EntitySpawn.cs", + "ViewState": "AQIAACQAAAAAAAAAAAAAAHUAAAA6AAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-22T08:53:39.007Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "MassFoster.cs", + "DocumentMoniker": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\MassFoster.cs", + "RelativeDocumentMoniker": "SharpWorld\\MassFoster.cs", + "ToolTip": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\MassFoster.cs", + "RelativeToolTip": "SharpWorld\\MassFoster.cs", + "ViewState": "AQIAABUAAAAAAAAAAAAAAB0AAAAuAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-23T03:03:10.984Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "Movement.cs", + "DocumentMoniker": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\Movement.cs", + "RelativeDocumentMoniker": "SharpWorld\\Movement.cs", + "ToolTip": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\Movement.cs", + "RelativeToolTip": "SharpWorld\\Movement.cs", + "ViewState": "AQIAAB8AAAAAAAAAAAAgwCYAAABRAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-23T02:09:29.365Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "ShapeVolume.cs", + "DocumentMoniker": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\ShapeVolume.cs", + "RelativeDocumentMoniker": "SharpWorld\\ShapeVolume.cs", + "ToolTip": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\ShapeVolume.cs", + "RelativeToolTip": "SharpWorld\\ShapeVolume.cs", + "ViewState": "AQIAABgAAAAAAAAAAAAAADoAAAAjAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-22T08:04:52.642Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "Program.cs", + "DocumentMoniker": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\Program.cs", + "RelativeDocumentMoniker": "SharpWorld\\Program.cs", + "ToolTip": "D:\\Projects\\CSharp\\SharpWorld\\SharpWorld\\Program.cs", + "RelativeToolTip": "SharpWorld\\Program.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAsAAAAbAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-07-22T08:33:04.362Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/SharpWorld.sln b/SharpWorld.sln new file mode 100644 index 0000000..6791de4 --- /dev/null +++ b/SharpWorld.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.10.34928.147 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpWorld", "SharpWorld\SharpWorld.csproj", "{63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63F41712-9AFE-4DCB-8B35-6782AFAB7BCF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C89043E1-A722-436E-A5C3-23FD223C939D} + EndGlobalSection +EndGlobal diff --git a/SharpWorld/CoreImplement.cs b/SharpWorld/CoreImplement.cs new file mode 100644 index 0000000..1b5de87 --- /dev/null +++ b/SharpWorld/CoreImplement.cs @@ -0,0 +1,195 @@ +using MassFoster; +using ShapeVolume; +using Movement; +using SharpWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Text; +using System.Threading.Tasks; +using Variables; +using System.Data; +using EntitySpawn; + +namespace CoreImplement +{ + public class SystemHost : WsSystemHost + { + private UInt128 current_entity_id = 5; + public UInt128 AllocNewID() + { + lock (this) + { + return current_entity_id++; + } + } + + private Dictionary _system_store = new Dictionary(); + + public WsSystem GetSystem() where Datas : WsItemParams where Sys : WsSystem + { +#pragma warning disable CS8603 // 可能返回 null 引用。 + var type_name = typeof(WsSystem).FullName; + if (type_name == null) + throw new ArgumentException("类型名称为null"); + return _system_store[type_name] as WsSystem; +#pragma warning restore CS8603 // 可能返回 null 引用。 + } + + public void RegisterSystem(WsSystem inst) where Datas : WsItemParams + { +#pragma warning disable CS8604 // 引用类型参数可能为 null。 + _system_store[typeof(WsSystem).FullName] = inst; +#pragma warning restore CS8604 // 引用类型参数可能为 null。 + } + + private List ExecutableSystemList + { + get + { + var items = from n in _system_store.Values + orderby n.Name + where n is WsExecutableSystem + select n as WsExecutableSystem; + return items.ToList(); + } + } + + private List> execute_list = new List>(); + public void LoopRun() + { + var task_list = ExecutableSystemList; + foreach (var t in task_list) + { + execute_list.Add(new Tuple(t, 0)); + } + + for (; ; ) + { + var unit = execute_list.ElementAt(0); + unit.Item1.Run(this, unit.Item2); + execute_list.RemoveAt(0); + + bool find_flags = false; + var next_time = unit.Item2 + unit.Item1.ExecutePeriodMsec; + for (var tidx = 0; tidx < execute_list.Count; ++tidx) + { + var item = execute_list.ElementAt(tidx); + + if (next_time < item.Item2) + { + execute_list.Insert(tidx, new Tuple(unit.Item1, next_time)); + find_flags = true; + break; + } + } + + if (!find_flags) + { + execute_list.Add(new Tuple(unit.Item1, next_time)); + } + } + } + } + + public class ExampleEntity : WsEntity, ShapeVolumeParams, MovementParam, MassFosterParams, LifetimeParams + { + public string TypeName { get; set; } = "示例实体"; + public UInt128 RuntimeID { get; set; } = 1; + public string JsonContent { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + + public bool IsConsumed { get; set; } = true; + public double AbsorbAmount { get; set; } = 0; + public double MassInput { get; set; } = 0; + public VariableDouble MassConvRates { get; } = new VariableDouble("重量转换效率", 0.0001); + + + public List TotalVariables { get; } = new List(); + public WsBaseSystem? BindSystem { get; set; } = null; + public WsEntity BindEntity => this; + + public Vector3 PosXYZ { get; set; } = new Vector3(); + public Vector3 OritXYZ { get; set; } = new Vector3(1, 0, 0); + public float Speed { get; set; } = 0.01f; + public double Length { get; set; } + public double Width { get; set; } + public double Height { get; set; } + private VariableDouble volume_current = new VariableDouble("", 0, 0, double.MaxValue / 2); + public double Volume { get { return volume_current.Value; } set { volume_current.Value = value; } } + + public VariableDouble PrimitiveLength { get; } = new VariableDouble("初生体长", 1); + public VariableDouble PrimitiveWidth { get; } = new VariableDouble("初生体宽", 0.5); + public VariableDouble PrimitiveHeight { get; } = new VariableDouble("初生体高", 0.5); + + public VariableDouble Density { get; set; } = new VariableDouble("生体密度", 1); + public UInt128 SpawnStart { get; set; } + public UInt128 LifetimeAcc { get; set; } + public double MatureVolume { get; set; } = -1; + + public VariableULong GrowthTimeCount { get; } = new VariableULong("成长期长度", 1_000_000); + public VariableULong MatureTimeCount { get; } = new VariableULong("成熟期长度", 100_000_000_000); + public VariableULong DeathTimePoint { get; } = new VariableULong("死亡时间点", 120_000_000_000); + public VariableULong SpawnPeriods { get; } = new VariableULong("繁育周期", 100_000); + + public uint SpawnTimes { get; set; } = 0; + + public VariablePercent ImpressRates { get; } = new VariablePercent("能量吸收转换效率", 0.1); + + public void ActiveConfigBeforeExecute(WsSystemHost host) + { + var mass_sys = host.GetSystem(); + var vol_sys = host.GetSystem(); + var mov_sys = host.GetSystem(); + var spawn_sys = host.GetSystem(); + + mass_sys.RegisterItem(this); + vol_sys.RegisterItem(this); + mov_sys.RegisterItem(this); + spawn_sys.RegisterItem(this); + + Console.WriteLine($"实体诞生:ID={RuntimeID}"); + } + + public void DeathExecute(WsSystemHost host) + { + var mass_sys = host.GetSystem(); + var vol_sys = host.GetSystem(); + var mov_sys = host.GetSystem(); + var spawn_sys = host.GetSystem(); + + mass_sys.RemoveItem(this.RuntimeID); + vol_sys.RemoveItem(this.RuntimeID); + mov_sys.RemoveItem(this.RuntimeID); + spawn_sys.RemoveItem(this.RuntimeID); + + Console.WriteLine($"实体死亡:ID={RuntimeID}"); + } + + public ExampleEntity(UInt128 runtime_id) + { + this.RuntimeID = runtime_id; + TotalVariables.Add(MassConvRates); + TotalVariables.Add(PrimitiveLength); + TotalVariables.Add(PrimitiveWidth); + TotalVariables.Add(PrimitiveHeight); + TotalVariables.Add(Density); + TotalVariables.Add(GrowthTimeCount); + TotalVariables.Add(MatureTimeCount); + TotalVariables.Add(DeathTimePoint); + TotalVariables.Add(SpawnPeriods); + + Length = PrimitiveLength.Value; + Width = PrimitiveWidth.Value; + Height = PrimitiveHeight.Value; + Volume = Length * Width * Height; + } + + public WsEntity NewEmpty(UInt128 id) + { + return new ExampleEntity(id); + } + + } + +} diff --git a/SharpWorld/EntitySpawn.cs b/SharpWorld/EntitySpawn.cs new file mode 100644 index 0000000..690f1ca --- /dev/null +++ b/SharpWorld/EntitySpawn.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ShapeVolume; +using SharpWorld; +using Variables; + +namespace EntitySpawn +{ + public interface LifetimeParams : WsItemParams + { + /// + /// 诞生时间点 + /// + UInt128 SpawnStart { get; set; } + /// + /// 寿命长度累计 + /// + UInt128 LifetimeAcc { get; set; } + /// + /// 成熟体最小质量 + /// + double MatureVolume { get; set; } + + /// + /// 成长期长度 + /// + VariableULong GrowthTimeCount { get; } + /// + /// 壮年期长度 + /// + VariableULong MatureTimeCount { get; } + /// + /// 死亡时间点 + /// + VariableULong DeathTimePoint { get; } + + /// + /// 繁育周期 + /// + VariableULong SpawnPeriods { get; } + /// + /// 繁育次数 + /// + UInt32 SpawnTimes { get; set; } + } + + public class LifetimeSystem : WsSystem, WsExecutableSystem + { + private Dictionary _items_store = new Dictionary(); + + public uint ExecutePeriodMsec => 1000; + + public string Name => "生命周期控制系统"; + + public LifetimeParams GetItem(UInt128 RtID) + { + lock (this) + { + return _items_store[RtID]; + } + } + + public void RegisterItem(LifetimeParams entity_params) + { + lock (this) + { + _items_store[entity_params.BindEntity.RuntimeID] = entity_params; + } + } + + private void spawn_update(WsSystemHost host, LifetimeParams it, UInt128 current_timepoint) + { + var timepoint_birth = it.SpawnStart; + var growth_span = current_timepoint - timepoint_birth; + it.LifetimeAcc = growth_span; + + // 成长期不繁育 + if (it.LifetimeAcc <= it.GrowthTimeCount.Value) + return; + + // 死亡移除 + if (it.LifetimeAcc >= it.DeathTimePoint.Value) + { + it.BindEntity.DeathExecute(host); + return; + } + + // 记录成熟期初始体积 + if (it.MatureVolume <= 0) + { + var vol_sys = host.GetSystem(); + var vol_param = vol_sys.GetItem(it.BindEntity.RuntimeID); + var birth_volume = vol_param.PrimitiveHeight.Value * vol_param.PrimitiveWidth.Value * vol_param.PrimitiveLength.Value; + + if (vol_param.Volume > birth_volume * 20000) + { + it.MatureVolume = birth_volume * 20000; + } + else + { + it.MatureVolume = vol_param.Volume; + } + } + + // 成熟期开始生育 + if (it.LifetimeAcc <= it.GrowthTimeCount.Value + it.MatureTimeCount.Value) + { + // 执行生育计算 + var span = it.LifetimeAcc - it.GrowthTimeCount.Value; + if (it.SpawnTimes < (span / it.SpawnPeriods.Value)) + { + var vol_sys = host.GetSystem(); + var vol_param = vol_sys.GetItem(it.BindEntity.RuntimeID); + + var current_volume = vol_param.Volume; + var volume_redundance = current_volume - it.MatureVolume; + volume_redundance -= Math.Pow(volume_redundance, 0.75); + var birth_volume = vol_param.PrimitiveHeight.Value * vol_param.PrimitiveWidth.Value * vol_param.PrimitiveLength.Value; + + // 纠正繁育周期错误 + if (volume_redundance < birth_volume) + { + var xval = it.SpawnPeriods.Value * 2; + it.SpawnPeriods.Value = xval; + return; + } + + // 执行繁育 + it.SpawnTimes++; + var spawn_count = (UInt128)(volume_redundance / birth_volume); + Console.WriteLine($"繁育时间:time={current_timepoint}"); + for (UInt128 idx = 0; idx < spawn_count; ++idx) + { + var new_entity = it.BindEntity.NewEmpty(host.AllocNewID()); + new_entity.ActiveConfigBeforeExecute(host); + current_volume -= birth_volume; + } + + // 校正体积 + var times = Math.Pow(current_volume / birth_volume, 1 / 3.0); + vol_param.Length = times * vol_param.PrimitiveLength.Value; + vol_param.Width = times * vol_param.PrimitiveWidth.Value; + vol_param.Height = times * vol_param.PrimitiveHeight.Value; + } + } + } + public void Run(WsSystemHost host, UInt128 timepoint_msec) + { + var srcl = _items_store.Values.ToList(); + var opts = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }; + Parallel.For(0, srcl.Count, opts, index => + { + var it = srcl[index]; + spawn_update(host, it, timepoint_msec); + }); + } + + public void RemoveItem(UInt128 RtID) + { + lock (this) + { + _items_store.Remove(RtID); + } + } + } +} diff --git a/SharpWorld/MassFoster.cs b/SharpWorld/MassFoster.cs new file mode 100644 index 0000000..25966bb --- /dev/null +++ b/SharpWorld/MassFoster.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ShapeVolume; +using SharpWorld; +using Variables; + +namespace MassFoster +{ + public interface MassFosterParams : WsItemParams + { + bool IsConsumed { get; set; } + + double AbsorbAmount { get; set; } + double MassInput { get; set; } + /// + /// 光合作用转换效率 + /// + VariableDouble MassConvRates { get; } + } + + public class EnvFosterSystem : WsSystem, WsExecutableSystem + { + private Dictionary _items_store = new Dictionary(); + + public string Name => "环境能量养护系统"; + + public uint ExecutePeriodMsec => 1000; + + public MassFosterParams GetItem(UInt128 RtID) + { + lock (this) + { + return _items_store[RtID]; + } + } + + public void RegisterItem(MassFosterParams entity_params) + { + lock (this) + { + _items_store[entity_params.BindEntity.RuntimeID] = entity_params; + } + } + + private void update_batch(WsSystemHost host, MassFosterParams item) + { + var volsys = host.GetSystem(); + var volparam = volsys.GetItem(item.BindEntity.RuntimeID); + var square = volparam.Length * volparam.Width; + + if (item.IsConsumed) + { + item.IsConsumed = false; + item.AbsorbAmount = 0; + item.MassInput = 0; + } + + item.AbsorbAmount += _energy_density * square; + var new_mass = item.AbsorbAmount * item.MassConvRates.Value; + item.MassInput = new_mass; + } + + public void Run(WsSystemHost host, UInt128 timepoint) + { + var srcl = _items_store.Values.ToList(); + var opts = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }; + Parallel.For(0, srcl.Count, opts, index => { + var param = srcl[index]; + update_batch(host, param); + }); + } + + public void RemoveItem(UInt128 RtID) + { + lock (this) + { + _items_store.Remove(RtID); + } + } + + //========================= + /// + /// 表面能量密度 + /// + private double _energy_density = 0; + /// + /// 构建能量消耗计算系统 + /// + /// + public EnvFosterSystem(double plain_energy) + { + _energy_density = plain_energy; + } + + } +} diff --git a/SharpWorld/Movement.cs b/SharpWorld/Movement.cs new file mode 100644 index 0000000..82ba87d --- /dev/null +++ b/SharpWorld/Movement.cs @@ -0,0 +1,68 @@ +using SharpWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Text; +using System.Threading.Tasks; + +namespace Movement +{ + public interface MovementParam : WsItemParams + { + public Vector3 PosXYZ { get; set; } + public Vector3 OritXYZ { get; set; } + + public float Speed { get; set; } + } + + public class MovementSystem : WsSystem, SharpWorld.WsExecutableSystem + { + private Dictionary _items_store = new Dictionary(); + + public string Name => "机动演算系统"; + + public uint ExecutePeriodMsec => 100; + + public MovementParam GetItem(UInt128 RtID) + { + lock (this) + { + return _items_store[RtID]; + } + } + + public void RegisterItem(MovementParam entity_params) + { + lock (this) + { + _items_store[entity_params.BindEntity.RuntimeID] = entity_params; + } + } + + public void movement_update(WsSystemHost host, MovementParam item_ps) + { + var orit_vec = Vector3.Normalize(item_ps.OritXYZ); + var move_span = Vector3.Multiply(orit_vec, item_ps.Speed); + item_ps.PosXYZ = Vector3.Add(item_ps.PosXYZ, move_span); + } + + public void Run(WsSystemHost host, UInt128 timepoint) + { + var srcl = _items_store.Values.ToList(); + var opts = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }; + Parallel.For(0, srcl.Count, opts, index => { + var it = srcl[index]; + movement_update(host, it); + }); + } + + public void RemoveItem(UInt128 RtID) + { + lock (this) + { + _items_store.Remove(RtID); + } + } + } +} diff --git a/SharpWorld/Program.cs b/SharpWorld/Program.cs new file mode 100644 index 0000000..ea50c28 --- /dev/null +++ b/SharpWorld/Program.cs @@ -0,0 +1,24 @@ +using MassFoster; +using ShapeVolume; +using Movement; +using SharpWorld; +using CoreImplement; +using EntitySpawn; + +class Program +{ + public static void Main(string[] args) + { + var host = new SystemHost(); + + host.RegisterSystem(new EnvFosterSystem(2)); + host.RegisterSystem(new ShapeVolumeSystem()); + host.RegisterSystem(new MovementSystem()); + host.RegisterSystem(new LifetimeSystem()); + + var entity_inst = new ExampleEntity(1); + entity_inst.ActiveConfigBeforeExecute(host); + + host.LoopRun(); + } +} \ No newline at end of file diff --git a/SharpWorld/ShapeVolume.cs b/SharpWorld/ShapeVolume.cs new file mode 100644 index 0000000..1b78a43 --- /dev/null +++ b/SharpWorld/ShapeVolume.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using MassFoster; +using SharpWorld; +using Variables; + +namespace ShapeVolume +{ + public interface ShapeVolumeParams : WsItemParams + { + public double Length { get; set; } + public double Width { get; set; } + public double Height { get; set; } + public double Volume { get; set; } + + public VariableDouble PrimitiveLength { get; } + public VariableDouble PrimitiveWidth { get; } + public VariableDouble PrimitiveHeight { get; } + public VariableDouble Density { get; } + + public VariablePercent ImpressRates { get; } + } + + public class ShapeVolumeSystem : WsExecutableSystem, WsSystem + { + private Dictionary _items_store = new Dictionary(); + + public uint ExecutePeriodMsec => 10_000; + + public string Name => "体重演算系统"; + + public ShapeVolumeParams GetItem(UInt128 RtID) + { + lock (this) + { + return _items_store[RtID]; + } + } + + public void RegisterItem(ShapeVolumeParams entity_params) + { + lock (this) + { + _items_store[entity_params.BindEntity.RuntimeID] = entity_params; + } + } + + private void update_volumes(WsSystemHost host, ShapeVolumeParams vmit) + { + var mass_sys = host.GetSystem(); + + var mass_param = mass_sys.GetItem(vmit.BindEntity.RuntimeID); + mass_param.IsConsumed = true; + var m_new = mass_param.MassInput; + var vol_new = m_new / vmit.Density.Value * vmit.ImpressRates.Value; + vmit.Volume += vol_new; + + var primitive_vol = vmit.PrimitiveHeight.Value * vmit.PrimitiveLength.Value * vmit.PrimitiveWidth.Value; + var times = Math.Pow(vmit.Volume / primitive_vol, 1 / 3.0); + vmit.Length = times * vmit.PrimitiveLength.Value; + vmit.Width = times * vmit.PrimitiveWidth.Value; + vmit.Height = times * vmit.PrimitiveHeight.Value; + } + + public void Run(WsSystemHost host, UInt128 timepoint_msec) + { + var srcl = _items_store.Values.ToList(); + var opts = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }; + Parallel.For(0, srcl.Count, opts, index => { + var it = srcl[index]; + update_volumes(host, it); + }); + } + + public void RemoveItem(UInt128 RtID) + { + lock (this) + { + _items_store.Remove(RtID); + } + } + } +} diff --git a/SharpWorld/SharpWorld.cs b/SharpWorld/SharpWorld.cs new file mode 100644 index 0000000..15200c3 --- /dev/null +++ b/SharpWorld/SharpWorld.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SharpWorld +{ + /// + /// 可变参数类型共同接口 + /// + public interface VariableVal { + /// + /// 参数名称 + /// + string Name { get; } + /// + /// 以指定比率执行变异 + /// + /// 变异比率 + void Variation(double rates); + } + + /// + /// 参与系统运算的个体数据 + /// + public interface WsItemParams { + /// + /// 获取所有可变异参数 + /// + List TotalVariables { get; } + + /// + /// 运行时绑定特性演算系统 + /// + WsBaseSystem? BindSystem { get; set; } + /// + /// 绑定实体 + /// + WsEntity BindEntity { get; } + } + + + /// + /// 增强特性运行系统 + /// + public interface WsBaseSystem { + /// + /// 系统组件名称 + /// + string Name { get; } + } + + /// + /// 可运行系统 + /// + public interface WsExecutableSystem : WsBaseSystem + { + /// + /// 执行周期(以毫秒计) + /// + UInt32 ExecutePeriodMsec { get; } + + /// + /// 执行方法 + /// host系统实例 + /// 当前仿真时间点,毫秒计 + /// + void Run(WsSystemHost host, UInt128 timepoint_msec); + } + + public interface WsSystem : WsBaseSystem + where Datas : WsItemParams + { + /// + /// 在系统内注册实体参数 + /// + /// 参数类型 + /// 参数实例 + void RegisterItem(Datas entity_params); + + /// + /// 移除实体 + /// + /// + void RemoveItem(UInt128 RtID); + + /// + /// 通过实体id获取在此系统中绑定的参数包 + /// + /// + /// + Datas GetItem(UInt128 RtID); + } + + /// + /// 系统访问管理接口 + /// + public interface WsSystemHost + { + /// + /// 下一个实体的id + /// + public UInt128 AllocNewID(); + + /// + /// 注册可以执行的系统 + /// + /// + void RegisterSystem(WsSystem inst) where Datas : WsItemParams; + + /// + /// 通过类型获取系统实例 + /// + /// 系统类型 + /// + WsSystem GetSystem() where Datas : WsItemParams where Sys: WsSystem; + } + + /// + /// 实体 + /// + public interface WsEntity + { + /// + /// 创建一个空实例 + /// + /// 实体id + /// 空实例 + WsEntity NewEmpty(UInt128 new_id); + + /// + /// 实体类型 + /// + string TypeName { get; set; } + /// + /// 运行时id + /// + UInt128 RuntimeID { get; set; } + + /// + /// 在系统运行前执行动态配置 + /// + /// + void ActiveConfigBeforeExecute(WsSystemHost host); + void DeathExecute(WsSystemHost host); + + /// + /// 存取序列化Json内容 + /// + string JsonContent { get; set; } + } +} diff --git a/SharpWorld/SharpWorld.csproj b/SharpWorld/SharpWorld.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/SharpWorld/SharpWorld.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/SharpWorld/VariableType.cs b/SharpWorld/VariableType.cs new file mode 100644 index 0000000..3abaad7 --- /dev/null +++ b/SharpWorld/VariableType.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; + +namespace Variables +{ + public abstract class VariableData : SharpWorld.VariableVal + where D : struct + { + public string Name { get; private set; } + private D value_store; + public virtual D Value + { + get + { + return value_store; + } + set + { + value_store = value; + } + } + + public VariableData(string name) + { + this.Name = name; + } + + public abstract void Variation(double rates); + } + + public class VariableDouble : VariableData + { + public double Min { get; set; } = -Double.MaxValue; + public double Max { get; set; } = Double.MaxValue; + + public VariableDouble(string name) : base(name) { } + public VariableDouble(string name, double val) : base(name) { Value = val; } + public VariableDouble(string name, double val, double min, double max) + : base(name) + { + Value = val; + Min = min; + Max = max; + } + + public override double Value + { + get { return base.Value; } + set + { + base.Value = Math.Max(Min, Math.Min(Max, value)); + } + } + + public override void Variation(double rates) + { + var dtinst = DateTime.Now.Millisecond; + var flag = dtinst % 2; + Value *= (1 + Math.Pow(-1, flag) * rates); + } + } + + public class VariablePercent : VariableDouble + { + public VariablePercent(string name) : base(name) { } + public VariablePercent(string name, double val) : base(name, val) + { + Value = val; + } + + public override double Value + { + get + { + return base.Value; + } + set + { + base.Value = Math.Min(1, Math.Max(0, value)); + } + } + } + + public class VariableInt : VariableData + { + public VariableInt(string name) : base(name) { } + + public override void Variation(double rates) + { + var dtinst = DateTime.Now.Millisecond; + var flag = dtinst % 2; + var temp_val = Value * (1 + Math.Pow(-1, flag) * rates); + Value = (int)temp_val; + } + } + + + public class VariableULong : VariableData + { + public VariableULong(string name, ulong val) : base(name) { Value = val; } + + public override void Variation(double rates) + { + var dtinst = DateTime.Now.Millisecond; + var flag = dtinst % 2; + var temp_val = Value * (1 + Math.Pow(-1, flag) * rates); + Value = (UInt64)temp_val; + } + } +}