From c143ae6ade0fd9ada77b708066498ed825f5b019 Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 5 May 2020 16:27:45 +0200 Subject: [PATCH] asd --- Game1/Content/BerriesIcon.png | Bin 0 -> 1506 bytes Game1/Content/CarronIcon.png | Bin 0 -> 2038 bytes Game1/Content/Content.mgcb | 84 +++++++++++++++ Game1/Content/MouseCursor.png | Bin 0 -> 31055 bytes Game1/Content/ProgressionBar.png | Bin 0 -> 3314 bytes Game1/Content/ProgressionBarStatus.png | Bin 0 -> 3316 bytes Game1/Content/TreePlantationIcon.png | Bin 0 -> 13537 bytes Game1/Content/WheatIcon.png | Bin 0 -> 23563 bytes Game1/Game1.cs | 73 ++++++++++--- Game1/Game1.csproj | 4 + Game1/Sources/Crops/Crops.cs | 139 +++++++++++++++++++++---- Game1/Sources/Crops/Farm.cs | 40 ++++--- Game1/Sources/Objects/House.cs | 6 ++ Game1/Sources/Objects/Inventory.cs | 12 +++ Game1/Sources/Objects/Tractor.cs | 45 +++++--- Game1/Sources/Pathing/A-Star/Astar.cs | 2 +- Game1/Sources/Smart/AI.cs | 43 ++++++++ Game1/Sources/Smart/SmartTractor.cs | 91 +++------------- route-planning.md | 2 +- 19 files changed, 401 insertions(+), 140 deletions(-) create mode 100644 Game1/Content/BerriesIcon.png create mode 100644 Game1/Content/CarronIcon.png create mode 100644 Game1/Content/MouseCursor.png create mode 100644 Game1/Content/ProgressionBar.png create mode 100644 Game1/Content/ProgressionBarStatus.png create mode 100644 Game1/Content/TreePlantationIcon.png create mode 100644 Game1/Content/WheatIcon.png create mode 100644 Game1/Sources/Objects/Inventory.cs create mode 100644 Game1/Sources/Smart/AI.cs diff --git a/Game1/Content/BerriesIcon.png b/Game1/Content/BerriesIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..e1df74199ae4b28d97d066e7caf0eb7b05b8fb73 GIT binary patch literal 1506 zcmV<81s(c{P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1$RkAK~#8N?VP)A z6)_NoHv}Qk&>*Fv?D(s zZ)1<`*|Ywn;au0d`+qz3frN7~P1EI74U8}gIXOAmJsNc7^z?MT1tHKSqdFEkxO4T# zzz}AH9KAlCYwL6u!bNOdOjjYH;I}G8ECjD$S4qJ4|2;dOZwEV6J0wR808)mS9aW|* ziIn@tM{@yON^Bgw0C=q#v5@mOXLBLGt2-799Ru)5anUMx+z+kVWOoP#N`sVM;T)F~ zI)*P4+&7j+aK14##txw}Wre04DL4*?2SEh@cnr9GNpP-xwW3G}pT4A0__RgwjS-R% z0z&o`g+FeMN{6_lAg+_9xTLto0JsPr{6dM*TLMKz2*3kK?GgY3424K#gz$~wIzD=g zR-_aO`Ss}WtwJ!guOEKT6@!j}+qi;vJx68wWVpbwVp8Ds*hQep_0L1_-{MoC;Y)b< z^ZRn|hMcinc63~ITLvm#RCEHR;#&HEoy99B`06-`$ZA3yeJEIgW zDXystNtvp&r6ddK)ft*H;W)79+7^<6z-zQ9no^2CW%&Y236hHPy`Rg>5rh&r_yGdy z$G3aSv$w@i0U!>m7R5qbCkptU_mLXBbX*BMXb{mt0;O0;EwqA{jKim~RuU*8AtlpO z4|1g9^d4wlqJM>GTJAkF`i@$=|xe4WFh>-_+vO3?Gy5i7YdngV1hh_Oqg!lsRJ?{%vD@fP)RwRjp#11+ZFn>MuiY_5FXnHI? z<*0T@&46Pe`S#sHx+Y>FxmQogRoC;1ZOts?a{f;|>F|Ko8WwPR_W6_LUOw52x(|s6*LyW&#E=|gDkuYPOT^4V z^mOEb0kx0;U>8%g_WkPPm*rj_i;&(*>X8z3sSMf?c>nUxuB520Ar`5hh8E>sr=@3bfDetu;rDk^kVj+@n))cfAL_%@`9HGlFx2XHDAhz~& z1#}a#w$5oG14tG!rk*yeX3FYGtL^}jgjnc~&!6ly92O%tV1*O`e zZk1Lda=HW9gbk)BOD1@ z`>Wa^(r~pqqlFaMhvt5&PgxK$ElTJ$Eow@sF?RDcq_zMTcok~}s5utL z&NfmuCxk=g#Ht0G7h;Ve#27<}F@_Lh3?arCLX0tl7-I-A#t>qRA;cI%h%tr`V_g6C zyHyUSf79Koy0d)y_QmDFba8MvUF_jEslso+&q8(&2mP6*|0VE*isRP96#xJL07*qo IM6N<$f|UQ700000 literal 0 HcmV?d00001 diff --git a/Game1/Content/CarronIcon.png b/Game1/Content/CarronIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..b699c9a3f735b8f13170d0e2347bea1123e09e0a GIT binary patch literal 2038 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&2a8EWK~#8N?VVd} z6jd0b;)4(k zCL|&n6Jirdh#{sbUT6hG@PaLr(2`Pi+4VpDPS2h_Gjrz5ZD(e8f0^!{b6A@0FW>i_ zZ)Ud8)IgsUzH+%7O&TZ|9v(KH>Pl9}_P$5n-;HC@)2rB$2BauWllq}|XiIi!JC5F= z&1^}Vx|4P1%d0dKBtphw@>`eM(#ZF_JCWcPo&89$MY~rO@8pqah$(t;DwAqi z*;Sk^q_SyBI;?c;Se8ncGY~8Ii%VYLi0{xfxDwwDN5}T1w?7?cuULQ-B_Oh>F!4i5 zC4$EqYPpzz>GrHx&QZVUdH&Hridisy<{BHBNM3>G?(D2}KDE3sF?;XVDYgUzU-Q`R zg=pU7O;82(X36{mNvzG2^EpCdd)9PbIW#b}Df8A} zH`$WCCNmIccd}hOvdB>>xBm1?D_3_nW97h&TbI5c|M|NybD$Oeo1HlF1Jx{Z4BB-M zMoQ;$Id(NZX+Y4?XP1#01*zeSchG)=2fl93 zly63a5mq2#S>}Ms3%C6AIX!x_B3PBSnSYFL5l$ z;;8IFsa(y%HU+9A%h6Q9zEkJQ%)T-UpTi2Zu5+p(%h^=1ly&OVq0G`3s6qk~q07?A zzN}sixARpUQy_F%AMWjURj1UDFEku%UabTq!j*-v>hH?3NkG6C`gIx~zc5|3umT~< zq6B1H4n-nF$IE`CG`pmZKDNbjVlvRo)tu83Is39ZLdJec5PVx z$+=68Q5K;o5U?!Iy#k#)s}nO?Qy@rL{(A+Um}Xy*n*xE!l1h~yplnX4U%yPurG_s? zZVCh=D?n4k3p)pB08<;^_1<9wOE7OQ*b_hwQZGKHKmhO1b5U0lhax56SC;>xZb=MH z0l%`u1T1*EKWZkPrhqS5QUZSc<8?ae<41x{WpwZ*3t`1Z^GGMm)G@iT7H3nyyDag# zf*sUkiq;h3Vr~j}l!XN3*A;Z&*0?xHS^P}_kFxX|tCHy&4T%$b^hB5fUSzpytWq}D zXsAa&eqp-(@K_>D0WY$oy6zbS)czBHSNYPgA6&}{s$Wk^>WR3MCH3p4N3VJ4q(Bl) z0e7;bx{k(5rzem|s43t=mSqB(djj!xv6TLjU>ch-hm1AG8Zv U=!K7CuK)l507*qoM6N<$g2hC?Bme*a literal 0 HcmV?d00001 diff --git a/Game1/Content/Content.mgcb b/Game1/Content/Content.mgcb index 0b600c6..73c3ac3 100644 --- a/Game1/Content/Content.mgcb +++ b/Game1/Content/Content.mgcb @@ -13,6 +13,30 @@ #---------------------------------- Content ---------------------------------# +#begin BerriesIcon.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:BerriesIcon.png + +#begin CarronIcon.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:CarronIcon.png;CarrotIcon.png + #begin Crop.png /importer:TextureImporter /processor:TextureProcessor @@ -68,6 +92,18 @@ /processorParam:TextureFormat=Color /build:Mountain.png +#begin MouseCursor.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:MouseCursor.png + #begin Plantable.png /importer:TextureImporter /processor:TextureProcessor @@ -92,6 +128,30 @@ /processorParam:TextureFormat=Color /build:Planted.png +#begin ProgressionBar.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:ProgressionBar.png + +#begin ProgressionBarStatus.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:ProgressionBarStatus.png + #begin Tile.png /importer:TextureImporter /processor:TextureProcessor @@ -128,3 +188,27 @@ /processorParam:TextureFormat=Color /build:Tractor.png +#begin TreePlantationIcon.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:TreePlantationIcon.png + +#begin WheatIcon.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:WheatIcon.png + diff --git a/Game1/Content/MouseCursor.png b/Game1/Content/MouseCursor.png new file mode 100644 index 0000000000000000000000000000000000000000..022df8b35ebb416a9c961a6110060662a54df6de GIT binary patch literal 31055 zcmdVDc|4WrA3uC7>6nmenikYi(k4WdB}=D8(>`q!BKz2~CuFI?Oes9#Pj)F_t{i4-|zQ%p5N%KF;uU)-N z`iF@>&}cO2cu{hPiJ2FTHt8Pz zPb6jzM+GiU@Lpo-z24p4+t1q5j^^j*r|RV9>}6xU!%o%R(;@M#{zSNG4BlkyVvwF4j2pOqnlekRqnIm}JZVEmlz{&R$Ve>!T;bC}$eSmM6J-_yy#(VNC(sx#L5Y2k%#N8)7P*?+yx20c*gIrJt6N*@85h;xZ|^^%=d0={ zrddH#)ueCQExGmP-e*_lnkFcgPf%^>(Ye_;e`nfs9i74Yjr)etXtMKS6lpXg?M1e9 z_{#y=38FOG-l>bj!L#RdGPHm@6ums(U6w{;Oi#D_<|%1AZ3`b@*Sf_OACvObdr@nd2RPQFEITJ-_As#y< z+wLrSGap4FOf0&?SVTF3fAWYW?)*a zFqh}YzfU$rocMA2X^^EUII6Cm_a9FEd~LEGySI7cUt|ErXsnDXF1+4;@vUoFig7(L`JjY>uj zzgZgXVl29MSTUfKGNwq%i~{2yZsh{R;JJYD4vMGd;h{%T4J0fw$U~ezNN_R^Uzw=r zehk58Fb_@OBmly)iu3GP85BX$r{{cUQk2BMPC8_80%jcyN?~TgxbrJIuqJ7e+f6i> zn}!+}L(&*TxsX=AKMw>P7iQ!DqfHoQ{vZWUv|@!lOU@oyVMW`92dV-=Ut>pr6><|p z4g!}eO9WPEkTQ=93Ymva32gso4F19P#}?r#PxB^_l@uMEj~_ypkR>6}a;@eYHq>fL z4lu}y*I@f-5(fa}0t^Z6qI|arVE;Hfik3Ubcbh-^cQ66Bg#hDYLW$^|BfblUQ zqT%vsv^U;}#HzsU?;FPc#g64n_yr-mX(X|8$z~2hzJeZhHJ3LLi|h-Kc-=OZbGdFJDyAl>Y6}gA#ec& zDdZoKH02-P1tJR}7cf%zgIsb6Hv;&HEQDNuX}N;}E6J057YK2JK~fdDgM9NSN%L(d z#PJ7>!_#+%=ebCbg_hg1ssxVlZU4$K7N$k+AetxS7~ghb$Iv_>ZqPj9SmA~V8F!?F z*E_Mb&dwwtT>fHQ3C35nVo~Ek_o0hn4(6iBU5q~;AB(RRgB7~sZix%?@g1|jSq97& z=HtIvMplt;1C}X(Tu5&Sxscwtd`uA+<^xd`iWP7ag|?VJ)OH#PBq0=r+75gOY~QcN zoTSNg4$pIx0KpnD!~2ymXW&BnZ!1GId~EJH& z-$7OgJS1?GsIbzxgN#Ld^AK4f+W}b|^z_$c57R{dk7=;iVM)j)06sjdXjqKJ;M+&I zOkqmr4)XCPiwU{=k7NkkC0Gc#JA@3bM+6I5#ljFxw)evA62vN2&R?7Cuqp`o4N>xq z-((8D6GU$4x5im1{{|@n!J(4qPGFd8g8)?m`9IDs1o^kK3yE0>A}-`GD1fLpMXGNj z797ypQ}w&9l^2(gO0Z5osq-LmO z06m~aSTc+0d}z76K^zI&4zLN3d08ACQS$JZVmWLaMu|R*R&>@lt;IZ0EDI^=t9gbl zLf{w7gK1EB5uyVEzYqop|0q#D!v6@65C#Ach@X!EOe-`9m4Z7ci~#^7WcybDX&zQA zk4IO@9%&Cj4~qX^*n36FhMacBrM^F#z*$5>;4FbjFer=!-&r0K%(Cd=xGw}yU|$%E z8v*`3q%LsL68KEe;`>bGBgA>fc^<5UM2O$#3^`Fe+v%_L(u$OCMnAyTMZ8e-fj1m== z39!sZfy+ZQKPpiI5KZ4$@RfO(%m8XWKw#ctI?sZ8u@K1MMx^W*nv%tA=m$dRb4B4-8fdv9w zkks#khSX4`#;Y=SUm%A=a80M`sXN6JPqxDD3l<;hKG(8BJ63c6ChvoZ7<7=lTWw98 z!&Qp-a{I1jL^J|A1(u=U1&Sha<0=Y)6UdFADv+B1RbgJy_ODPC@cLcH2yjDD6+q5K z70e?#DEvR+gWw6F+jP41Repf0_+f2VeCN1+(815 zIV*ahJ@Sc%mY4Xq3L%Lw3nLlLhZ%hpz$^el7$r1TfD$nl!c~A0REJhn8(5(9ObDz0 z#ve42`z+tcfAL_vXL!96?0>)+6ML3F>R4dM*G7_gXd3L%4y<2F6EWX2n4VdcGx=C> z-35>Sqr2dXFmd4Oe{j^64mJuA_n#dFR>2oO3Pd`>5%C?Wq7}cjT__^BR0-P-Jbq*Q zSB{|~iS7HRGJO+~Rlcj<&WZnEq_7>JCy)%^j(;*zcwz<%{WJ1C$XaTQvGk1I;DmI?gJ12oVts_D1CEeW}a5)EP9G zzs*mAE>4$KjtP93vPDyy!>GG<-j(!fnk1Xw=SupToeTM zqP~Pk;-erHr`Wncg4kShWCBN#53&Hqe+HRM&jO)PV6bO;UGfl8MAGxngBmVOTxx@&xOJMEloWKdqE1Zi4*s@YH*BH!V0$f5o zqQQI~xi<0D%mq3UylMK~o^_5Z#g3ng1)}5u4F-ROI6ov#|3IinRBQ)41_ZbANTn(nd9A@&) zaQ#LekR{Ov|6%nZPW|6qolgj507M-jkV*tFNI}47OK1>EH*Zh~9AIk{lsP^jtRcvS z@dnZM@pG64)2J1!HtYTZsYqxZIOXEbBjhF$D+DquA~Yz(fDp()EP~8+6X_v?w%4U} zN`)XU;;sGN>8Tm`5aSGE9z-8(-NB=+Y;NCSfo)_3z5u?nyw^Nt@{94p@D}y8$4#q2%j{$X1ne5VZUV`AN3LO=a95{;Equ;XIWrEe)UCsmNm^2CPmvjh^ zq_~^MIXCwoU*FK^=e0lhZeii>V^cXHHZ;fg#WNiu(`-aatXFs?Fln#mwW-HPxQKE&ZS8t8t{l6)n_3(6Z5v|(iC%Yp|?#)j722I6S(aY^3 zZ#vVw8s?h4g<~4lUeuIS;m8l7tmv7TCB_&2rt=skjV?kC#}~R(>WI^nV_`ijdV9u0 zMVfjHBFr>BRxB?{8-r?7r>mV4Q$K>2_biw?9Trzcaa)a-QxKuWqIv53$C|y6rNL($ zaB6O?@?cg3tx%k-YRpwT7302b4wGipOXh#a%%|;7!D(iUYcYZQo6w_h zjl^p*A|bal(Q5mkpLE4(;bpi${F$5*u+1A6c)n9dA><0VrFDN&hb(RU0-&cbM0C-D6PJ;D?X#Jfn$5tqa(!}f$!s?%v(F#LwdI{g9t9|LTe#Hr%f6+yn zmS+HGT@kjd`>nsAB_}Onr=fEM7}s^1z&VLxbng1)1P@s92rjwfzCD6;o-9+>L8pz! z;#AnB`alCfG9q5gCm@C5JSz*sRlMO@LZIl;mS5l|b-YRWR&g6`Ke;@*tfUCNCiman z1=cdi9oy}WE&zN9fur_ifGX56r-l?&ADaNv(8x_MtCQLR0?fIEdtE%lX;P?7t3{MO zNf=t{ikW6`Pkc9dz>bNmwd};1mYW@00V?v+$EWWiZ8^#K^!Bn6FTl@B7q7Ejc8JqT z+R)+HObv2B;ghZM;Ab#Ho-k^>Rr4h*kx7<#MQq~!#R03g z61;11L_2=p5;qJGm_D0n@X?msdY~K&P$$jT1gJEI!gytrE?Trdz>6I4kDz*l&o9#f=-LKAy2&h zQywBRem(h%n`I^5glR3LXe%*J=P*9bktsTZbKzf3gd|po^q#V3&4gqySZbzIq)6+! zUmShVumG1GtF0qSYgvg?{7_}P4WYtlU29F5M#6ZSw%t8IWI9rRc!7Z$sI%mEd|0c0 zts2d1D&TJvwa@E1`iuGC{9LtmBn;^`iuqvHBulG)gBJfGe+Ze$U5Eo?As?iFMo>2B z=uLG~Xe7#u&~kO~js)k7G?+6RF`SX*P+or9*gq2qU0mdL`utR<3mY)yct+8ioN{X^YrBtcChqh|&GLb>g_Y{Yhdy&Q z-JiQRKQqIX-L7fV3FoBo=3z=jt7L3t6YG+T*02(?WEhJ=B$Z7#PXilHN&$)3ov9%H5`_S9z9AW=}ofNRMD2%8JQP zLK|i(o4jcDE@yjHa+0jt(Ne20rO8ExI_DLWV#m}iwRGoQ)brYRYU16qS)pmA+lgW9 z(d@x5!F?ewC*FS0QK8lK!rYa2uVJyCe6{SyvIki)Y1!PhN2{GXXtTophJ=BlLoE-# zaU8q*+IwGi|Ctr@Wvv>3dN!W1Jmc9df8~@!)pBb-OfB^Nj`bEz{E~ zeZZaGoss3rUX|d^$2qIRdoR!Pbe`wICFkT{$jX#XbDipbg=doC6TJgB;ws`=#feAa zW0d^e-})YAE|@+&D=M#{63)fcZ;3CTR5VA%OIEHpp4Z(T#HNkqEermU#I{L5mIvQ}Y|hj!`&$#2yFh$M9?cyk&gxa(Fc%BOhME^Tn( zIaDOGtUV#n?S_6t4G*FAZn^thhP_*zh7GLS3!BcBy5G|3_r9Xqw5P z`d5(=09~V2*Lts$ywwA>w(TfkE|{10t6U9ad!TrGn9}a^e)3yuB`lL2s(C9Z^!OdgRFz5ZrZ+MMu` zOh1f1Rb!&FpcX&r{wL;qMW>WEn%xEVFV-&o=!p)a&hnBB_7nEo_&PgVZ==B6xo&mG z#GT5CB+ABsNdtM07D-$=>Du(PrkL=TBfk7lmEE~BQq~(kwoTmGcu81hm+a{KyjIn* z5{Xpc`MV=O9I$Z)s-&~-~kp32?J*IaU^mzUH8JsXBp#4(EY zaF6=oUpuFvP zK9K^XRY3Tq>5-rt5)Epb$&`{BkRJwS1v^}0nkJ2PotldfhlnRYh=J_YiR>L(e?yRr z!d5;`?4CVh(rrzzO?51&WaQ4X+ghbJ=||q^oSv^coIB_8wBpsylWw2!|GBDgM8-Wt z#3Xw8r%eW~kGPy?V$8#ghbF&P`1@W7P##ICU5TZXKizL@j}YTv&e>(27k>+Yq-uHW z9B+-f?({Pwpa1Q@sj5)3hL8i#eo>#C{?XXQ5vttB42-kUwuc~2{;0BtJl9jak>|*C zj%)Gc+b=FT%K2YJvZEQXS2gP{1;;yZ5>i7`j*r6>A6oP&vlc?7u3K(UJiMzU>8WE6sdJ@8l+>fODns@n>lJ=g47F&^qexD=br-~8UChNQhp4mw6AQS z@Zd1>PgO_vS%^)J8G!_WpQp2%&&gQRBbuS0kOBt~Re-n@cYfu2(tSo*DdAfJ`DPd^ zx21Hii%^fe;lOdGG99?YZhpTmPy4gCbl$d99vTLRJN5P|s+2wD6%s&bQgNw_wQQ9G z#gmu!|;NY`%X5jyHsXiA=Vi;8&eQs z>euQPp}zO;oExs}%e)Dv=9DU;HBi*NJa6z6FlQt{lN7C4xAY@y+;GBqASiD-2Hb4V zbnb14s`=47HzX{h+j+d*WMwPdmThr>yeX&YjHO(OCH|(wH$uHcv#&oj^dO68&MW_c zdx}!e)6J{3GvX?U5}ZESHMGd0j#`@+@Q{&MrXJa>a}tXgNxDGOfWbCzI!5$O)c`E8 zq0e6VN^+LHjM%m8itfH#3~D0VXYmYYCD!E9I?noU9N*)g&m4dELqglcULF5Xp5vvG zBVX)Is^Q8Ti4N$C=Ml~Ikr17MMBf$=tv>idHeB7%8M=VOW&xBEUtOv1kd?SHw>wwD zU`iU#c(<}WMA^5qVzNoi1_ljFbLDR{UR$mF0@xa#DS(;%un3%GK6e?z|oGRKo461OyXD@$s2v1gJ{AgPpVV%6Hk zvu{t|xCnKYX5YQ6m@3;CDs_x`@8||Fm>$n3g^L&edYltrP=VPaZO$g%qe)#6*wrIcLDl8KbXawq4B zf(pCjD(Ao6{*3~Bbu6B6Vq5DfcvwyYT(;9`tb{iKqZh-yQJA8@=Z7S$sf!hc>`Yup z?c7a$5I9ym_2r0dargVwP=^fY(Ba0t%Xe+w{YqBCU%By#Hs_d1h9BlF>##{>$lt}x z&CsPbYoSfijFpcM=tIP%yKlNm8g$4r^w{@lebGFx&*3sBRE#(M96cICDboua2d-rm z*B)gQoUV9b({}*xbx=$zGUm?tu&iSTNJ@XWpLCx3MOV0&VH|&YtJh7Q^IpVxxOie) z3-Ue0`Mt|Ot%qE7t_4&MeG28|wxUK|aoCns6nkB|EJmzkLz;SbNIxGk+NEqC;^Lo! zqPsyAUpu}#u}TjTdzmGWQ3RVs%AQ0{JkpJ693)O%>ugp7?P3_!C)u~7ByW>2DlZ#B zayYp%FNom>h2lxjPo8!%8Pv*QlS=1+BXO-wpmF)35Yg9s&R#!$|J(oF-=cgIT$3~F0oOr$}rKn1QWRiY)XRbxA zUgCRpE>DKd-^xlJK<*{^GS<-!oG90+X+={4hC_!WtNf}UuSQX7yU$1HVV9?-6H}c$ z)>K`eZ+q_eNb8%B*|27SW=`L2?M|w1oY!T@_R2DdypdRu5?4VXHE}e%zn|gfE&T=o z@5oCh9Xe28vLvj&u4ltQYJc@xXtP&sw!c8AF=2)&1;?ssNe`@byYj_2Pght66Gtmu z_^bk`d{DEZkH|Rd%AS*OjR@4qB$|D>Z%IY(;IWaP=Br0ayOy(yIi6e5mFRHs<+~H> zat{<1x1CxrW!%-Mj%IICjZdicpM#bvkz-n+7^u?tPVJUvU%mJ41J{VN30uPQ`u&tl zIQfBpwvG2~u^;?N;@x9PGno_|Cef$g%Ke<}`|Qzz_f(p&hctoifg7FW$5%yotf^Co z65EQ|!t&5;9wW)OG#>_B6S{^ z;qJet>PoMQ?T^BO`Xz?(+nQ!Ozj?cqCl_rr`<1Z#IGRzkt)+d{vh{w;UKUy&-;)b< z<0%zj(y-+OEY5WtxEDHy>R$?ciGE_+F1)@)ryPx7U!tBx9O6y z8!1RDr>7VnVuz>N%*s9WNVCtxGRB4q1|X`>-k{2Rt&iV4nT|95yReQp@N8TDZ2sW~ zZyn`7B?L0-Sk9TO2BIQG<3oNe_gCHDh(@QDl7QnT0GQAJ{2RHSF^TNXfx2RNg-3u= zP4cotnakkLNmnPiUbcQYMnmphh0(S>a3-`T@O*ny*5_=^$X51yaxlVJWL2fa`av=y zU<{}!{FfSqsN|w$o*R$Wl5~McKMKrl>v|0qR*%)W?%ed7nJdrqqO$sWpOE>z^XEkl z%Sm-*M-5o==q{R*bF+p29AJ^tMz0!YP{nr8ZMExwbMZbWL$LpY6VLff;R9 z?FfOF=PsyL{1Gl>%!{9QKR%)ZJ7Y`$KwVFB+1Zz5{mpF1V?9*iie`Y`^pDluI8Y72 zXBrJ>EDdb6`Iwym=tCW>JF6nhiQMc7WOjVW`nNVz_&luZ-zs;PU`EOY!GILw0c*`LxH-Dj=CK;^d=7XwLIYbxj6q3vCww&G}a2QaK0-GCnDb}B38UL< z-QEnni4j@XT$?I9|Kc;Xt$3T3LeMh^{(#k%u#!DL#9tSj+~B+HlmjQmJVA_)tN*gy z^;biP;Y(y7<(8XM85_A}x;C!Gx!7QQZicf<*g;~?Fjn%H z-VK(>cq;6b`gESc`eEWRD3gAlg8HjTh``6Byc66)AvuMhoaHm;e8+*M?`95Eq$_m$J4zD{f0;twWV6(ZS|C zLqDxKm)=4y%~!d9?Tc2U74M0nsX1qyoiONDR%S=#QJ_K31fbb2o8-1-E9h*GVXWHg ziM@s9*8HaqavD;fx^}1e$r99_A!Qr?~LuTsvj`6w>)c}u(_Fr`iuP_1Aq>ks`J`bF`C5vSe^6EO$#$?;i=oU zW7xlv;m@3-sY^b=?p3Aa8WaeQA9Oe-vJiTp_APc8AazMKu#YVB=K~QqC&hh>J<45g zN^6hLIK*vjG-C*EB?8>w2!7t>t9;xnwz=~WVCGzQzD#gy)aVpAt-NYuW|IZz7w{{y< zTu14=(GuW>@>STK3{6f4ZhqCP;JCYH+fMjb{>Dm?=QzuuIC?lHY6wXU?k|W|n;*3m zX*=57&#g=7$-R%M9ze|dl?I14x6B~+E)MhF=~a~$_7s|e^tjgRSvR{#&uJnn`S|%j z-brUGIQ7_mwlg8n^~QrXEjLgAR&3(~*gundt6Jx;dU+I^rnuJXteYPM_-yv~sw%`Jq#0Ds zcFu%XP?YucPsltxB^6`eLIAzkx2WPerWBXumK9Wod;9H&)!?!3@eKDFM{tq$Ithb? z=P(UbM@f1f0seE#6#AA^&voSJTo#g3m({=}!qBO=pO*`8x~hM~uy!80!pzke?jxP& zV2Sx2l`iAgQV!=Q)~$O?mDNqsoh_+?)k8>~NmsI58Vj$?+7Mx`Eee*vk?W;T3>|*k=g)65F6UR(l2y zEd3*E)(S!EoPmLV zkQ4Ta#JQf9w_IB@^73454WEo4D9wCl;?_11niDuPxirG_G*8_w<#)J>>h^M}D$Ima z5H3504?frZwQp{TEtC}jM!H-bpS)c9Cv;yWq>&-2|2+^Q5%Wxz(q`&q4xmxF1Z*f@1PuYA;$9CsI*~j*j@~?2qtVfp=CwIOf_pC9mPYYv*VxmafjAx?iY5<2VdXVKW=YHsOW*^_d5?qqbsAhYdikL~^Mve?)Wgn~A;ldXw+2gk*k$ zB=hGz%B-h&O0lGd+6L6tszATvq>4K13K(ugRNI%{{L}T94r!*<@Y6%#OJwYL<+<3 zM`hMV;AGyXbp{WS;rmxExHgTg!4st^#?cIg2c&0(rmaK-&Osi`0)ivOjl;Zq7Z-4= zL!Bnpy}v6&z!fyB%%y$eb%NKgpKZ8!k%2dTtGG4P30^$mn>|^@(c)0b;{2USs+Px> zcJWjB*YA;vC|}#B^Oti|4ZN{5+G`@a+b=9{L)gla#@4h%l2cw89);&Fl`jfF)1LcH zW0fo1VMA0puL-dCV#xQw+S1V?F8C4Zh`XWfeD-Ukr z|45pv(*019C}A{Rsjt`Sit;tsALSaXeXt0RFHjZU*L6nDqXO(eSuwXQjbV)5D`Qxk z3mh}^U!I4(&}|irAW&EsPutL`T8Nd~A1B6|$m;fQEO<;AJ6KZ>dy-EoSD{~kCl*C0 zSWxv-s|LagzWgG@-{{X5zwqH~|6g3!ty19?RVJCu8}?I5CYQIhMp=jj=seTxOY-5N z1+yh)a25WsKdDxm1FwZBM|w96WRPSSv8l(5rDcX0hd5%_xR#2>mJm1tv%}nlnCRx| z`SH=h++}+Y&I+a&L+?GQ=rXPxB%fG25Hcx|?6sjtze>+<4>ln!+N-20@(zJ4eYn@! zpjxX-MsM=HqgkP94>Witag!i3V95cvlVw=!&do-{TmIlSSzz6acg1;^ovjR?z?TVS zx|-85i6}*ipS&aOI;fRXS2q0J5WKGT&+gk!1-I+^y22{k-+8!Dy8ct@8;&f|$pEzm2#<8Ekkvt#0R?ZQMs#^G@ zX0tsXrH)rrqhoR83!H!*K7u_hYNYFIeI3B$E=H%m!YINEvL9@F?$>ra(&~C_&JPVejtMtk7UtdH<#!X=pX-l|yt;85v@Pc| zIp#b-`D!-CEQRMrB#io(6i{|D>#DW8{^;NtB*B-lug}NMi90(lVM|SfROcB?E$do- z$xY7R%f18iGz3Odoc~smr%yX@G7QtoSvfpdcQEUMQ+7MH?pdI#_NHAGem5V)!q|dC zH=VGcF2&9Jj0hfSe2j)+TK6aY6-fo|ou9ICKl?D)vOT$|$}W_fA1C%}2Uk+uXhX;a zny6wW&{v)O0J{nGvw{q5rRt7f=Y-Jx10_ApCV5MZ-a9u)ZL&Mh3Z2>0zhSCP=M1-L zCjzB4ws@YZTK1fW zZTe-``uiP$vg6q2;o~Jc_#BFxAm{c_y;oDPV-aF&Cmc)H4D;qFw21|rjGEIDCI~j9!??UCt>5E*FWEN{JGY{;2d$96?}j5 zH2R&Ln|D`JB?Xm*P=$UXTK{2WYZjGn#@4`V_WaDpm7yFM8N4jsmtbSX;LF;zJP*D( zD}_XLVgX5pteY)+EX3S1yRBWEJ{v!H*$t5WIu&*NfY)Rz9FK!mx~4MpF}*Jx0`Y3! zPOiX7Aj)L>oX}V_5P>5#2?|u57-wr%RoI<};n|2+X_8GuukmU5Ie_khSl<@Pb zA(%8>2n-`9kdMtPsVyKz{WOEvG;Sk{Z`AdsV|i4fdskOd+wK7C)$nOkEK#vh#C&!G zm0at?F@GZ{k>a5eH_H-pNe8>hb`VaK%iu!|ye>1})`6Rv)@=gG>u7$&ye=v|pqN6n z?!d!m&A>oQBqD|(AR=DHo!7q@Mff$}rz+*u8^xNINA6Jl=0yD`)Un3PF!>s-t~_qL z`6_)OZ;xZ23FrPF;1fwQchk1+TdAShHBj5^tg8wmT1In?`3uu7ypudayU8dtcY;0Sw7e@s&#t46%>Wxmq-YV9t>YTf$7yv89D zKOp;5lI@2=0c{5U=~REb#=2DuULkc%?0pE~gGwYsWcy&2Jd<+?)J$2f(2%0X4~ep( z-{I=sbwR7b3SV|Py1gMQ!@q%mqs>Q^Co5L^>h66$#x_Sh^nP=6eZsI+VuP-$uYEAC zPx@dXHmJL%DF35OP~hk(#wW^eHZKIARBYvEXPl-I5JFPO>minyJ=NwMEveR{oGcE^ zrz&&SwKoasaJq#cEKy9;!uQsY23i1gTd)!;RcqH}R zhE!d8kqa^8JNWX+7EXeWLEjHwTcWLpcRK8@=XD*NKa(7($(v4QxzB(DZ+QncrJ;H6 z#^jF{Kc)~9T;@_0Y|@{Sxa`VQxf>D#KFNmy-Y9G#re;oNGa=b#cUzmsPD44tYa`So zo@ca453DJ@V|sWa)Ckz7P_`ay(OdPhA#Q$MpL*8Sg|U-UGKEEqwQ+%V@#h;OW<3Af zTT=ARQFf}zuM>MS;bYz5?~=`HwYsM2X!zCX&FfkY0pZ)j=8D<;upMkwilLi?ZMevq z<}vV!go0_lEe|HO7QU8+V9G7e=4eQY=9XlodSth*gR_RmS=oyYfw-je;te*BVb}L3 z+Jsoxm)9Tpk|?ozn`*`f<3Lr1Yf*u}6u5P&`xr>ZFpM~Lc?D#%{<0*g9ycrzZQWp? z$RT!oU~b!>ie_wZi3hyfR&ZU@+|%4u@7$^GN*+Aazuw>xRRD99SHMf&Bw+w6>)nC7 z!$$zXA|8M}t!nR5bv`ww6%p*uWpehU)*TzvK3DsR z(NN*LjYT22GHwlI)UM8fIgpokCLSO8@=ulai90PTYl%v{p%r|*l`{hHaDlUz@YM2Y zBqLOv>yDzbYN{F@i>^QsRffvyb(##sB@;4t~(4TCswT)`6G ziIGF^hnwt|!>%~vFn$4Ngva{D^?);muN5;{qB4Kb5R5y5w5`kD@PR6g3t zeG`2DicU5;$ctr9-!+Zil|qzWQMj!<6N9o01Z8+=s#kXYohK-D+F%X76AR4-<*Jrt zV8x5#HCtJOhkwiqF?735|cd>S9K|!17y7*ZHypdNH_&Ioh%*$7}1jQRJDtGy8 zvwO9HO{cnc3haoQMtW>(cuWze$$0@qx=we0*>pI$>b;Y6I88fBPpz^1Ibzq$;bUh@ zD4*Qo+!t7J{U968LGS(TdTRmxn-gdUL`aTp(RXRx6Cd{hLg&>DqaQK%?s^7q$EY}| zv@?dLq8Yk7*i3~;jBKWI#2?EzF&#D9S3!A>mMh~Jg_GY#_IueUN(}5uwrlsQxAEUR zkQR8(BQ_-xkOx2Ygu(GMC_g@cuH+v($5W+0}hXQqiy17!7Qmy6sJ)C^la6suSR-v7o4I z7^~hV$X;G_e^J#HNKL)+(YYDRDhgAICuA8oh@KvpZ915n*=-g@+V{)cl5cLt8;L@2Xz0Qtc{ z#cggxWIE$;f`u&(QSke1G@8ZxVr*yw!I075o#8bv5sl5RC4mv}Uz`Y|NjD@>Zz0x& z>}RK&zk=TrWFmXw))#*!ZkEO|yy5{=BLeCe50`>x-ppGo3y#~k28|mQ8TW8H@S==bPKjQ^du zcQ;SXPb=zkcfECM@Lk$FNmg+23-dQzQ>K!){WoX{ce1qePYqk&)NVRjeCMAsrN=Gi z{}?#)T=l0|c}79lhtoQGDL!;{8A9LhpVl?N$6&sC!M}*%dViIIDU_8Stu13#y;OZ* z0mp4?eh%psXD{#BaiC9p+tgPBux9)wU zUDZ1lz1Bv_DR$DMNr#g+My|4w*B03~Rwdf>$`5X{HZ9&dHEfu*M0BXup6zpgW4vIg zSBUL9b7z01cIW53o-gJp<)22pb(VI%tXAc9^PsrM>ral!m%Zz^cRK#a2r`SygkPKl z>Y24uchI!G(BS;$ka;D|-mk*-YrEdu@aXzo+7*!r)qP88LFt&6f5}&?+NkT6<2O%L*T}`lz9~UI#$mrm zt-~0IyE8ZD8lLyA_v~~u-w;wAQo;(=siMdVbImzh8EOH#k^USq%4p=Th6kn@hZHT) z80oO&j96phn4l^@ImV=0zZTBSxg&eR=g52jJpS-9FXzi*+nxs$B!U%AcRxqbYB&4g zO3QaS7+ADjA8zj~^WGwOIV?7h-6wzKew0YP^i|0Sl?P@M)6+LY+uJ=bLJXb&e{B{57#~%CgPpu1iZ)Z`4za$B+HWk$a zc1H{myw39dwAxK?w%-sJIomqt+EKC3wyF_vQnGOmb9emmR#V(@^JT>DY@2h=#m64O zTiz%{T@h(}0MKDPY5ka+RA8V+m)-JVy1|l(i%mvo|14|u+TiG5s&~CEQl_A*-a1h< zGP-6uYXUfbV{+?_EyGiH=mafuE0GjEy==0&sN?1+WN-X~G`61Erq=7l-D?j_@(HO= z+L!U@X1nF_LwZsoTfTfzG^Q!Hh6Y}E>~X*Uz`b$v;eEM{!TE8=vd{P z%Xkz1sw+v+4e5&In|0rsHawbPwA9I>!H$H(+FL!G3%@>{X5@IZxb5NTDVzqPVeoG!ec{`U$19WdQ|yc z-!zV4*T3%Ld@duk`dizs=Oa&tJ$E!X!-{9y^>kK2#@eYnInAeOH!A&b_cMKK`om)$ z7Av!diPXOPR1a#IovE|TTb7}Ea$L8gYU#3!QpO1_n_5h3(|Xv>M-J2tpwB-@uzu4~ zoqUw>@XvQH7~IDUS%w>Q-(KW6W~!ab5}7%kq0PXkU;FsA{?R+L6?)I+Eel~7h4_!Z z{}M8gH{GJWqyOY>EtLphU46~cPa1nfCeVGg%M6H}2g4$z>E5RX zk&`V0r(R`k8Sd7s5T(r+Hn=rYBsBGX0e0MV4M(=lQs`-NIo?-%0jz%C|P zcm494s1`K1@cf4i$(nf0?(6R39$slIH{7WEmfi5kk(w3@SIF!i5waqpPaeNUs>YwYR&(eJsA`+nJxj5>Q%zxksitc!6H!9@ zpRUg-s0^*@oMz-!^1C+Uh`zm;sFJH2s8QYCos~UH!LPj2u|6iTd$WJx&B&icJb#y_ zcWJ(H#T(rGTHB8t$o=d$ui&}}d=4whzAf)8CYpEt8mi!4=g96yKi_}$fhZ92g1DnD ziu{(4$my~nagJ>sDw3j4(l1vkv;XG9Ci?Njah&D#PS;5;pX{!T=}F0HlsLTw$f1!Q z?$^GRyK^6VRIzm$y+lMGnxejrWpZXRjY3FzlydN&^x)CG5Sqwe0}~H3Xm{#jW=n^z z!@^W3TCxk#{Y$3Q{G*n{(oukVp=hZuUb~T8QW{=JM-EK)njsEr>(ZKKm?zpX9B%9b z%(_bR9?8lwj233@l3x)NdsW?e|h#AIwVR`?I zstKYB7@_Klcii#PppHS0UBcXl#>A&(;B4<;!Ql#N5ui?^Gx)>89OEQN=qvLUExxtR+$%ZW;3EUPbJB0Gi2mx^01X-G``A$moI zqTyV+)voXw6z;+R{p|6grQ+PAROl^z1!uTfUB~ffo(M%ZmyUs;wCXh6*IDjC5RCtb zO0w$owcn$teg{KcJ-rRVDeS*gdbGn`s)PYi6*3{d1pz3jTAy=Ec02}J$b^Ijyrgnh zjx&d8RY+zZkF%dFNS-ezDk^^7N*5zL zzvLv9DWUd_PAL<-R%GjsY@K0aB}!)c(!M&3cGYHC>OAqI@_?$*OXW<&B-YckC8Kt{ zsW)LL{w{j5vMjjSo@o_>4|;EJLle}^ZYHOV7abu38STVcG@vMV_H;SXZtb{{lCme% zRs^6a zCp?TYdxh3Zz3el0rT4p|LsK);ak=qj7rRY1O=R{FZX6ZKdZ*{){4M*(aFo+8-I%{Z zPJXdBaG={E$k@nODI1=e%(`-qVMM!Uznd^7nX(L;O@=xA%`Jb_er?S1 zKVECaNgeMTD`_5kPyGhk`@>dMW7@&1Yk5B8WZ2GJ|emFS6$`31Ctyh-e^I`PDogJSRRPNDvw#SrKY8DgW zd3dh(gQ=#pT+@OTVb@29KKyf>=MhEkiBRyx@=8|BR~*^0-$iS5h_b@boJ-o_W$2UD zNXx)2KI;#tONE37)tCO@2l$Ldi+s-YR#=A6_RoZy-S7gM$oLhAtbuvc!9WpF zb&2APA|LON)$-Aoby(w%u}A9`hV9f+G%{4pba(U=^9)_1DrOpKx0LoUW{hWAO8qME zAAV)osh;MfU!ek>a4(LcotWJobs~oLPT4zTNv5R8tKz?0d=uSU5QTK5+52H!&ogp( zhW$iF@NvVk&6&?;(0(dc7C$jRt;jF)@p${upfB2(=d0;P!NETS*UH+f`+x_^_uv-8 zn@8%TtREukuxfL#uVJ)J6qM%o5B~NJne-+$TkbYZ6gdGjR?9I|R9}DKQbS2_MxwIugL59HzL0`l~X(7MqZe6XSVN}_BUrb$Z(tXiaHGk+QO^vb^NoJkt z`>gLEOUwN7VVKcP-DrP{e8Di9rgF% zpU8LvVjQA4r+6u~lp19xlXHoh^)h9rJ!OF$WkJdhWF=<~lX_@0^~1*>)CS0WN}?Xh zrSAU2g<48=G+EIyf%|w0g%oU8z|i!9=#en1eQPjn^2l*B*6gf)15?qKFIl}fb&*xr F{{_ZC&ustz literal 0 HcmV?d00001 diff --git a/Game1/Content/ProgressionBar.png b/Game1/Content/ProgressionBar.png new file mode 100644 index 0000000000000000000000000000000000000000..3fbd568378034727c9301f2d53ca7e9187fe5c7d GIT binary patch literal 3314 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV2a>i1B%QlYbpRzEa{HEjtmSN`?>!lvI6;> z1s;*b3=BdgAk26#O}+vsC|TkfQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%K$t-4M&b zz?1Lk;uum9_xAcm-UbH-=8XsbSu?Y0{|VhDlG?U=o9%s|IeokTvokPQ_%(pcWMpDs zNMYe%V3;7Nz`)?(HYzw8Aft(4G$V|b45OvuXpJyh8;;h7qqX5^Z8%yRVyz8bwux^j XWL>Xf9VH9wOE7r4`njxgN@xNAUxbTC literal 0 HcmV?d00001 diff --git a/Game1/Content/ProgressionBarStatus.png b/Game1/Content/ProgressionBarStatus.png new file mode 100644 index 0000000000000000000000000000000000000000..45b89791d93c85d534c71534cd79a892c9bbd133 GIT binary patch literal 3316 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV2a>i1B%QlYbpRzEa{HEjtmSN`?>!lvI6;> z1s;*b3=BdgAk26#O}+vsC|TkfQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%K$t-4M&b zz*Fey;uum9_x8FWV}pUffdlNCFIGm1Tw>)uTe987dEN8a`ylJy?FW*_B?TB56p|en z7#eyQ85tOi*jN}CPDqRjjt0nRVi?T`qb0*=sW@6AjMj#uwc%)OI9eNy)`nPX!xLxN Z@|UokTgAZX2JBHVc)I$ztaD0e0sz>E@J#>! literal 0 HcmV?d00001 diff --git a/Game1/Content/TreePlantationIcon.png b/Game1/Content/TreePlantationIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..b9164db2e3cd98693e1691c96d3c8afe329a7b77 GIT binary patch literal 13537 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 b4`%-l@DeZyATWrd00000NkvXXu0mjfs~;q{ literal 0 HcmV?d00001 diff --git a/Game1/Content/WheatIcon.png b/Game1/Content/WheatIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..0f4ccd6b4bc9c9eadd32feec750ace335fe068d0 GIT binary patch literal 23563 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 WvCGMu1`WKSD;KQJm;ZI+-hTlQ*rzN2 literal 0 HcmV?d00001 diff --git a/Game1/Game1.cs b/Game1/Game1.cs index e9478bc..dd29dd7 100644 --- a/Game1/Game1.cs +++ b/Game1/Game1.cs @@ -14,13 +14,21 @@ namespace Game1 SpriteBatch spriteBatch; SpriteFont Bold; private Texture2D[] tile = new Texture2D[5]; + private Texture2D[] Crops = new Texture2D[5]; private Texture2D tractor; private Texture2D house; private Texture2D markers; + private Texture2D mouseCursor; + + private Texture2D ProgressionBar; + private Texture2D ProgressionBarStatus; + private Tractor tractorUnit = new Tractor(); private Input input = new Input(); private House houseUnit = new House(); - private Vector2 mousePosition; + private Rectangle mousePosition; + + MouseState state; public Game1() @@ -62,7 +70,17 @@ namespace Game1 tile[2] = Content.Load("Plantable"); tile[3] = Content.Load("Planted"); tile[4] = Content.Load("Crop"); + + Crops[0] = Content.Load("CarrotIcon"); + Crops[1] = Content.Load("WheatIcon"); + Crops[2] = Content.Load("BerriesIcon"); //Replace 2 and 3 with the new crop Textures + Crops[3] = Content.Load("TreePlantationIcon"); + + ProgressionBar = Content.Load("ProgressionBar"); + ProgressionBarStatus = Content.Load("ProgressionBarStatus"); + tractor = Content.Load("Tractor"); + mouseCursor = Content.Load("MouseCursor"); Bold = Content.Load("Font"); house = Content.Load("house"); markers = Content.Load("Markers"); @@ -82,15 +100,15 @@ namespace Game1 Exit(); - MouseState state = Mouse.GetState(); - mousePosition = new Vector2(state.X, state.Y); + state = Mouse.GetState(); + mousePosition = new Rectangle(state.X, state.Y, 1, 1); tractorUnit.updateSizing(input, 0, houseUnit.getVector()); //Updates the size tractorUnit.setSpeed(input.changeSpeed(tractorUnit.getSpeed())); //Updates the Simulation Speed tractorUnit.setTractorSpeed(input.changeTractorSpeed(tractorUnit.getTractorSpeed(), tractorUnit.getPos())); //Updates the Tractor Speed input.controlWindowSize(); //Controls the size of the screen depending on the number of tiles houseUnit.updateRectangle(input.getSize(), input.getTileSize(), input.getSpacing()); //Updates the position of the house if the house appears out of bound - + tractorUnit.updateCrops(); base.Update(gameTime); @@ -103,13 +121,8 @@ namespace Game1 spriteBatch.Begin(); - for(int i = 0; i < input.getSize().X; i++) //Draw the tiles - { - for (int j = 0; j < input.getSize().Y; j++) - { - spriteBatch.Draw(tile[tractorUnit.getFarm().getCrop(i, j).Status], new Rectangle(i * (input.getSpacingTile()), j * (input.getSpacingTile()), input.getTileSize(), input.getTileSize()), Color.White); - } - } + DrawTiles(); + spriteBatch.Draw(markers, new Rectangle((int)tractorUnit.getTargetPosition().X / input.getSpacingTile() * (input.getTileSize() + input.getSpacing()) + input.getTileSize() / 4, (int)tractorUnit.getTargetPosition().Y / input.getSpacingTile() * (input.getTileSize() + input.getSpacing()) + input.getTileSize() / 4, input.getTileSize()/2, input.getTileSize()/2), Color.Green); for (int i = 0; i < tractorUnit.getPath().getCount() + 1; i++) { @@ -131,14 +144,48 @@ namespace Game1 spriteBatch.DrawString(Bold, "Tile Size:" + input.getTileSize().ToString() + "pix", new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 40), Color.White); //Draws the tile size spriteBatch.DrawString(Bold, "Matrix Size: " + input.getSize().X.ToString() + " X " + input.getSize().Y.ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 60), Color.White);spriteBatch.DrawString(Bold, "Tile Size:" + input.getTileSize().ToString() + "pix", new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 40), Color.White); spriteBatch.DrawString(Bold, "Tractor Rotation:" + tractorUnit.getRotation().ToString() + " Degrees", new Vector2(250, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 20), Color.White); - spriteBatch.DrawString(Bold, tractorUnit.getCurrentTask(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 80), Color.White); //Draws the tile size + //spriteBatch.DrawString(Bold, tractorUnit.getCurrentTask(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 80), Color.White); //Draws the tile size spriteBatch.DrawString(Bold, tractorUnit.getScore().ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 100), Color.White); - spriteBatch.Draw(tractor, new Rectangle((int)mousePosition.X, (int)mousePosition.Y, input.getTileSize() / 4, input.getTileSize() / 4), Color.White); + spriteBatch.Draw(mouseCursor, new Rectangle((int)mousePosition.X, (int)mousePosition.Y, 14, 21), Color.White); spriteBatch.End(); base.Draw(gameTime); } + + + public void DrawTiles() + { + for (int i = 0; i < input.getSize().X; i++) //Draw the tiles + { + for (int j = 0; j < input.getSize().Y; j++) + { + Rectangle tilePos = new Rectangle(i * (input.getSpacingTile()), j * (input.getSpacingTile()), input.getTileSize(), input.getTileSize()); + spriteBatch.Draw(tile[tractorUnit.getFarm().getCrop(i, j).getStatus()], tilePos, Color.White); + if (tilePos.Intersects(mousePosition)) + { + spriteBatch.Draw(tile[tractorUnit.getFarm().getCrop(i, j).getStatus()], tilePos, Color.FromNonPremultiplied(0, 0, 20, 40)); + if (state.LeftButton == ButtonState.Pressed && !tractorUnit.getFarm().getCrop(i, j).getHousePos()) + { + tractorUnit.setNewHousePos(new Vector2(i, j), true); + tractorUnit.setNewHousePos(houseUnit.getVector() / input.getSpacingTile(), false); + houseUnit.setRectangle(i, j, input.getTileSize(), input.getSpacing()); + } + + } + if ((tractorUnit.getFarm().getCrop(i, j).getStatus() == 4)) + { + spriteBatch.Draw(ProgressionBar, new Rectangle(i * (input.getSpacingTile()) + input.getTileSize() - input.getTileSize() / 3, j * (input.getSpacingTile()), input.getTileSize() / 3, input.getTileSize()), Color.White); + spriteBatch.Draw(ProgressionBarStatus, new Rectangle(i * (input.getSpacingTile()) + input.getTileSize() - input.getTileSize() / 4, j * (input.getSpacingTile()) + input.getTileSize() / 3, input.getTileSize() / 4, tractorUnit.getFarm().getCrop(i, j).getCropTimerBar((input.getTileSize())) + 1), Color.White); + } + if (tractorUnit.getFarm().getCrop(i, j).getStatus() != 0 && tractorUnit.getFarm().getCrop(i, j).getStatus() != 1) + { + spriteBatch.Draw(Crops[tractorUnit.getFarm().getCrop(i, j).getCropType()], new Rectangle(i * (input.getSpacingTile()) + input.getTileSize() - input.getTileSize() / 3, j * (input.getSpacingTile()), input.getTileSize() / 3, input.getTileSize() / 3), Color.White); + } + + } + } + } } } diff --git a/Game1/Game1.csproj b/Game1/Game1.csproj index 2416809..7fa6300 100644 --- a/Game1/Game1.csproj +++ b/Game1/Game1.csproj @@ -48,6 +48,7 @@ + @@ -55,6 +56,7 @@ + @@ -69,6 +71,8 @@ + + diff --git a/Game1/Sources/Crops/Crops.cs b/Game1/Sources/Crops/Crops.cs index a9bb2f7..6f5aa89 100644 --- a/Game1/Sources/Crops/Crops.cs +++ b/Game1/Sources/Crops/Crops.cs @@ -8,20 +8,17 @@ using Microsoft.Xna.Framework.Graphics; class Crops { - public int x; - public int y; - public int Status; - private int cropType; - private int Timer; - private Random r; + private int Status; + private int originalStatus; + private int cropType = 0; + private int Timer = 1; + private int fullTimer; + private bool housePos = false; public void updateCrop() { - if (Status != 0) - { Timer--; - } } public int getCropTimer() @@ -29,6 +26,40 @@ class Crops return Timer; } + public int getCropTimerBar(int tileSize) + { + + int x = (int)(( 1 - ((float)Timer / fullTimer)) * (tileSize - tileSize / 3)); + return x; + } + + + + // Changes the time required for the crops to be harvestable + public void setCropTimer() + { + if (cropType == 0) // Carrots + { + Timer = 300; + fullTimer = Timer; + } + else if (cropType == 1) // Wheat + { + Timer = 600; + fullTimer = Timer; + } + else if (cropType == 2) // Berries + { + Timer = 1200; + fullTimer = Timer; + } + else // Fruit Trees + { + Timer = 2400; + fullTimer = Timer; + } + } + public int getCostOnMovement() { if (Status == 1) //grass @@ -41,23 +72,93 @@ class Crops } else if (Status == 3) //crops { - return 15; + if (cropType == 0) + { + return 15; //Carrots + } + else if (cropType == 1) + { + return 30; //Wheat + } + else if (cropType == 2) + { + return 40; //Berries + } + else + { + return 50; //Fruit Trees + } } - else + else //Harvestable Crops { - return 30; + if (cropType == 0) + { + return 30; //Carrots + } + else if (cropType == 1) + { + return 40; //Wheat + } + else if (cropType == 2) + { + return 50; //Berries + } + else + { + return 100; //Fruit Trees + } } } - public void setPosition(int newx, int newy) - { - x = newx; - y = newy; - } - public void setCropType(int Type) { - + cropType = Type; + } + + public int getStatus() + { + if (Status != 4) + { + return Status; + } + else + { + return Status; // + cropType; When unique crop textures have been added + } + } + + public int getCropType() + { + return cropType; + } + + public void setStatus(int newStatus) + { + Status = newStatus; + } + + public void setOriginalStatus() + { + originalStatus = Status; + } + + + public void setHousePos(bool state) + { + housePos = state; + if (state) + { + Status = 1; + } + else + { + Status = originalStatus; + } + } + + public bool getHousePos() + { + return housePos; } } diff --git a/Game1/Sources/Crops/Farm.cs b/Game1/Sources/Crops/Farm.cs index b84c36d..a7b5172 100644 --- a/Game1/Sources/Crops/Farm.cs +++ b/Game1/Sources/Crops/Farm.cs @@ -30,21 +30,25 @@ class Farm x = r.Next(1, 3); } crops[i, j] = new Crops(); - crops[i, j].Status = x; + crops[i, j].setStatus(x); + crops[i, j].setOriginalStatus(); + crops[i, j].setCropType(x = r.Next(0, 4)); } } } public void updateFarm(Vector2 Size) { - for (int i = 0; i > Size.X; i++) + for (int i = 0; i < Size.X; i++) { - for (int j = 0; j > Size.Y; j++) + for (int j = 0; j < Size.Y; j++) { - crops[i, j].updateCrop(); + if (crops[i, j].getStatus() == 4 && crops[i, j].getCropTimer() != 1) + { + crops[i, j].updateCrop(); + } } } - } //Changes the properties of the tile when the tractor reaches this tile. @@ -52,21 +56,22 @@ class Farm { int x = (int)xfloat / Spacing; int y = (int)yfloat / Spacing; - if (crops[x, y].Status == 4) + if (crops[x, y].getStatus() >= 4) { - crops[x, y].Status = 2; + crops[x, y].setStatus(2); } - else if(crops[x, y].Status == 0) + else if(crops[x, y].getStatus() == 0) { //do nothing } - else if (crops[x, y].Status == 2) + else if (crops[x, y].getStatus() == 2) { - crops[x, y].Status = 3; + crops[x, y].setStatus(3); } - else if (crops[x, y].Status == 3) + else if (crops[x, y].getStatus() == 3) { - crops[x, y].Status = 4; + crops[x, y].setStatus(4); + crops[x, y].setCropTimer(); } } @@ -87,10 +92,15 @@ class Farm { for (int j = 0; j < (int)Size.Y; j++) { - crops[i, j].x = (tileSize + Spacing) * i; - crops[i, j].y = (tileSize + Spacing) * j; + //crops[i, j].x = (tileSize + Spacing) * i; + //crops[i, j].y = (tileSize + Spacing) * j; } } } - + + public void setNewHousePos(Vector2 pos, bool newState) + { + crops[(int)pos.X, (int)pos.Y].setHousePos(newState); + } + } diff --git a/Game1/Sources/Objects/House.cs b/Game1/Sources/Objects/House.cs index 02560d3..ea2cdf6 100644 --- a/Game1/Sources/Objects/House.cs +++ b/Game1/Sources/Objects/House.cs @@ -43,6 +43,12 @@ class House return housePos; } + public void setRectangle(int x, int y, int tileSize, int Spacing) + { + pos = new Vector2(x, y); + housePos = new Rectangle(x * (tileSize + Spacing), y * (tileSize + Spacing), tileSize, tileSize); + } + public Vector2 getVector() { return new Vector2(housePos.X, housePos.Y); diff --git a/Game1/Sources/Objects/Inventory.cs b/Game1/Sources/Objects/Inventory.cs new file mode 100644 index 0000000..6ac641f --- /dev/null +++ b/Game1/Sources/Objects/Inventory.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Game1.Sources.Objects +{ + class Inventory + { + } +} diff --git a/Game1/Sources/Objects/Tractor.cs b/Game1/Sources/Objects/Tractor.cs index 97a6813..9626035 100644 --- a/Game1/Sources/Objects/Tractor.cs +++ b/Game1/Sources/Objects/Tractor.cs @@ -77,13 +77,10 @@ class Tractor public void updatePosition(Vector2 Size, int Status) /// updates the position { - farm.updateSize(Size, sizeTile, Spacing); + //farm.updateSize(Size, sizeTile, Spacing); for (int i = 0; i < Speed; i++) //Where all the choices the tractor does comes from { - smartTractor.updateMap(Position, housePos, farm.getCrops(), Size, sizeTile, Spacing, scoreSystem.getScore(), Rotation); - updateDirection(Size, Position); - } @@ -93,22 +90,23 @@ class Tractor { if (path.getCount() == 0) { - if (housePos != Position) + if (Position.X / (sizeTile + Spacing) > Size.X) { - //Returns to the farm - int x = (int)Position.X / (sizeTile + Spacing); - int y = (int)Position.Y / (sizeTile + Spacing); - currentTask = scoreSystem.MessageAndScore(farm.getCrop(x, y).Status, 0); - farm.setCropStatus(x, y, Spacing); - path = smartTractor.returnChoice(0); + Position.X = (Size.X - 1) * (sizeTile + Spacing); } - else + else if (Position.Y / (sizeTile + Spacing) > Size.Y) { - //Sets a random Target - int xTarget = (int)TargetPosition.X / (sizeTile + Spacing); - int yTarget = (int)TargetPosition.Y / (sizeTile + Spacing); - currentTask = scoreSystem.MessageAndScore(farm.getCrop(xTarget, yTarget).Status, 1); - path = smartTractor.returnChoice(1); + Position.Y = (Size.Y - 1) * (sizeTile + Spacing); + } + + smartTractor.updateMap(Position, housePos, farm.getCrops(), Size, sizeTile, Spacing, scoreSystem.getScore(), Rotation); + path = smartTractor.returnChoice(); + + + // Changes the status of a tile when the tractor reaches its destination + if (path.getFinalDest() == null && farm.getCrop((int)Position.X / (sizeTile + Spacing), (int)Position.Y / (sizeTile + Spacing)).getCropTimer() == 1) + { + farm.setCropStatus(Position.X / (sizeTile + Spacing), Position.Y / (sizeTile + Spacing), Spacing); } TargetPosition = path.Reduce().getCords() * (sizeTile + Spacing); @@ -237,6 +235,14 @@ class Tractor } + public void updateCrops() + { + for (int i = 0; i < Speed; i++) + { + farm.updateFarm(Size); + } + } + public Vector2 getPos() { return Position; @@ -306,4 +312,9 @@ class Tractor { return path; } + + public void setNewHousePos(Vector2 pos, bool newState) + { + farm.setNewHousePos(pos, newState); + } } diff --git a/Game1/Sources/Pathing/A-Star/Astar.cs b/Game1/Sources/Pathing/A-Star/Astar.cs index 9ab7ae1..bdb83d4 100644 --- a/Game1/Sources/Pathing/A-Star/Astar.cs +++ b/Game1/Sources/Pathing/A-Star/Astar.cs @@ -56,7 +56,7 @@ class Astar } // return if not an obstacle return adjacentNodes.Where( - item => crops[(int)item.getCords().X, (int)item.getCords().Y].Status != 0).ToList(); + item => (crops[(int)item.getCords().X, (int)item.getCords().Y].getStatus()) != 0).ToList(); } // Heuristic function, Manhattan method. diff --git a/Game1/Sources/Smart/AI.cs b/Game1/Sources/Smart/AI.cs new file mode 100644 index 0000000..1d9d0c8 --- /dev/null +++ b/Game1/Sources/Smart/AI.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; + + +class AI +{ + + private Vector2 tractorPos; + private Vector2 housePos; + private Crops[,] crops; + private Vector2 Size; + private Vector2 targetPos; + private int Rotation; + + + + + private Random r = new Random(); + + + + + + public void update(Crops[,] newCrops, Vector2 newSize, Vector2 newTractorPos, Vector2 newHousePos, Vector2 newtargetPos, int rotation) + { + tractorPos = new Vector2((int)newTractorPos.X, (int)newTractorPos.Y); + housePos = new Vector2((int)newHousePos.X, (int)newHousePos.Y); + targetPos = newtargetPos; + crops = newCrops; + Size = newSize; + Rotation = rotation; + } + + + public Vector2 newTarget() + { + return new Vector2(r.Next(0, (int)Size.X), r.Next(0, (int)Size.Y)); + } +} diff --git a/Game1/Sources/Smart/SmartTractor.cs b/Game1/Sources/Smart/SmartTractor.cs index fa7112c..a5c5284 100644 --- a/Game1/Sources/Smart/SmartTractor.cs +++ b/Game1/Sources/Smart/SmartTractor.cs @@ -9,30 +9,31 @@ class SmartTractor private Vector2 tractorPos; private Vector2 Size; private Vector2 Target; - private Path path; + private int tileSize; private int Score; private int Spacing; - private Random r = new Random(); private Astar astar = new Astar(); private int Rotation; + private AI ai = new AI(); //What to do next - public Path returnChoice(int task) + public Path returnChoice() { - if (task == 0) - { - //To the house - getTargetPosition((int)housePos.X / (tileSize + Spacing), (int)housePos.Y / (tileSize + Spacing)); - } - else - { - //To the fields - getTargetPosition(r.Next(0, (int)Size.X), r.Next(0, (int)Size.Y)); - } + ai.update(crops, Size, tractorPos / (tileSize + Spacing), housePos / (tileSize + Spacing), Target / (tileSize + Spacing), Rotation); + + + + + getTargetPosition(ai.newTarget()); + + + + + astar.update(crops, Size, tractorPos / (tileSize + Spacing), housePos / (tileSize + Spacing), Target/(tileSize+Spacing), Rotation); - //astar.FindPath(); + return astar.FindPath(); } @@ -55,66 +56,8 @@ class SmartTractor } - private void getTargetPosition(int x, int y) + private void getTargetPosition(Vector2 newTarget) { - Target = new Vector2(x, y) * (tileSize + Spacing); + Target = newTarget * (tileSize + Spacing); } - - - - - - - /* - //Only for testing without obstacles - private void createPath() - { - path = new Path(); - Vector2 targetPos = Target / (tileSize + Spacing); - Vector2 currentPath = tractorPos / tileSize; - currentPath.X = (float)Math.Round(currentPath.X); - currentPath.Y = (float)Math.Round(currentPath.Y); - do - { - if (currentPath.X == targetPos.X) - { - //found X pos - if (currentPath.Y == targetPos.Y) - { - //found y pos - } - else if (currentPath.Y < targetPos.Y) - { - currentPath = new Vector2(currentPath.X, currentPath.Y + 1); - path.setNode(currentPath, crops); - } - else if (currentPath.Y > targetPos.Y) - { - currentPath = new Vector2(currentPath.X, currentPath.Y - 1); - path.setNode(currentPath, crops); - } - } - else if (currentPath.X < targetPos.X) - { - currentPath = new Vector2(currentPath.X + 1, currentPath.Y); - path.setNode(currentPath, crops); - } - else if (currentPath.X > targetPos.X) - { - currentPath = new Vector2(currentPath.X - 1, currentPath.Y); - path.setNode(currentPath, crops); - } - } while (currentPath != targetPos); - - - } - - public void setNode(Vector2 newNode, Crops[,] Crop) - { - - nodes[Count] = new Nodes(Crop[(int)newNode.X, (int)newNode.Y].getCostOnMovement(), newNode); - Count++; - } - - */ } diff --git a/route-planning.md b/route-planning.md index 672f19a..f2f537e 100644 --- a/route-planning.md +++ b/route-planning.md @@ -2,7 +2,7 @@ A* has been implemented. As of now, there are 4 types of fields wtih different costs: Grass - 1 - Dirt - 7 + Dirt - 8 Crops - 15 4th type are obstacles (mountains) which are unpassable.