From dd81c2ff2e6ea0c616ec304d881a96184d1f3d4b Mon Sep 17 00:00:00 2001 From: = <=> Date: Fri, 1 May 2026 18:34:48 +0200 Subject: [PATCH] Removed popup from the game, added simple options and menu. Added spawn to tiles and reworked content spawning --- Assets/Objects/Tiles.glb | Bin 974572 -> 1085776 bytes Scenes/Game.tscn | 122 ++++++++++++------------------- Scenes/Options.tscn | 39 ++++++++++ Scripts/Camera3d.cs | 5 ++ Scripts/Helpers/LightHandler.cs | 8 +- Scripts/Helpers/UIHandler.cs | 52 ++++++++++++- Scripts/Information.cs | 29 -------- Scripts/Information.cs.uid | 1 - Scripts/WorldGeneration/Layer.cs | 14 +++- Scripts/WorldGeneration/Tile.cs | 1 + Scripts/WorldGeneration/WFC.cs | 7 +- Scripts/WorldGeneration/World.cs | 11 ++- project.godot | 5 ++ 13 files changed, 181 insertions(+), 113 deletions(-) create mode 100644 Scenes/Options.tscn delete mode 100644 Scripts/Information.cs delete mode 100644 Scripts/Information.cs.uid diff --git a/Assets/Objects/Tiles.glb b/Assets/Objects/Tiles.glb index 5fb3259363b8ee0ca3ab4a0530aa0ba3ed1de7c3..7e7ce1d8f42d26fcd9c480870fcd896a31d2324b 100644 GIT binary patch delta 83461 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 p&oT| zy6rUB=W41PF_r7C)W;VNwvzGrVPq$o3g2eCp<(F6%IpR<#ffo2SdTS$9Q#~ls5(0% zTpYC981aon4$r#*=1}dq-u*yGT+fdc-$xV;?KY11ej&G==3?v!{q=tb-0a0LW?@r1 zqlADsJ=SnvnKKajg$mF7=EgoaF)j$}LBkUF04KmAY>JKS^rIrm=)0g_$a}*EcbhK%b2p4B(gp0sFcpQ5|w~Z0sM-|`r7i|rc0S2y*!N@)V7{&t zGz<+q?P*|BoEU5Dio+W0gA-#7`25^UEE?2%gpqXy(=I}{OG(#8V;0QgM|3V`+=f2? z9FKbXo_?6iz?zzeqK%UPOW2Zo*QB%>%+hZi|ma0?Sq?(T3^wQ zhKVLlj7{w{*c0c9)3XFqZ1k%rL4%F1T*$APaHwWJeT_@U_nOax7RC4q0nT}FsLnBM zjWLg8)30Tnsa1tf(0g)AI}OvZQP^n@zejH_>!pVVTXsfv8tfCYmpQLN@6hwbu^KK8 z7xY8JeivaQoD7>{BRkEbS~(p%;F7*NwC$NGPnex2r;pj<5$r6!nOQX=3+X|yuK0jK zi(Fs$Z+0p7Dz}{o8&%xX*en$kYJSSYtRzOr$4-NNMg+Q?k#zY8l2e92WzTE!%5?Z0srY?16|GnuS*$q;16oa^xj%PdpHn5BT50Gzdu4V-1eYzvhLpqGlPtavy^%tie7%HE{lqMGp?RoPYN+%)WPc9Vf#Hu#ue} zkK@>%iG!@~J}iFEZ~zvyzEagMyVnx4SLiS&wBESmn~Ho3!2xLpG!-pqHATakwMIvy zI`jf%ZP(d>HG>ya*AMMnXl8rnvak=c6WJNzWZ{q~40?yocPge~Q#%dzj4z0NugJ~_ zSB*8;s9^1!j_q*avHi&--;YmU8xxjZH^4ccuS@%=*XUo<~O z*vQp+u>NrGSF_pp5X;WUPJ?|;j&?c8vRJe1T(^M}Cl&<#KW;k_Hp0oUKG6t#>@=;R z<*p9QcI|C>##k$P88JSQX2Gv6tKRy-7CZWHV9eEX%XE*h+L{x-hATbm`I{&~Q+Ro> z^KG$$G3Mh(ZaY)#gY`Huie<*gCku_c3p~tbu-F(^Q9?3oWT(LikZBT6?1S|`JlT)L zu@{y(T&dEV&(1GOV#H2y3u^f+vgHODw`hIDmI| z)GosnYo%smv{q}p%~u~~{n27(Z8#ZXm4F*ptMz`aFNU@Kd}o>Sc3^tlPJ?~YhK4X_ z)s89sdTzE18~|@5j@y}Hqr(#;j8hpV>VLF^UJ#ptlGm{3IyS zzcOnCEX6$RmCba2<71o~L#%<(F6&c=f8aLm8v5wl2i%XI!hOPyNbS3ZB_r~w?Q(9a z{y_K5zEHC>#hTwt<2`pcOl@hKEXD?yw!=QSAcjTQ2#c@=C&s3B8tmC^@?ytAxC^FB zQ|cilAXG?6QqbKX*a(>cP& zfj#4VSVA%^!lnTy2J5R&P1PpCe^nfelVJ^xwbP(nEJ;P!2#FlnwApq+EAk(+ip_j$ ze7MlhXu5KqmI=;=HU~1xQN5YI`%E?ykJo?|_P)=Vv!BaH!%-@n6DPytICe8bRofZiBCru2$EJ;IHgjmOLRKY>pYi8n zs$HEl#>~`@StsfRTO%beKc5Th6USNH8(9aW*K5Oi-_1-N3@oxUs5`*afXgP z?R>uLS$x3i6dxS1)l+COa6N#7aWbs2D+p`s3c?zOjc~w(suvs$;p$b7YdY(9-pKLj zk+0(cvp$VxR=+#E*|0o==_dJMpvJ4=7SE*X;+Y)2K$sK!+utT1MCXIn!su)v^B8AZatW3EOwsI#(r~~ zTCB_R7MT_L3Omm1|mD7EDwh`dxW(2JN;^rZfArw*r)ZD zP}3*JO`~~Rn0~P-C{DwY6JaBq0Gr~1>@;uYR(EHEOS93?4ZrC4pT_cbVfr|@d$Iu> z^yb_O)pHF@&$J9tr*?jZkErx;A72}hW?pkSow-Jv$5)Kk?M$)8&J)MZfQ}2l73{vY z6P8g?MM(d-ixX@UOV z!DvToq{+~8pSA!RiAX2Kw9{ap2`xjM=SO(P6l*ivNY01F8DS9)exH4nJCB$$ed9J}jqM1X4&zR1wQ7Z$ zcsyoTpfUSB-0$fb8jUsBr@`b9=axcJO#Nt9GD+~yHeuE}rl-Ho*Ns+j^dcO$Dx%=@-M*04Om)~DvBV}_)R zapUpc^*+0^K~quC^UV&d!9MpxLY!HLq=@O)@N*JRG|rN|flaYd=Yj2vlwX(V!@Zaj zC&PL>4fa8ajURgU!xX<^XWFOs0>>h_TXO6Yf8%A96lUEe)68?w|M3qrr7a9eX+AFd z%yAU%8_NOH`ITHR-F6!6lY%veyAaIDdIxD}64MlD+|JZgKKS~q;mojW%!y5LL0E%* z5;QEXYAnJ=xCpGlSh;n0%vN+` zI6gPx=l&2SqtP-lXV2R+^t!J~nZKFF>#@eplQo2=*zJJ^lNBGC6C2@zum&61X>elf ziGAWV?E4;I(~7VrlmX6y^1@xwZ9DvF4&L+CSUj0o6RN|7>h<(`_OD^)*;(HlkKnKV zLxazTo#rld)#h*VSYJNNZP&)Azzo6WxSaa$ChHhSM=Qo2jGJ6I8J~~aY1(a z4$v2Tuc-vj|ASMZ*nQFNxSr2!!vc&?b6nPwSG)9br^}iNqBzawW@8)|px3AU-H8r6 zP4_5RcAv7?{b{pP$DVdRp#K>#ZG*Sge`lkejo|AO2jgV82&~5%JZ@LePaihXVHa@l z^I1o+!*I7kY<@krdzNwTRZ9~Z39Xaef~?Oi{QP|8dzj0-}fixWDUJyeT&NO%$)eMiu^Dq%B%L&8!36adrjSX|NB&BAgf(WT#=Cp}t#@%d4f|b$jS8OfGSuVI zZppNc9A~qckypy=A>qtwI3~oZ&pk6w&z)n=4LI)T2uDt13DxX0IpGNlo4lKt>xSeo z6Fk|krq~DvVAFxmH*0CrzBDTpbU71@;(Y81!g{QMah7O=lVMX_5H`a4MgylC(0Xqb zDx1$ZeD9)hCG$-4iZ9%X_swNxQ@81@PPK8Dfv2LhfrHN&cv>pbBo+08+vRe=BN+;I z*=pFCVvUWdg=0U>EMpeyam>6q$mRU4AefQ(UXh&$C$lrf8e9@1x*D5g>4Ri@qeb(nq&hKt(%&w6Uehb1w}5)y31UMdoE4kjhA5e~*0 zWTZWVb>PAaJjbqfxR))Qs^f7Si#6B> zC*BCB{8^#Dh#ib&R&sB|jbl@6ln@-J!O8GAj>Vc)(~9cd;DLs#;hdvM6f_lN3Gc0! z-Sx)wIMv3;3%BC8X*R~#x8sz<8$POsf$;E&qydR~JdR`cbPlmD!%XGsBYQMEpPw4G zN2^$KhL$1YM15CFXgZAwNlbuEv5}n~kK@>%$&wcIUC-hZW6}GRF^=tUS{(+@2KUdO zS?~CTkEypg#QFC+m$T5Y?fUJfwaqmP_B!6c<#s7Yq+zGA^Lbeg9(o<|RF7=G#9($t zScHvm5nJ=`G%~c!5;xsuVIMmU_KA=EKL2OoWY`ENz?yb5o@mv3cnwDp&nMd5a?=y@(@?aUp_7iS~& z*o+O06VP8Y2(B?|!SBJaFK}AjM>jP)5jMiX6P7Tm`M8#5HJ6V&&M3jhPJ?|=E~Y;o z7GTDnoT{xE$t-MyL`gK*2*=tLWT$!Zw5K*|C7Y+Ug->8eUzq(Y(ON&1EtftTe!Ht0 zG#FK%`BwWO`k{%wKT~@IYd(iuJ_gof4UWBjJH%R0Hmo$rs`FN}D3E#x52Yl;FeS_67%Ikt1KQ)8}zXzZEc{2(35n_@*K)q`71~f~KM} z{g@ML@OWeIv}U1Guqv9RgKg}Q1+e^97n(szm%N(96bFMSQPTi!KHdY(L;DXwua`}6 zwi;9r(m;D1+B3Ukb_MlYyXM3n zYH$Lq!Nu7n!?B4P234;q2lrv^U92BT72^(t>C^nF{M^ssB7?xccf)x=@FMEA)6@y( z&C5HPa}k_q+Qs(LLaddCGQ=2z=WAFK7t0cYv8d3gYmSMha>ew&6KvtcxF9v{yBSLqbqb!9M|?I(R44@SNjY-AZ1~? z4ePN_eC&_lQvE}$**-MpzmsKkEW$=uQ$ug7mt8eaimRU^^}A_z)c%;aIFmNbqYxYX9-ZA?ODQfh%k9VZT)r7l1{$AUuwf;ezZm zna8Epj=)03zTU(f)CT&2pH4F0`Lc4x=h_S0L2z{%22(M;Q~5b6LEp!}bysRXMM*W- z2*=KX>%NsRZJQ+nuVEiM&37O6TSeuJW`&O!7Y2;fcXVMEHo^sA4K4_e+ZBX042$^P zZyb%`+id)bd0O}FHg!f%Y- z5@Km*$LX&MKhf=iu_n>zmx3nst#7P=1;+qyxE&W2iap~rEJ1{ga4=5xYj8p=)>Nn% z>4=53MDJk%TDfs9=lFpAda?UHy19_LAHag+9QfNo<1EP=S3E=A|G_t3XJ{D3MmYEt zG?PTa56v8eR((8|(Lz4m7Yd zd)?A}JPUr(g_R9*ww_eg@5NAF{|GmWRe%M@;<5S7BqF3yc1|*yz>^E2D@AHpgJTzi zN5Rzv^zP8*jx{(oLBrxi_fUc)MuGE<;?U)Ewl1@ub|4#t`8|5b6FhV@v(?1DFx4zj|9iZMl7 zPcg9(4#pas0DJPUOPMV$J=X$PG7I~}>)H1`z#_X~oD3V`Sgfh>sjhw;Ca9h)V9pmE z2RYYAkB)hnFG8;cKf`blzT~F4GZ{5LvE)T##*Q`$!{t@C6JtU2Q-gyGoq+56THEy{ z5qnIm!LeA=XhLfJ=);U=>-F$xzJ!9BO?QAun!(jlIzC~{MZ9Kk=r|5TLynD0cG=P zZN8q>24$IP-gYo&wO20Z{QNuhN^qNfSNJipxMjTA_fi^m8atm^tZImrW=(p(RvWi# zc1E+11{*bDCG@*2JEN;)R2q(h@*=bo2n?ToMn`}o6e zKfKIdSPOttw&V+9jWj!voe@rk3&K8FvlZ48H^aIjyt*4U2-YUUx*~-Kl&rq(a%yb! z4s&$Ao!W12#E*Z;vC2Ic&WNTo8{@V!TG$qTA9liNQ=aEAu@8>L8tlWqR}r7Aug`m< z?~MoMdsraAzFL_+`xan~zB70FjC%f%&&*QSkZP+e&T=RJ7aR+$E3dp!4e?ePit$>W{JTaOPOB6$lNM+71h0wmmXHj)9D zfhZ&=@gymLDM)6LmlPnyfyGG?QkWDY6@V2;SyGPpkkY`?qy+IMrAR?wL6VOYB4vmd z(2L|DHv$y@9>S5HgaCBIAJLNEjJQCXiXcS!6nyK_bXh;8Zf1Od?YV3x$_Z zGJ=dD)5t{NL^7PrB;(0w;Aj#~=8y$s8E_d{L>7`IWCL&mSxeTFO=Jyl4OvN+lhtHC za6Xw$7L#>k1#ktKOE!|FWFBxHSw;RK+lU+JCOb$Ji6;Aj`^lb&t;Kmy7D-GJNw$#f zWH&K@2H8yZk)32Ka4WIMVRDR|2A(D-$VqaBTmxPsm&p}!om>Q7B(dZyIZuuNkC21p zIJrd50nd>`|91*MlKIml=I@s0Lw(A z^5%0ks>peBz25l-hybH#zhIUlYHSDmX3tj*Qr{^06z{y=}OG1r7^ z$~6Ku;_7pMat*j@z-nCOh|ASd=VTqZ7FErfy23A zE`%Gw4FnG4`f-D}P|gK(as4ZDqq(8n0N?kK9-8J@7sEntRKA z;2r}Xa}T(u+$Zi0_cS7CFUiSdUgb0MGHe<6bbLlW4KNL#l26Th@&Zuc2`};K`BcDE zya%6&r#uhj`LujCJ|~|an4izX=i>A6C4eRPVtjGFBwrL*lrP8^;EV7%fI0Xqd~V*0 zF9a;aXXU;5ynJ@vJ0kNw;>jxTmG~Nb1=y0u? z$Cu`7@xFXHU^%`DUx%;9HwHH58}jw}Mto~vYrX~Fl5fK|1vcfI@PG5o_`1Nl{2zP+ zz7_8e^yh2yZTY|WKl!!{(46nUcjkKnd-C1*E_@Gu5O5G5zz^UD^ZkMS`QCglz8~KS z*okk)cjX82eSm%V_Ix1Uo$mR7^Lv4N z`BRL)#9!ra0dMjD@z?pA{4?M){xScMf6Ctn-sf-gclZbV72p;A0)LHv#NP$phe*%8u-}CSIkGw3rgG~@PK@>cI9>N#?Gyjc$1$@On=il)PRI?+E#wfg3Au!A%l=bNC`|SC_-u>yO2pp9dY>p z$=#rs;3E`7}!{7C^Qv132lIFghoPFp@q-{*hFYA^bmRr1AqgBenMX%Kwv;71Pj9i zmoNl4L>MRx5{3%Bgh33@UFahO34y>sp_>pQ^cQ*pdkTYvk-}(U0&s#bRv06U7iIxx z3Dbn>LWB?w3>PK}lZC0mDBvhzgb*go5GDa93B!e%!Z;xm7%EH=<_ZghWx!>^VquZ6 zMA!)2D6ALO3EmroRq(P(SRt$w)(G=~^MyIWLSe129JpMVEo>5&3iE*Tgw+xA4w39^ zpI`~QVKamnVV4jIj1;yA+l4)X2{eVx!hT_=uobvf_*XbA923p}&j=@lq1kS~v6k=*o0V<*>N+K0M z3sS_QOmg0ce-D#9ET@=P%pm53Ev=YI%rE8w<`O-{f?`%NJutnPTP!Aei)Ddj#ZqDk zv9zcIp~+ozh<;*4U`4UKSWfg2ivx>`MZ}V#CRPAe5Q~aVv5e>i^b#wHRmB=&U0_}D z53!b5NAwqKr3N$>n}|)thQNjqy^p|W{I^(JtS0^qTLZDV*h=gO>?pPq+lU>+KEOU= z53!fnSL_DtCUzFPh~353z}8|5v8~us>;&v2HWPb`?ZuYBmSR`2pEy7q3LGj95(kSx zVi+(?3>8O;qeTW}VzB5EM~H!t@81Q;Ur7srUh#DTzp;&5@CI8mGqoGylo zQ^cv_0^kC1o;Y7zB+drT7H5jH#5v+5;3RRpI9Z%4&H&C3$BGNZY2pOn1TjKfA}$x# z0oRGE#g*b3aXWCkxK;c|WZT3|@Ulr5LPuwpa5>22fMvF1xVR0{Tued`zF76iH zK(}~6JSm^PsNYo zYv60~zW7aiCDwZkFOS9dB9VBBN(44pQlu18CSWEhy_7-9ETsjel~PHmB~M8NiV`PD zQaULmFs0-nWt3D&016SOD)P-`U#X_#Bh`#3U5PIo(d;!BRh9KdHCWN9r$i26mP@ zNL{4?QZHaHshu=P>LGOmc9i-`L!=;S1aO4pl7>s6(q!OdX@WFSnj(z_j+I7BW2A9X z2rxt%CNXKeG)iJ+07Ioo(nu*77%YWJQ>E$BT;N=3wiF@FkyZd#NXy`|b(ORjxHzJ< zFQ2{pN@<=nLs|*jB594ZPTB(8B5jg3OaDkQz!=Gp+>$9p0i&dC(spU5v;nw5S}Sdo zqNPY+q_kSHq^;6=;Cg9?^slr>Is`lo(naaA zbQ5?}`cJwp-H@IDpF|XO@P*k^>6UawdJ5Y;>4o%K`ULzWy_eoeA0$bB2b&;svM7I( zIM_Z*UnL^H0ltx5N^d1z{sR0WJ(pzpqx1^+O7f7YoI>^lddg|!v~oH*Cord+UCtrr zma_n}$Qk8Ka#lH&oGIdjgBMw9Ih&k8P7RwP=aSRQDS;{F%yM42fLt6{TrMIPl8ed} zfEDDjav8b2ToPDP_L57;rR9Raf^t5&uv|{|271eRWFNVhoFAB9E+tozHMttFnp|1- zldH-NfDPojaviz8{D)kJ0jkS2<=V0i)Ma1UDgP+%U9*|!1MAsIaaWaoGQdswuKZGd416sAC%=&&$hUyE`phyZ;zQD2Wi~LdkCZ|+H<(n)j@8whqQ9c1b z$+F_9WKgmLvnyGYOiEUzAh4j4Pbr|V!b%=^$)n^{aw&P0jKGXaIwiA`U&#T?p`=v` zDcO|t!1PLPrKsYilm(VmN+~6j(uxk$6<6?U4OmTSpfp!nD(!*om9|PdrK8dp*jMSL^i+B)U4dPd&Po@ho6-u{ zN@=0AQFIat${b}9aFQ~PDN~er$}He4WxTRLnW{_xPEaD0CCYMTEpV-}N?EO}Q=))TN~E$? z*{*B>Zc#QW84) zjr|oD*+8x-PcA?#9PdXSlm=2@?bP(+a>_>ai z-n2jM4D3wX)2?&??E~z?Xa^cdd(ck6PP8u_MnmXG;7H2oa2iUd0H@H2bON1B#{tLD zF?19iOM`*IbO?3P@pLqBG#yGO(GfHV7(~P9G&+;c1Yi<#ZWcNtXbZ z(1mmXT};^wc$q<`(phvVoe!K(!|4h-hfW7hr;F%Xx`F-!{D*F$o9R|+0WE4!H;th? zfjjATx{dCj>w)X(8oH52(@0<>T}@58g{}jxqfvA>-A4}t57PtmAU#6Q1JBd5jGm#f z^c3(EJx-6&6Lb%758Xxg)6?`Q@F@M4o}-88Uf^DOl3t=$=ndcvdY%49Z_#JKXY?_B zM4!?Jzz6g$y+iNO%fQR@BE3c*(%Zn>^a6cCZ_=y4tMop7PG8XvlsyN$rSIt{Dy#2d z6I5Q6R01UGSNfTLqpyLl=?nUfa_Sf07y6Ql>PPwp_=b9@s+vko2TZ4?QPZmF)!e|` zY7RBKnoG?J%&KNmGpJeAl)#j#qNY}}sTqM8RjTG>s;8Pl%?Vp(HJ@5gEe0&67FLU> z#Z@1mk6KPGt5#4;152wVR4=uZS^!u;&7&4l%c$N!Z#A!4UM;HT2j*8xsufj-S_N1| z^;0XW)zk*S2I`+`9krfX3s_67uGUchP&FXa)Jm#Tt*h1q)>M7f`f62G2kL5VwUOFb zZ4PX%HdULcE!D2Tu4*T>quNDn4{WctQCq8R)h56u>R+nA+CgmvY^63-JF6|!zkz?N z?bPmSFEs!dp!QY!sRL97WNNS)q`H_o1YU-yf$AW2sM;IYTkWCtQHQAmfdkcUYKYoj z?FsCu4pv8~qtx-h@oJblR-K?m03*~H>U4FM8V(FsC#jRwsp@FpXmzAIMxCZk1Wr_k zt25PcYA7&NoubZB=c!A8OH{u_>SA@7x(T>RU9YZFH>zuZYt)tM3U!q_A2?r~t1eX6 Vs>^}P)!FI>b*Z`lxIkU4{vWicndSfh delta 124 zcmcbx$mz{qYrgcH5H}_U28K8H_!vHDK+FQftU$~L#Oy%K0mPg@%mu{UK+FTg MyxVW*@jWdE084^2qW}N^ diff --git a/Scenes/Game.tscn b/Scenes/Game.tscn index eb33a1b..f33d9ab 100644 --- a/Scenes/Game.tscn +++ b/Scenes/Game.tscn @@ -4,10 +4,9 @@ [ext_resource type="Script" uid="uid://dqrdb3bvws6b6" path="res://Scripts/Helpers/SteamworksHandler.cs" id="2_b2bpf"] [ext_resource type="Script" uid="uid://c7khr6oist3ku" path="res://Scripts/Camera3d.cs" id="3_7lihs"] [ext_resource type="Script" uid="uid://bm7knir4552j5" path="res://Scripts/Helpers/UIHandler.cs" id="4_fgofq"] -[ext_resource type="Texture2D" uid="uid://bmcpkt6mae2qi" path="res://Assets/AlarmSign.png" id="5_b2bpf"] [ext_resource type="Script" uid="uid://bsd6n6b06a4pe" path="res://Scripts/DSL/CodingWindow.cs" id="6_7lihs"] [ext_resource type="Script" uid="uid://k6vlo7ulvtep" path="res://Scripts/Robot/RobotList.cs" id="7_2irst"] -[ext_resource type="Script" uid="uid://c3v2vdj3ghp78" path="res://Scripts/Information.cs" id="7_fgofq"] +[ext_resource type="PackedScene" uid="uid://cpq7ppe8bw2bq" path="res://Scenes/Options.tscn" id="8_71axn"] [ext_resource type="Script" uid="uid://fegfbcnlk8p5" path="res://Scripts/WorldGeneration/Map.cs" id="8_bf53h"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_u44n3"] @@ -55,7 +54,7 @@ environment = SubResource("Environment_sb48q") [node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1558432386] follow_viewport_enabled = true -[node name="UIHandler" type="Control" parent="CanvasLayer" unique_id=1713248285 node_paths=PackedStringArray("codingWindow", "robotList", "information", "mainCam", "map")] +[node name="UIHandler" type="Control" parent="CanvasLayer" unique_id=1713248285 node_paths=PackedStringArray("codingWindow", "robotList", "information", "mainCam", "map", "FPS", "RAM", "options", "uiContent", "menu")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -69,9 +68,14 @@ size_flags_vertical = 3 script = ExtResource("4_fgofq") codingWindow = NodePath("MainUI/Content/CodingWindow") robotList = NodePath("MainUI/Content/RobotList") -information = NodePath("Popup/Information") +information = NodePath("") mainCam = NodePath("../../Camera3D") map = NodePath("MainUI/Content/Map") +FPS = NodePath("MainUI/FooterContainer/HBoxContainer/FPS") +RAM = NodePath("MainUI/FooterContainer/HBoxContainer/RAM") +options = NodePath("MainUI/Content/Options") +uiContent = NodePath("MainUI/Content") +menu = NodePath("MainUI/Content/Menu") [node name="MainUI" type="VBoxContainer" parent="CanvasLayer/UIHandler" unique_id=1437975209] layout_mode = 1 @@ -85,39 +89,6 @@ grow_vertical = 2 layout_mode = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_b2bpf") -[node name="Header" type="HBoxContainer" parent="CanvasLayer/UIHandler/MainUI/HeaderContainer" unique_id=1048237062] -layout_mode = 2 -theme_override_constants/separation = 200 -alignment = 1 - -[node name="Robotcount" type="RichTextLabel" parent="CanvasLayer/UIHandler/MainUI/HeaderContainer/Header" unique_id=1955918671] -layout_mode = 2 -text = "Roboter: 0/0" -fit_content = true -autowrap_mode = 0 - -[node name="RobotWarning" type="TextureRect" parent="CanvasLayer/UIHandler/MainUI/HeaderContainer/Header" unique_id=759915558] -layout_mode = 2 -texture = ExtResource("5_b2bpf") -expand_mode = 2 - -[node name="DayCount" type="RichTextLabel" parent="CanvasLayer/UIHandler/MainUI/HeaderContainer/Header" unique_id=1228850272] -layout_mode = 2 -text = "Tag 1" -fit_content = true -autowrap_mode = 0 - -[node name="Time" type="RichTextLabel" parent="CanvasLayer/UIHandler/MainUI/HeaderContainer/Header" unique_id=1457538761] -layout_mode = 2 -text = "19:20" -fit_content = true -autowrap_mode = 0 - -[node name="LightColor" type="ColorPickerButton" parent="CanvasLayer/UIHandler/MainUI/HeaderContainer/Header" unique_id=395026790] -layout_mode = 2 -theme_override_colors/font_color = Color(1, 1, 1, 1) -text = "Choose Color..." - [node name="Content" type="Control" parent="CanvasLayer/UIHandler/MainUI" unique_id=45665557] layout_mode = 2 size_flags_vertical = 3 @@ -303,6 +274,40 @@ layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 +[node name="Menu" type="PanelContainer" parent="CanvasLayer/UIHandler/MainUI/Content" unique_id=370952082] +visible = false +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -20.0 +offset_top = -20.0 +offset_right = 20.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/UIHandler/MainUI/Content/Menu" unique_id=1924672355] +layout_mode = 2 + +[node name="Button" type="Button" parent="CanvasLayer/UIHandler/MainUI/Content/Menu/VBoxContainer" unique_id=1938871792] +layout_mode = 2 +text = "Continue" + +[node name="Button2" type="Button" parent="CanvasLayer/UIHandler/MainUI/Content/Menu/VBoxContainer" unique_id=1298589221] +layout_mode = 2 +text = "Options" + +[node name="Button3" type="Button" parent="CanvasLayer/UIHandler/MainUI/Content/Menu/VBoxContainer" unique_id=2028306785] +layout_mode = 2 +text = "Exit" + +[node name="Options" parent="CanvasLayer/UIHandler/MainUI/Content" unique_id=230632848 instance=ExtResource("8_71axn")] +visible = false +layout_mode = 1 + [node name="FooterContainer" type="PanelContainer" parent="CanvasLayer/UIHandler/MainUI" unique_id=1495029884] layout_mode = 2 @@ -319,51 +324,18 @@ text = "Robots (R)" layout_mode = 2 text = "Options (ESC)" -[node name="Popup" type="Control" parent="CanvasLayer/UIHandler" unique_id=1989677138] -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -19.0 -offset_top = -21.0 -offset_right = 21.0 -offset_bottom = 19.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="Information" type="PanelContainer" parent="CanvasLayer/UIHandler/Popup" unique_id=1457118246 node_paths=PackedStringArray("title", "content")] -visible = false -layout_mode = 0 -offset_right = 40.0 -offset_bottom = 40.0 -script = ExtResource("7_fgofq") -title = NodePath("VBoxContainer/Title") -content = NodePath("VBoxContainer/Content") - -[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/UIHandler/Popup/Information" unique_id=302174818] +[node name="FPS" type="RichTextLabel" parent="CanvasLayer/UIHandler/MainUI/FooterContainer/HBoxContainer" unique_id=2029942501] layout_mode = 2 - -[node name="Title" type="RichTextLabel" parent="CanvasLayer/UIHandler/Popup/Information/VBoxContainer" unique_id=680933734] -layout_mode = 2 -text = "Test" fit_content = true autowrap_mode = 0 -horizontal_alignment = 1 -[node name="Content" type="RichTextLabel" parent="CanvasLayer/UIHandler/Popup/Information/VBoxContainer" unique_id=1438295895] +[node name="RAM" type="RichTextLabel" parent="CanvasLayer/UIHandler/MainUI/FooterContainer/HBoxContainer" unique_id=1663333928] layout_mode = 2 -text = "Test" fit_content = true autowrap_mode = 0 -horizontal_alignment = 1 -[node name="Button" type="Button" parent="CanvasLayer/UIHandler/Popup/Information/VBoxContainer" unique_id=1927576326] -layout_mode = 2 -text = "OK" - -[connection signal="color_changed" from="CanvasLayer/UIHandler/MainUI/HeaderContainer/Header/LightColor" to="CanvasLayer/UIHandler" method="ChangeColor"] [connection signal="button_up" from="CanvasLayer/UIHandler/MainUI/Content/CodingWindow/VBoxContainer/Scripting/EditorWindow/Buttons/Clear" to="CanvasLayer/UIHandler/MainUI/Content/CodingWindow" method="ClearWindow"] [connection signal="button_up" from="CanvasLayer/UIHandler/MainUI/Content/CodingWindow/VBoxContainer/Scripting/EditorWindow/Buttons/Compile" to="CanvasLayer/UIHandler/MainUI/Content/CodingWindow" method="CompileProgram"] -[connection signal="pressed" from="CanvasLayer/UIHandler/Popup/Information/VBoxContainer/Button" to="CanvasLayer/UIHandler/Popup/Information" method="HideInformation"] +[connection signal="pressed" from="CanvasLayer/UIHandler/MainUI/Content/Menu/VBoxContainer/Button" to="CanvasLayer/UIHandler" method="HandleMenu"] +[connection signal="pressed" from="CanvasLayer/UIHandler/MainUI/Content/Menu/VBoxContainer/Button2" to="CanvasLayer/UIHandler" method="ShowOptions"] +[connection signal="pressed" from="CanvasLayer/UIHandler/MainUI/Content/Menu/VBoxContainer/Button3" to="CanvasLayer/UIHandler" method="ExitGame"] diff --git a/Scenes/Options.tscn b/Scenes/Options.tscn new file mode 100644 index 0000000..f14416e --- /dev/null +++ b/Scenes/Options.tscn @@ -0,0 +1,39 @@ +[gd_scene format=3 uid="uid://cpq7ppe8bw2bq"] + +[node name="Options" type="PanelContainer" unique_id=230632848] +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=1149639381] +layout_mode = 2 + +[node name="Title" type="RichTextLabel" parent="VBoxContainer" unique_id=1694731141] +layout_mode = 2 +bbcode_enabled = true +text = "[font_size=32]Options[/font_size]" +fit_content = true +autowrap_mode = 0 +horizontal_alignment = 1 + +[node name="GridContainer" type="GridContainer" parent="VBoxContainer" unique_id=488511819] +layout_mode = 2 +columns = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="VBoxContainer/GridContainer" unique_id=189106367] +layout_mode = 2 +text = "Light color: " +fit_content = true +autowrap_mode = 0 + +[node name="ColorPickerButton" type="ColorPickerButton" parent="VBoxContainer/GridContainer" unique_id=1830638845] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Button" type="Button" parent="VBoxContainer" unique_id=1183264327] +layout_mode = 2 +text = "Close" diff --git a/Scripts/Camera3d.cs b/Scripts/Camera3d.cs index 18dfdbb..2787cae 100644 --- a/Scripts/Camera3d.cs +++ b/Scripts/Camera3d.cs @@ -13,6 +13,11 @@ public partial class Camera3d : Camera3D private Vector2 _mouseDelta; + public override void _Ready() + { + Position = new Vector3(0, 0, tileWidth/2); + } + public override void _Process(double delta) { if (canMove) MoveCamera(delta); diff --git a/Scripts/Helpers/LightHandler.cs b/Scripts/Helpers/LightHandler.cs index a0f6b62..36d1b96 100644 --- a/Scripts/Helpers/LightHandler.cs +++ b/Scripts/Helpers/LightHandler.cs @@ -7,9 +7,15 @@ public class LightHandler public static void RedrawLights(Color color) { + List availableLights = new(); foreach(OmniLight3D light in lights) { - light.LightColor = color; + if (GodotObject.IsInstanceValid(light)) + { + light.LightColor = color; + availableLights.Add(light); + } } + lights = [..availableLights]; } } \ No newline at end of file diff --git a/Scripts/Helpers/UIHandler.cs b/Scripts/Helpers/UIHandler.cs index 33ae60e..ced7ab8 100644 --- a/Scripts/Helpers/UIHandler.cs +++ b/Scripts/Helpers/UIHandler.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Threading.Tasks; using Godot; @@ -6,12 +7,16 @@ public partial class UIHandler : Control { [Export] CodingWindow codingWindow; [Export] RobotList robotList; - [Export] Information information; [Export] Camera3D mainCam; [Export] Map map; + [Export] RichTextLabel FPS; + [Export] RichTextLabel RAM; + [Export] PanelContainer options; + [Export] Control uiContent; + [Export] PanelContainer menu; public override void _Ready() { - GetNode("./MainUI/HeaderContainer/Header/LightColor").Color = GameData.lightColor; + } // Called every frame. 'delta' is the elapsed time since the previous frame. @@ -31,6 +36,31 @@ public partial class UIHandler : Control map.ShowMap(); } } + + if (Input.IsActionJustPressed("menu")) + { + HandleMenu(); + } + + DisplayStats(); + } + + public void HandleMenu() + { + bool shouldMenuOpen = true; + foreach (PanelContainer element in uiContent.GetChildren()) + { + if (element.Visible) + { + element.Visible = false; + shouldMenuOpen = false; + } + } + + if (shouldMenuOpen) + { + menu.Visible = true; + } } public void ChangeColor(Color color) @@ -43,4 +73,22 @@ public partial class UIHandler : Control { codingWindow.ShowWindow(robot); } + + public void DisplayStats() + { + FPS.Text = Engine.GetFramesPerSecond().ToString() + " FPS"; + double memory = Process.GetCurrentProcess().WorkingSet64 / (1024 * 1024); + string memoryDisplay = memory > 1024 ? Math.Round(memory / 1024, 2).ToString() + " GB" : memory.ToString() + " MB"; + RAM.Text = memoryDisplay; + } + + public void ShowOptions() + { + options.Visible = true; + } + + public void ExitGame() + { + GetTree().ChangeSceneToFile("res://Scenes/MainMenu.tscn"); + } } diff --git a/Scripts/Information.cs b/Scripts/Information.cs deleted file mode 100644 index 2a5fbce..0000000 --- a/Scripts/Information.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Godot; -using System; - -public partial class Information : PanelContainer -{ - [Export] RichTextLabel title; - [Export] RichTextLabel content; - // Called when the node enters the scene tree for the first time. - public override void _Ready() - { - } - - // Called every frame. 'delta' is the elapsed time since the previous frame. - public override void _Process(double delta) - { - } - - public void DisplayInformation(string title, string content) - { - this.title.Text = title; - this.content.Text = content; - Visible = true; - } - - public void HideInformation() - { - Visible = false; - } -} diff --git a/Scripts/Information.cs.uid b/Scripts/Information.cs.uid deleted file mode 100644 index bc7d751..0000000 --- a/Scripts/Information.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://c3v2vdj3ghp78 diff --git a/Scripts/WorldGeneration/Layer.cs b/Scripts/WorldGeneration/Layer.cs index 12b3572..0efe399 100644 --- a/Scripts/WorldGeneration/Layer.cs +++ b/Scripts/WorldGeneration/Layer.cs @@ -29,7 +29,7 @@ public partial class Layer : Node3D // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(double delta) { - + } public void ClearDecorations() @@ -113,6 +113,8 @@ public partial class Layer : Node3D { for (int z = 0; z < layerSize; z++) { + //Exclude spawn from border generation + if(x == 0 && z == 0) continue; if (!IsBorder(x, z)) continue; @@ -135,6 +137,13 @@ public partial class Layer : Node3D private void GenerateNecessaryTiles() { + //Generate spawn only in the first layer + if (level == 0) + { + tiles[0,0].Collapse("spawn"); + Propagate(new Vector2I()); + } + //Randomly position the gate to the next layer int posX, posY; while (true) { @@ -146,11 +155,12 @@ public partial class Layer : Node3D { tiles[posX, posY].Collapse("gate"); gateCoordinate = new Vector2I(posX, posY); - GD.Print(gateCoordinate); Propagate(gateCoordinate); break; } } + + } public bool GenerateLayer(Vector2I collapseOrigin) diff --git a/Scripts/WorldGeneration/Tile.cs b/Scripts/WorldGeneration/Tile.cs index e928db2..f0d0941 100644 --- a/Scripts/WorldGeneration/Tile.cs +++ b/Scripts/WorldGeneration/Tile.cs @@ -78,6 +78,7 @@ public partial class Tile public void SpawnContent(Dictionary contentMeshes, Transform3D transform, List placeholders) { + if(!wasVisited) return; foreach (Placeholder placeholder in placeholders) { if (containsLight && placeholder.name == "light") SpawnLight(contentMeshes["light"], placeholder, transform); diff --git a/Scripts/WorldGeneration/WFC.cs b/Scripts/WorldGeneration/WFC.cs index 5283bce..c19306e 100644 --- a/Scripts/WorldGeneration/WFC.cs +++ b/Scripts/WorldGeneration/WFC.cs @@ -66,7 +66,9 @@ public class WFC ["corner_down_right"] = new() { Direction.Forward, Direction.Right, Direction.Up }, ["junction"] = new() { Direction.Backward, Direction.Forward, Direction.Left, Direction.Right, Direction.Up }, - ["gate"] = new() { Direction.Backward, Direction.Forward, Direction.Left, Direction.Right, Direction.Up, Direction.Down } + ["gate"] = new() { Direction.Backward, Direction.Forward, Direction.Left, Direction.Right, Direction.Up, Direction.Down }, + + ["spawn"] = new() { Direction.Forward, Direction.Left }, }; public static Dictionary weights = new() @@ -90,7 +92,8 @@ public class WFC ["end_left"] = 0.2f, ["end_right"] = 0.3f, - ["gate"] = 0.0f + ["gate"] = 0.0f, + ["spawn"] = 0.0f }; public static Direction Opposite(Direction dir) diff --git a/Scripts/WorldGeneration/World.cs b/Scripts/WorldGeneration/World.cs index 0efddf5..8f03563 100644 --- a/Scripts/WorldGeneration/World.cs +++ b/Scripts/WorldGeneration/World.cs @@ -90,7 +90,7 @@ public partial class World : Node3D { Robot robot = ResourceLoader.LoadRobotPrefab().Instantiate(); robot.Name = $"Robot #{robots.Count + 1}"; - robot.Position = map[0].tiles[rand.Next(layerSize), rand.Next(layerSize)].Position; + robot.Position = map[0].tiles[0,0].Position; AddChild(robot); robots.Add(robot); } @@ -113,6 +113,15 @@ public partial class World : Node3D map[layer] = layerNode; } + map[0].tiles[0,0].wasVisited = true; + map[0].tiles[0,0].containsDecoration = true; + map[0].tiles[0,0].containsLight = true; + map[0].tiles[0,0].containsResource = false; + } + + private void HandleTileVisit(int level) + { + HandleRenderData(BuildRenderData(level)); } private List BuildRenderData(int layerIndex) diff --git a/project.godot b/project.godot index 5b3483a..64e3846 100644 --- a/project.godot +++ b/project.godot @@ -87,6 +87,11 @@ map={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":77,"key_label":0,"unicode":109,"location":0,"echo":false,"script":null) ] } +menu={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} [layer_names]