From b4e374608dc4aaeb649550221ec484e421293d5c Mon Sep 17 00:00:00 2001 From: bionickatana Date: Sun, 21 Jun 2026 21:45:24 -0600 Subject: [PATCH] Setup background and scrolling stuff --- .editorconfig | 4 ++ .gitattributes | 2 + .gitignore | 3 + .main_game_camera.gd.kate-swp | Bin 0 -> 116 bytes assets/images/adder.png | Bin 0 -> 2237 bytes assets/images/adder.png.import | 40 ++++++++++++ assets/images/adder.xcf | Bin 0 -> 7908 bytes assets/images/background_square.png | Bin 0 -> 754 bytes assets/images/background_square.png.import | 40 ++++++++++++ assets/images/background_square.xcf | Bin 0 -> 3757 bytes assets/images/belt.png | Bin 0 -> 335 bytes assets/images/belt.png.import | 40 ++++++++++++ assets/images/belt.xcf | Bin 0 -> 4898 bytes assets/images/cursor.png | Bin 0 -> 832 bytes assets/images/cursor.png.import | 40 ++++++++++++ assets/images/cursor.xcf | Bin 0 -> 4278 bytes assets/images/delete.png | Bin 0 -> 550 bytes assets/images/delete.png.import | 40 ++++++++++++ assets/images/delete.xcf | Bin 0 -> 5005 bytes assets/images/extractor.png | Bin 0 -> 432 bytes assets/images/extractor.png.import | 40 ++++++++++++ assets/images/extractor.xcf | Bin 0 -> 3347 bytes assets/images/producer.png | Bin 0 -> 1396 bytes assets/images/producer.png.import | 40 ++++++++++++ assets/images/producer.xcf | Bin 0 -> 6495 bytes game_scene.tscn | 23 +++++++ icon.svg | 1 + icon.svg.import | 43 ++++++++++++ main_game_background_tiles.gd | 36 +++++++++++ main_game_background_tiles.gd.uid | 1 + main_game_camera.gd | 72 +++++++++++++++++++++ main_game_camera.gd.uid | 1 + project.godot | 31 +++++++++ 33 files changed, 497 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .main_game_camera.gd.kate-swp create mode 100644 assets/images/adder.png create mode 100644 assets/images/adder.png.import create mode 100644 assets/images/adder.xcf create mode 100644 assets/images/background_square.png create mode 100644 assets/images/background_square.png.import create mode 100644 assets/images/background_square.xcf create mode 100644 assets/images/belt.png create mode 100644 assets/images/belt.png.import create mode 100644 assets/images/belt.xcf create mode 100644 assets/images/cursor.png create mode 100644 assets/images/cursor.png.import create mode 100644 assets/images/cursor.xcf create mode 100644 assets/images/delete.png create mode 100644 assets/images/delete.png.import create mode 100644 assets/images/delete.xcf create mode 100644 assets/images/extractor.png create mode 100644 assets/images/extractor.png.import create mode 100644 assets/images/extractor.xcf create mode 100644 assets/images/producer.png create mode 100644 assets/images/producer.png.import create mode 100644 assets/images/producer.xcf create mode 100644 game_scene.tscn create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 main_game_background_tiles.gd create mode 100644 main_game_background_tiles.gd.uid create mode 100644 main_game_camera.gd create mode 100644 main_game_camera.gd.uid create mode 100644 project.godot diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/.main_game_camera.gd.kate-swp b/.main_game_camera.gd.kate-swp new file mode 100644 index 0000000000000000000000000000000000000000..00a92ee12987c141d7e14bd1483a106342226fd0 GIT binary patch literal 116 zcmZQzU=Z?7EJ;-eE>A2_aLdd|RWQ;sU|?VniJ2+JpE~dL4r{JlxqHjGdcUVQ^aqCn kWq5#?!4=Hpg)lvV6qpI58J%5&VSGjqKM}!a0`YTQ0qX=5WdHyG literal 0 HcmV?d00001 diff --git a/assets/images/adder.png b/assets/images/adder.png new file mode 100644 index 0000000000000000000000000000000000000000..2bbf7fbc1fa4411d94cdd645e73ae68188d66d05 GIT binary patch literal 2237 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 literal 0 HcmV?d00001 diff --git a/assets/images/background_square.png b/assets/images/background_square.png new file mode 100644 index 0000000000000000000000000000000000000000..56623a0079a97fe85020efb31a3a2024304f3a6c GIT binary patch literal 754 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 literal 0 HcmV?d00001 diff --git a/assets/images/belt.png b/assets/images/belt.png new file mode 100644 index 0000000000000000000000000000000000000000..1edd96781556e647145bab6dbc92353de17db49a GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%C&rs6b?Si}mUKs7M+SzC z{oH>NSwSk3J%W507^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10g0sLQ zvY3HEPZ@+6E0)@q0R`DhJbhi+U$F@?%NiV)-TECUwA9nZF(l&f+sPY6n+uKZ1%@Z@ZqmcfN(m4r>-tY^HotDY{I!oaY8 zQsJ!a!G&@uwKnIivsSdO&}941pW~}sze9Do_K&)0s}^n*JAEtZgT(#UTN`&jyVSDg zo;R~n(mz-Kwbxz>?ot=o^6n8I>ru8U{!@>xvUxCSDzGkT5ShRf-_3=E#GelF{r5}E*T5OD$k literal 0 HcmV?d00001 diff --git a/assets/images/belt.png.import b/assets/images/belt.png.import new file mode 100644 index 0000000..d0ee440 --- /dev/null +++ b/assets/images/belt.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://m2en3pg3og4u" +path="res://.godot/imported/belt.png-8861f7fad4159b650cda9b982d2aece4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/images/belt.png" +dest_files=["res://.godot/imported/belt.png-8861f7fad4159b650cda9b982d2aece4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/images/belt.xcf b/assets/images/belt.xcf new file mode 100644 index 0000000000000000000000000000000000000000..320a9184365c3e7b0fe8e5446b968bfd03f325b6 GIT binary patch literal 4898 zcmeHJTW{P%6!v!8TuIxM7Ac|+gSjL{crOWxO0?OCrcgy{)u>5DdEjB}o%N3Do9x-J zK|LJ03gnrVYua5Acv#eV#LOExU90<{_*?*lX2m?EIv1+D{2zz2m)cJ~Zp`Y-egE<#&Q==&m27#pO#vmFbrM34O_ z)qp+OdA3WM+qtRqxhpI;mOYvy>pxc#b?6C}gr4j@m|N+)PUwX(Tgf{sc5TjD`LF!| zYWpqfHp_pc9wiZXWZ<%P3!}raQ8BQFfmBQe&OjvO5%&9uP%O8v$XXmXrkuZcf=}L! zLr3(6vDglSzI0y<1FJ7RVMT#!iBS~B%JO(pR;2dXiVT#9Jq{-pgm^1T7R4e-WEilo zFt%U2g@)d%ZKA9|S_hQ1we>5Wep>q1XfR|+%V zSRzP|s(ZJxN_?Ssk1I~|SSdH0&eq8H*nxbnAb{{hQI!&0K?eZ8)dLJ~H-PP9W z`bKMgqrJ}B>l?y&A>$VUn{TL4 z)R)*ANba2AuTC70N~_gupX2cT#T|ABp$Z$@bOh{SE2G?J2iLYGF^^GOg)PvVth(bt zF2|6L@jO3B^cu0SK3Zoli_;F3+$Z!rN%*uQEqXfg1j9+wm!nNHqS_{dFf!RN_BPFd zQqe}U86*wf3vJQBer+DxG_k#!X1CKkj&o{nyz-;Qv2}x3C^ogOKhm+<>-*&nIX^ob zIRBE@h({O72vHh356b95shpe;^hp%pS#k2bO9-4w{liNH*uhEM_&SO_>2TVTt7nz= zZF}xbXIhTOyu6i+PV?lvq@%XdX7=>p_79cGQe+TT0QwW3dMX2vKrpV+18oYRn?nYC zMDo@zc;a>e&^&pWg^bR)Uy23*CNv_5xGGpaFh zLcU9o@1vGCiLn%nrC=YfPMwFBnU~Sei3tgE1S7+0fcx%m!mNs%?WY8;s=uV>TGG!I%w3 zU|&bC{lJcms2FR1(vwUvz!-29XVUtBvAo8_3HgFC8;sdGV;LCBz*q)t2F5ZlmZ91i z7|Xy|4ltI1u?&o5Uz@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vG?BLDy{BLR4&KXw2B00(qQO+^Rl1`!hi2HD$Bm6=h*6*qexiHf_pi z<0_)HNyt#pA_#1yX{DKzMiN#v}H8?djMMXu0SO(B_orxqj=dWBAO8~)OknV|bMvZBXUN|SF145w?b%8Nn zyAyafKE}S&C&g5Nh|r>kXr7*=D=mc%&kA;(Iw7V3X3{T0hpy8d9m(T#54(>a7E=KL zlfZkRPbr$a-;h^SAf^Jod>25^o*lHlY$q>&?;j&I2Y@^Y~R0PuYOPVU^T#pm;hC4l7@ zFEKxHA)TF_G&MENikR~RtFEq=?E_suU3AHfTWrhBVqJ=d#CR9Zcqh4=b5+=n;@RTz z2U)dfF~^FERoHid_PJei%^a;8EO5EPcNrUsE|&)Eecym=V|*3>M}g^XkQEZS1e^@XefLDuh**p>g(%e zBvD})261t5IGj$B+-{7T8t!cHGORu=%&;eg!1Rak{}1Hk3C*?$tgQJH(|bh1#Hi!bjG3dv^&RfUu^X{vsx`LiEtQmGY+R8?wIOnmli-<#dF z*A50l|LRz8=eKX(ym|ARnYVLJO6e>q#1f=87!Gq#h%JaugRBDac;K-Hq`U)EC{QXv z%0Q|>9YoI)Y$Mkc6xV8c#xvgx?pu z!(TWU+}G5^li;J^u;(5eS{<3^J3-rXA(s_mQYJ}4K^UiR)|>s}%V#8wNSRnl%z;fo zNhETj27!US3tMouF%q<~6ZqY!DlsvhSH%t`laP{K`HU|i$)YctN&3V>R#7#dEaV*e zJ&!a<8BJ7W0XmV40wcltWK}VjlavhkBE0t;PTDOvu4R)=_2oz(3sRHPq78FGujtcM zAp_G7&1tu-$<06D8B`ga^BW1PNY)t_+ zC=1mwVGHlestV3@c9WLMr+YGjB+pjco6u6awSk#DDs8I z1@_&cN=Ydr$oJ!e1^zWLlhjgtbW`{)BQonJrTBu3yF@tYc@0S24MzilyNmNZGaVq5 zU@#E6ONYG+@31qaXo|lB^G!D#WuSY0=a#LrFpmSb8XST6y|Fvn$^EU6*_C3ihG4_=j+Op{8BV3AuZ8kZ|r0S3$@w zC?fFUx8lHv78J@%hQKMIgY9R!a2Uhl6d9iTzu$Sy_q+cqGH~QG2`1_36&I z9jDjjwu{jcn8}xzYF(xLy6a^wd>9muf#CgOX}b_RoK%&3hFu~`Y}>_9<6XrB*?_q1 z7(C&k0)l$%%G($!uEvG&bAUEj2#AAmNCz)<;bkto+=W*HE;mh+f)oLN#%{y0K4)X7 zxQ7vg4aWMA3p@8MXHL+BWyv3{+Ig;c#X(S`FISvP#&6RGDlf*y%2Dn^)BG)O(s$2q zFsI%gJVwmPpK3=^b!KsF)7N+GS#M5U<*I#~x@*l(uEKoQtlw2*npaD?sj}Mb>j0H; zQ=WC(9|W|Rqn@YM0x0Lqy`N<@UAns(z!Hwu9C!eLm!r$$RRET9v{bDGu#BT?pIrlB zIY&3XxEjC;j<#K1#WY3ojc4B-UkTXD71xPFSKdSeFE{nri9b|gU|fmEvxuXi3svT= zF+RMx{=sD>r5p`htTM;nKleiKw_obtUsJ+SexTa?`1+5oT>HgqPr?0m)eE)e#Ko@a zlEr;6zq1EEzcP0n=J(!+@|EMix>;j>@{eC%c<%duDFT}O=kMS7)5o;NocR0X&41nc zsMajr_}h(-ZV=PF@r*f#y)hlx`@z6*WN-9x?-69r7#TgI)I!{)2EA|y$tyGHSD!}i z78$g8FQX2cdKh(vnPAizG$%0X47&axqt2j5Eb744qRybh7Ig;QYEfs(9raPSJ zG-YuHwiahPeZ}HTr|lMJI(@?8OfT~L9M1G&d%>``n?BWi(&9{~jj*#O#!d|lof=%E z(=Rj5uKjRuU}*5rK#5NGPjmKq{G_fQKY^Ty1A2cy%xd`9OV8C2jAFW(sQrFWBC8?F*ST?vhLR8;v2kvY3ScfQ`6f)=y8=R&d<0w%LMe4*TOc)iXbrVtqa>rHXI~lH+Jn8g2N` zTTr9vdXUu${(jWvT79W>wF0fKvJ!g{TPoRom1qjtf*g^wkUNaF&iC&qV2dEs&L(cY z?;im>hZNVhgj-?jJy65Mxl#})kAUDO&|REQ7yN6$T`Il0@?kEP)z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vG?BLDy{BLR4&KXw2B00(qQO+^Rl1`!es4pCZjN&o-> zd`Uz>R9M69mQ5=KaTLaX*IO(^A`41h%F4oqEG-oaA3%xKRV*wltSL(J0a#ELQdTx> zC=1KGu}~sK!~%5@d3kJ(I!#UY=FZ$K=G4^8ndh9}bN(~`X&{LtlE@K)8G-EB%d=*| z)oc}Npj2?|8jj}BcMCpDdnc%mVih_Cuh#TI&={gC6J(s(;V2))v}?Q_qM3D?&8Xjn z62Vc}bhb)wcJEeD7sm_PA$T#!jiA=@serkmICsUA1Fc$a(&g6U-j*rBp#zQyvUYy` zyDD*;XmwD33>5PNl@7pH|I(+V01xMZ>x*JeUn95*tiZdVt5^m$9C*ondNYFZxZ%SN zzH7O8mz#?d-XOR)(37Ca@)d#;%YO=b<1(=0CLIsl>oK?lr-G`e;Uf;dAEH@wnw2Qw z&4Nd3oE5Z$=qhb`3BCpWQ5o2ClcjTL`vhO6y%baz3ZHQB13@Z}nq^nBRtUUZ@NA7< o1Z{cNRSC|ViNWOWI*ET9KZpb+s6BC*WdHyG07*qoM6N<$f?kx|fdBvi literal 0 HcmV?d00001 diff --git a/assets/images/delete.png.import b/assets/images/delete.png.import new file mode 100644 index 0000000..f6fc1cd --- /dev/null +++ b/assets/images/delete.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bvss8ahosx14f" +path="res://.godot/imported/delete.png-361a3d8bd528480177d17c7ccba5320e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/images/delete.png" +dest_files=["res://.godot/imported/delete.png-361a3d8bd528480177d17c7ccba5320e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/images/delete.xcf b/assets/images/delete.xcf new file mode 100644 index 0000000000000000000000000000000000000000..394260f40bae17f97989e5ab5076c5cd3330a509 GIT binary patch literal 5005 zcmd5=O>7)V6)xN3vEw*iJMpqYtf10am#Qhcv}?4H?7 z?1Vi~qgU_MtM^{LdiD2uI;QRMe#_u@v}%>1@C1nd0bl_zHiqgLV0s-a0+dBSE`d)a znB<;kEdL(xkq%6&E!Vb%6Qa$i^XR%S^iZ_ZaCLW~6 zK3xpLElcpgwaoU(nWE8Yxt8nCaFk+1a^+g#V&PojEH^Ay4;5aiab-h$!mp}n8}+)v zwUaQo`4k3Y#mMrL$i#9#@bs4Hba+L>I9mg)q@ng4Gvubz>WTm|eb+Do5yCOZXXuz5 z6s7K*RrwpdlZ+&7KVC0dWtIWr8d3jbBz_AH^SH8_6FGDJtKoW}}ZH*H8)wQ6le ztF2V(yi#4MXe&zx)qUAFJEo&s&tfBT{IYO5VOLpOs_x@$B>h#heIVg$0(-F+BB(d8 zcyMkX<2Uyd;EJY|EBh#X?cfSmyKd-~*6BpNip_>_k2W65rVDc(u?@|8qWyHy9W?T6 zD-_#!Ioj&+9#OGBG;L&9h7~ftKc(iL!^4WS>FH1k?)kzn`>Tpau?@Per|_O{tt#Cx z^j6AcCn)J{cT<#bt(A9W$~azSWvyA>wKH@!ZrWaHSGq*2kX(at{NavTsb5b|$o}5- z?I-!w*S!OI1S_T35Ax_huI$|qG$k@{CAoS27ZbRZjIC!daLEf>rL&%AnJt};WOY<% zAGf(au1wo;cU>O47|rtDeMwhsrcB+68}qXn<}gW5=!*b)3CC|zZyrF8s017*`pj#n z@z4T@Pm)SP14Y`zr!oUbX`Z3Kn4u46X!0zTKa!!J15M*i0mvW1BuAcpKB0lwOGHZ) z;1d}-n+V|XpL`R2@rxdceyCddmhi!%xlI1BNIb46c;sx|zuoh=(u|3|4QQPAgt}i;i+jH9JIbj$Y3KVWO%cO$yIEa#AlsJ8eTQm$$ z2a9{6gNWnB}E`spQYbGe}}RcoikX`wY*wavzb7ZZ z?TQU|$GMU+LfH!j#!yFynNC~uDF+#F@vbmC-HD_YHH=cx-r+6m%%8#V3ceI1t9-Q22@iVJi-WD~iWZ znBpL*bO?B@n#3$>#(AM<_Ju`BB$mU}EmIHpR+Lm?eL6j)aa<9O+6(B|ZR&wg+omsC zbZ2ra^uhdu^Xgl@AjF-{En$Q-q}x|*w=H;k3!Bhvf#vo>3tK(o2snaVA>k-9-knq` z+k#csRx{rO_`E>&lQFkr1?ogpE}{`A^ddsS8iOsoEbP? zL|U3uaKs#RFPXq*FQnL{;lUl3`miElcF z8+~JRP3#qXphO#m?&nOID`pxgnZ91h8!~r3?Ep^uK+bKXe90!{G++$RMjkK@$VD&# zJRv6&9`#88$&$_?HZ5mZUe1Dd1TYKwFq;BD?w?NNr_d&wlfYyzww;p`pvfkUOER(T zoV?FoXZOb!BiLqlq_m1*{&Bjt~oE#=P+u@A?7C*|e? z`RDl=_UQNnxN>QhNpl<$N0__-d~cRLdhWe(`RL#3VfN9_rTp%;e0vg_uSoeOdtJ(J z!^h|UF8}ozmj9#NsZX(;UrX7-;I$q3&Y?-R^9?C~1J~Y=^80Z3#ed2Np97wLM?N|` z!FJw~(#*5>m;WQ*#hZUi%HNJnu@Al{JJECI|W08oJ=!#N9SJf@As}nz`t!RX^N#JqfC&^)&psj%yC1^io)ptQh30gu& z30gvzNEa{$_)UhDIpioPRI(ZK9NKBHF!6K-UjR9r+NX(cI!TC7Id%gTPk>^Ma_n0%j%tpY N0Oi;lF^+Z%`!Dw9;bZ^+ literal 0 HcmV?d00001 diff --git a/assets/images/extractor.png b/assets/images/extractor.png new file mode 100644 index 0000000000000000000000000000000000000000..30d4f7aa03dc3f4dac2e38b44b07f1252dfeca75 GIT binary patch literal 432 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 T1f7|nI~(T6hq*rdUd;G!TjsH^ literal 0 HcmV?d00001 diff --git a/game_scene.tscn b/game_scene.tscn new file mode 100644 index 0000000..61c265d --- /dev/null +++ b/game_scene.tscn @@ -0,0 +1,23 @@ +[gd_scene format=3 uid="uid://613m8wworduk"] + +[ext_resource type="Texture2D" uid="uid://bgkhi56a223m2" path="res://assets/images/background_square.png" id="1_mlf6e"] +[ext_resource type="Script" uid="uid://clf21ltbqb0vq" path="res://main_game_background_tiles.gd" id="2_po0ka"] +[ext_resource type="Script" uid="uid://iy6u4txips6p" path="res://main_game_camera.gd" id="3_v1wow"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_v1wow"] +texture = ExtResource("1_mlf6e") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 + +[sub_resource type="TileSet" id="TileSet_ylkns"] +tile_size = Vector2i(32, 32) +sources/0 = SubResource("TileSetAtlasSource_v1wow") + +[node name="main_game" type="Node2D" unique_id=380715108] + +[node name="main_game_background_tiles" type="TileMapLayer" parent="." unique_id=643550399] +tile_set = SubResource("TileSet_ylkns") +script = ExtResource("2_po0ka") + +[node name="main_game_camera" type="Camera2D" parent="." unique_id=1094262036] +script = ExtResource("3_v1wow") diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..c6bbb7d --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..dece5b2 --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://sojq4mpjlqq7" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/main_game_background_tiles.gd b/main_game_background_tiles.gd new file mode 100644 index 0000000..db73adb --- /dev/null +++ b/main_game_background_tiles.gd @@ -0,0 +1,36 @@ +extends TileMapLayer + +@onready var camera: Camera2D = $"../main_game_camera" + +@export var render_radius: int = 20 # How many tiles out from the center to draw +var tile_size: Vector2i = Vector2i(32, 32) # Change this to your actual asset square size (e.g., 32x32, 64x64) + +# Keep track of which grid coordinates we've already loaded +var loaded_tiles: Dictionary = {} + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + if camera: + generate_tiles_around_camera() + +func generate_tiles_around_camera() -> void: + # 1. Convert the camera's pixel position into grid coordinates + var camera_grid_pos = self.local_to_map(camera.global_position) + + # 2. Loop through a square grid area around the camera + for x in range(camera_grid_pos.x - render_radius / camera.zoom[0], camera_grid_pos.x + render_radius / camera.zoom[0]): + for y in range(camera_grid_pos.y - render_radius / camera.zoom[1], camera_grid_pos.y + render_radius / camera.zoom[1]): + var tile_coords = Vector2i(x, y) + + # 3. Only place a tile if we haven't already placed one there + if not loaded_tiles.has(tile_coords): + # set_cell(coords, source_id, atlas_coords) + # Assumes your source_id is 0 and your square tile is at (0,0) in the atlas + self.set_cell(tile_coords, 0, Vector2i(0, 0)) + loaded_tiles[tile_coords] = true diff --git a/main_game_background_tiles.gd.uid b/main_game_background_tiles.gd.uid new file mode 100644 index 0000000..357cc04 --- /dev/null +++ b/main_game_background_tiles.gd.uid @@ -0,0 +1 @@ +uid://clf21ltbqb0vq diff --git a/main_game_camera.gd b/main_game_camera.gd new file mode 100644 index 0000000..e7b6fce --- /dev/null +++ b/main_game_camera.gd @@ -0,0 +1,72 @@ +extends Camera2D + +# --- Movement Settings --- +@export var KEYBOARD_SPEED: float = 500.0 # Pixels per second using keys +@export var EDGE_SPEED: float = 600.0 # Pixels per second using mouse edge +@export var EDGE_MARGIN: float = 20.0 # How close to the screen edge (in pixels) to trigger scroll + +# --- Zoom Settings --- +@export var MIN_ZOOM: float = 0.5 # Furthest zoomed out +@export var MAX_ZOOM: float = 3.0 # Closest zoomed in +@export var ZOOM_SPEED: float = 0.1 # How fast it zooms per scroll tick +var target_zoom: float = 1.0 # Smoothly interpolate to this value + +func _ready() -> void: + # Ensures the camera uses its actual starting zoom + target_zoom = zoom.x + +func _process(delta: float) -> void: + handle_keyboard_movement(delta) + handle_edge_scrolling(delta) + handle_smooth_zoom(delta) + +# 1. ARROW KEYS / WASD MOVEMENT +func handle_keyboard_movement(delta: float) -> void: + var velocity = Vector2.ZERO + + if Input.is_key_pressed(KEY_LEFT) or Input.is_key_pressed(KEY_A): + velocity.x -= 1 + if Input.is_key_pressed(KEY_RIGHT) or Input.is_key_pressed(KEY_D): + velocity.x += 1 + if Input.is_key_pressed(KEY_UP) or Input.is_key_pressed(KEY_W): + velocity.y -= 1 + if Input.is_key_pressed(KEY_DOWN) or Input.is_key_pressed(KEY_S): + velocity.y += 1 + + # Move the camera based on direction, speed, and time passed + global_position += velocity.normalized() * KEYBOARD_SPEED * delta + +# 2. MOUSE EDGE SCROLLING +func handle_edge_scrolling(delta: float) -> void: + var mouse_pos = get_viewport().get_mouse_position() + var window_size = get_viewport().get_visible_rect().size + var velocity = Vector2.ZERO + + # Check Left/Right edges + if mouse_pos.x < EDGE_MARGIN: + velocity.x -= 1 + elif mouse_pos.x > window_size.x - EDGE_MARGIN: + velocity.x += 1 + + # Check Top/Bottom edges + if mouse_pos.y < EDGE_MARGIN: + velocity.y -= 1 + elif mouse_pos.y > window_size.y - EDGE_MARGIN: + velocity.y += 1 + + global_position += velocity.normalized() * EDGE_SPEED * delta + +# 3. MOUSE WHEEL ZOOM (Detecting the inputs) +func _unhandled_input(event: InputEvent) -> void: + if event is InputEventMouseButton: + if event.button_index == MOUSE_BUTTON_WHEEL_UP and event.pressed: + target_zoom = clamp(target_zoom + ZOOM_SPEED, MIN_ZOOM, MAX_ZOOM) + elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN and event.pressed: + target_zoom = clamp(target_zoom - ZOOM_SPEED, MIN_ZOOM, MAX_ZOOM) + +# 4. SMOOTH ZOOMING ANIMATION +func handle_smooth_zoom(delta: float) -> void: + # Lerp smoothly transitions the current zoom to our target_zoom over time + var current_zoom = zoom.x + var new_zoom = lerp(current_zoom, target_zoom, 10.0 * delta) + zoom = Vector2(new_zoom, new_zoom) diff --git a/main_game_camera.gd.uid b/main_game_camera.gd.uid new file mode 100644 index 0000000..ba90be4 --- /dev/null +++ b/main_game_camera.gd.uid @@ -0,0 +1 @@ +uid://iy6u4txips6p diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..771deef --- /dev/null +++ b/project.godot @@ -0,0 +1,31 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="numberFactory" +run/main_scene="res://game_scene.tscn" +config/features=PackedStringArray("4.7", "GL Compatibility") +config/icon="res://icon.svg" + +[display] + +window/stretch/mode="canvas_items" +window/stretch/aspect="expand" + +[physics] + +3d/physics_engine="Jolt Physics" + +[rendering] + +rendering_device/driver.windows="d3d12" +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility"