From 71bd82555358d1eb1acd8739a56ce6d569705036 Mon Sep 17 00:00:00 2001 From: Halbear Date: Fri, 16 Jan 2026 10:21:37 +0000 Subject: [PATCH] Added Debugger and logging --- .gitignore | 7 +- .gradle/8.14/checksums/checksums.lock | Bin 17 -> 17 bytes .gradle/8.14/checksums/md5-checksums.bin | Bin 23397 -> 23497 bytes .gradle/8.14/checksums/sha1-checksums.bin | Bin 33293 -> 33509 bytes .../executionHistory/executionHistory.bin | Bin 99644 -> 122168 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.14/fileHashes/fileHashes.bin | Bin 24697 -> 26497 bytes .gradle/8.14/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.14/fileHashes/resourceHashesCache.bin | Bin 21115 -> 21455 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 19667 -> 19775 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .idea/misc.xml | 3 + .idea/vcs.xml | 2 +- build.gradle | 3 +- .../main/net/halbear/Executable/Init.class | Bin 740 -> 0 bytes .../Terrain4J/EngineCore/Display/Render.class | Bin 618 -> 0 bytes .../EngineCore/Display/VulkanInstance.class | Bin 1426 -> 0 bytes .../Terrain4J/EngineCore/Display/Window.class | Bin 4674 -> 0 bytes .../EngineCore/Input/KeyboardInput.class | Bin 2666 -> 0 bytes .../EngineCore/Input/MouseListener.class | Bin 3332 -> 0 bytes .../EngineCore/Logic/EngineInstance.class | Bin 2042 -> 0 bytes .../EngineCore/Logic/GameLogic.class | Bin 339 -> 0 bytes .../Terrain4J/EngineCore/Logic/Globals.class | Bin 4266 -> 0 bytes .../Terrain4J/EngineCore/Main/GameCore.class | Bin 910 -> 0 bytes .../EngineCore/Main/PrimaryRuntime.class | Bin 3603 -> 0 bytes .../Terrain4J/EngineCore/Main/Scene.class | Bin 446 -> 0 bytes build/reports/problems/problems-report.html | 663 ------------------ .../stash-dir/EngineInstance.class.uniqueId8 | Bin 2030 -> 0 bytes .../stash-dir/GameCore.class.uniqueId0 | Bin 910 -> 0 bytes .../stash-dir/GameLogic.class.uniqueId4 | Bin 339 -> 0 bytes .../stash-dir/Init.class.uniqueId7 | Bin 740 -> 0 bytes .../stash-dir/MouseListener.class.uniqueId5 | Bin 3332 -> 0 bytes .../stash-dir/PrimaryRuntime.class.uniqueId1 | Bin 3619 -> 0 bytes .../stash-dir/Render.class.uniqueId6 | Bin 612 -> 0 bytes .../stash-dir/Scene.class.uniqueId2 | Bin 440 -> 0 bytes .../stash-dir/Window.class.uniqueId3 | Bin 4735 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 110800 -> 0 bytes .../java/net/halbear/Executable/Init.java | 3 + .../EngineCore/Display/VulkanInstance.java | 67 +- .../Terrain4J/EngineCore/Display/Window.java | 14 +- .../Terrain4J/EngineCore/Logic/Globals.java | 95 --- .../EngineCore/Logic/VulkanContext.java | 2 +- .../EngineCore/Main/PrimaryRuntime.java | 14 +- .../EngineCore/Vulkan/Util/VulkanUtils.java | 8 +- 45 files changed, 96 insertions(+), 785 deletions(-) delete mode 100644 build/classes/java/main/net/halbear/Executable/Init.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Display/Render.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Display/VulkanInstance.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Display/Window.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Input/KeyboardInput.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Input/MouseListener.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Logic/EngineInstance.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Logic/GameLogic.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Logic/Globals.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Main/GameCore.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.class delete mode 100644 build/classes/java/main/net/halbear/Terrain4J/EngineCore/Main/Scene.class delete mode 100644 build/reports/problems/problems-report.html delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/EngineInstance.class.uniqueId8 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/GameCore.class.uniqueId0 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/GameLogic.class.uniqueId4 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/Init.class.uniqueId7 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/MouseListener.class.uniqueId5 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/PrimaryRuntime.class.uniqueId1 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/Render.class.uniqueId6 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/Scene.class.uniqueId2 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/Window.class.uniqueId3 delete mode 100644 build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Globals.java diff --git a/.gitignore b/.gitignore index 57940fd..c8d833a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,12 @@ # Generated files .idea/**/contentModel.xml - +.idea/ +build/ +/.gradle/ +/.idea/ +/build/ +/.gradle/ # Sensitive or high-churn files .idea/**/dataSources/ .idea/**/dataSources.ids diff --git a/.gradle/8.14/checksums/checksums.lock b/.gradle/8.14/checksums/checksums.lock index 73e7ccf2796d8bbbc490e4c4700d1755dabb9b01..df1fada27f4fafb56e8297cd8573d9a6d302f4fd 100644 GIT binary patch literal 17 VcmZRcHrMum5d-&p1~6cp1OO=B1ET-{ literal 17 VcmZRcHrMum5d-&p1~6dk001b|1DOB- diff --git a/.gradle/8.14/checksums/md5-checksums.bin b/.gradle/8.14/checksums/md5-checksums.bin index 652abe2b113c59b4c30eaab66e20b1f0fd59bfca..7bedf5037124a3383b1942f37b646e8e88e88658 100644 GIT binary patch delta 176 zcmaF5jq&7m#tkMCj47K|3aX<8qJzU5qyqq&NiuH$ delta 41 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 diff --git a/.gradle/8.14/executionHistory/executionHistory.lock b/.gradle/8.14/executionHistory/executionHistory.lock index eddb209ae733fb4a44324900fbc727ad786b18ac..4a1117cecaad32955e708e684c99b4811fa84d2c 100644 GIT binary patch literal 17 UcmZSnawk1KDCSo?0|Yz)06usHwEzGB literal 17 UcmZSnawk1KDCSo?0|cA}06t*_o&W#< diff --git a/.gradle/8.14/fileHashes/fileHashes.bin b/.gradle/8.14/fileHashes/fileHashes.bin index 7bbd37cae81afae7040e468163842fab3bdf13f5..d0d94bd3478a23ab9dafbf3d2e533bf3f2704300 100644 GIT binary patch delta 3441 zcma);2~<;88prbj2vm?DYZ#V9j)GWLjZk0^Oc}9=Kv*k65&}_NhKgE)GtQHWSQxal zS7lRhFDOodh!rdoE0TjiQ4lQ^7zA9}16HwR00(96d-uk+NqWjX=jA5<_x--_F8_D) zrmhiLw}|Rx*2D?GvwqG3BlW;usdIoqH}SW?j?G~e2D7t2)%P7hqSO)a*u^FR)w`QB z2ZNE8ycIOFi&!-)CoDo*_OC-?sshB=a9DCqn$cJjX^2Fz3D|1m!@AsJno?KR_7%qc zz;T-**4O^7-hw92k8tE!x$B=!5YD|-!5*DLzx_y+yqdwSFKzzm@@$_Ptha$?+X&WB z_wsZ1H+8MWc@2TFT{UYwv%O)-!uCcaN=HDQolpE!&$xU4t^E}^vQw4zWpe|&G22Li z^wh;FeY#EZVDpeA)>E2Q`m3B~-nkcN9B}e_@W_tCnlXExUKnX@ibPRAcm*pG(k-Do zC8m8yloYEn=&}HLVfgqIu9%?G4RV}oeX6?&oaDkA{cJ&-%!~LE=h*;U?OOsZrSV*s zsM-`HN@G;Pmf6hQ4fO>oej*z%v&M^~_wA9ckQP(k`K7*Hfw&4ik+N8_013AizFdZlz3hiEqhM@HL##X?Ia zEIkMxH4BHe{1uT~#04DB$;2nouBfc}_b7#_2N)18(rwB!e=ZM>4P**B#zJn(`2NG! zWm_)vW!uNo;R2)gQ8@7v?A?~akHzrfQWtCfaBnzo&iZ}%7hT3{?o`LpM9?Y#Z^FiY z3~FMX!A!iZAb`&=K9Eu4HuTLw<8)(TE*=S2#|V-DEz5z1rloEe9mJ5HZ{3P&#$;5nRs$3yS?MaBZVTb+ z*Z}=#Grdyys~k{HfnOQ{<&>K-=F|@+2oh3i=PGDi?WTb@_n}JAG#8<1ppXZkRe^C7 zm7}u+7>el3sg&o*xiKL^wr!~HuJLWBTI$kvP@AW8>RL(XAg*VqjTSnIcjm*Fc^%)E z-#jxdOg(h(6}{c7=M|x<#3@bU<$8;m63Wf-W5%;PU@ zIx^8PS?MABxtuowZ3-Vl*-d6gO~ zwXLoEY_mDJeY0039Z1s7c6HGi8SlJ<|#LE88Wl#~uC^Qs;@e1Q9xP5a%tg{>L{K3yQ{!GH_ks3_=7ZG!{%)MLcTKNgNEPm&J_lMVK6G`Qrgz{Ek_OYZ4b1<8^$j7(xg3VSs|yB&?JG4Tg>B!BUv5}zfrx1*AJmZ>&t zJ7!?wjUCBf9nq8@HSOqcfNIR%j{gb4gqAH)w7T0 zW@|@CJVwNC>`3CjCzT(6ZAW-ml_6xdc7#L~E}~`b+UytrkuPu&5$x6GuFZ~+sKta7 zY>O}>OD^~ZS(L82+CSx9`LjPX9$Zn!1w0hPU~6V=?mpSN=X$`wbAq?Ijw51tUem-d zA|#HQ#1Hq4712e}=U-H1#Y#>bK8tqk4*gaIw{WqKCi0JuUr*Lvav9~-TO{1DU7v!G z?krSf{#{Li9G$Z;rRr93QTDNmr7ItHAmW}aMGzaWQJvcI9BS9M-9h?#52bB?fK;89%)JWM5h1 U<+up5#H^>QelskFgEvL|ADasiS^xk5 delta 513 zcmZoX&-n8I;|3E6#+u2d5+5epN=i)5m7F+POsaqKUMY#mZ>0<-n@UgEd{=q~;tyjOX`ifJ(1E<+V6*JQ4H;)lE)3V(d^A!Bq-EOV+?W%{ zPDqbk#dGj>j|`{PBJ58m#Z{4YQn=nWB|(S5O#ITOI@btVIY lPvzC@#Hr;Aqmu02RDM}pcHajWfmUZJ_YNV{j00zvb0URX)=Kufz literal 17 UcmZQ>mUZJ_YNV{j00zuq02{CZasU7T diff --git a/.gradle/8.14/fileHashes/resourceHashesCache.bin b/.gradle/8.14/fileHashes/resourceHashesCache.bin index a154e73b6f0a13359e6a8a038ba0d1144929dfef..2fa77c7925283cca6b1533dc78171b16ab5fc8aa 100644 GIT binary patch delta 590 zcmeypgz@}x#tkMCjNy|_C2j~T{HEMpnAiA|0Stn>H?v9#FbeGQI=%bIl;$T;(ag=f zQWqKdO>22(Julo06;$1PRa$^iL*T(=DX%5@JrL2L>iNgt5v59psLqSzAKX< zARRSJ@mQqMJ*eV`lWk=)1T-h=JYM4W^gmQ3^W?d*3IfIp%`Ps!doCL)=)QTYYyqP{ z!NY8OKH+=ZQ2lc!%gS2_)Kpn5Qb?cS0u|gp*;ihRiNkWE;t%nS1`qf*J9=1g)f)q4 zC4pEFgat02R(YAb)#}Aj6Wdug<^H?{3d*6XC|s?Zyteo8?{|EgUeDgMND)(o*o@$B z2?c^3OGWhjj^}LuhpD1uzq8In-O7yBCtufRy_mav5~dQh-9FnEvd4&j(i7-36}9EU zRPoD8K<8ROyQ`P|%GpbVZu()W=nD+bZ)a0}@JaBwD9`brjhHI-DH1ND;f0_VLK)wl970m@0~6jBLxkZr;1`uUv&zn^8GP1pr_(sKEdL delta 71 zcmX@VobmS(#tkMCjJ}giC2nk1mE>UD>?(DVakH8XJLBY7*@Vegf!J40Vsour2IJ(v b@&=P#6_l9RJvS=;5Z`EUL143^hZPq9i7gm; diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index e53ec68322a01926415a095ee2708690f833b5f3..8832b540ca55a487a80fad42ccf4956e6ccec2a8 100644 GIT binary patch literal 17 VcmZR!y1etfRb2oh0~j#&0{}8!1X2J1 literal 17 VcmZR!y1etfRb2oh0~j!t001&W1UCQx diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index 1c814eda9caa70ef04b3d4485e73987631a60b92..03f7f3c8c2655dea150b04cc1a4fc2b617c3c090 100644 GIT binary patch delta 175 zcmcaSlX3qn#tkMCjP8?7B~}P*bowspaiTSf0StUDFTN_lB*1uIWnachwG4=$uk_@z zQWgRnJyW-D&e6UORrz%CU#UR;vg1v%MWF0Rbto PA@~=uFz^wxK}eDWg!L8f diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index 28b7f94e5068e0b2975f7e0d47eb2742d0f0187b..a282bfa5cccf0300bb708ca17b3ed203d8f8dba2 100644 GIT binary patch literal 8 PcmZQzV4QtSeSIqc2!#T^ literal 8 PcmZQzV4QvMcJ>DV3UC9I diff --git a/.idea/misc.xml b/.idea/misc.xml index 19978af..4f0665e 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,8 @@ + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7369a2a..e5f67c6 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,8 @@ repositories { dependencies { implementation platform("org.lwjgl:lwjgl-bom:$lwjglVersion") - + implementation 'org.tinylog:tinylog-api:2.7.0' + implementation 'org.tinylog:tinylog-impl:2.7.0' implementation "org.lwjgl:lwjgl" implementation "org.lwjgl:lwjgl-assimp" implementation "org.lwjgl:lwjgl-cuda" diff --git a/build/classes/java/main/net/halbear/Executable/Init.class b/build/classes/java/main/net/halbear/Executable/Init.class deleted file mode 100644 index 066cb20e0437e1bc4f03ec917f1ccd0c39923363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcma))QBM;=5Xb++6|Oxh&>}@e1ofrWgnc2tl<)#bG^ZFKO$blhb8{@|?Ir7-(U0Ye zO(gLH@SzAZEdfyyyocGHotfYLXLipoe*Ffpjh7K75QM1IF^MU{+^PPm)j+#c?e$Mh zQV^y#th2=?A!v7cA*zIRX9{(q2YsWxIyByE>(<|^9hX{XwsLRO2R>1syv?-#zF)e+ zW~PdWP`l0!Q75eZA81!+BW#3e1Q9~airP8CZacowdr)}m(r$b&GtN_+D1nZ4-A+%K z%{t~~0)a1Ghy}vZpP-#@CMgTu9~kwHr$MM}<(~~@qatxe;3Jzd<2fGkOObB^ByWXni#^3F@jCfx2>LM!FS3=e*hg&Z;{-g$6ZUFY z!c#tx;(Z1Qv~`B?s98J1^wAIxhM0+8|3u@4HiLk(s%UWa0-_PMHLk=mo^hh^YMM4j~+h8oigit(HS|#U%e6!Ve zQ6hL+Cf-OyffUB;Nn?c4hu7YP9x5$6v5{U^O(&6f^6sP_NJBVj`b%s4c&Ne*Ci diff --git a/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Display/VulkanInstance.class b/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Display/VulkanInstance.class deleted file mode 100644 index 3f2629d733154d95f39f1354c7a55d3ca1883423..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1426 zcmbVMOH&g;5dOvl7Q%*L5Cug9L`Wd8q9{TD<*9)XC=>U_I z_2!v{sVTQxn?)6?^H_c#6R=cmsA7LW6e}*9ti|ZjYpix0cMH5tpPTSql%){LsQ}fE6FZQ)nv2VNOtk3g% z42_m{$q&>f4XFSAZIpqWnOgzIv{8e5h(wWzp`C`0f~Zs{3=7E7POn=f)VE8dob zl^4nQ$%bXv+FaQebEWNV;U+`4fi?vo}&7=e}WEDQnxN zX!G1O?L5Om>~gs0qxqM+DuUZ8?x2$)?B&Xi=vxrmykt^d`!6KqQWsq+?xCBiq2VDz+n=Rb866{3`pV|)dTLW&e4S0LWj04QNy$>u?;{nDrQZ;D zjG9wPnI|fqN+Q?gP1_R+h&HWfq{$Us`;c#$glrs>Dw3EYWV}$wmK?_wo+kXVHsU&odAmTX zNLnVTw7(_XoJ2&yrfnjh&Rs*UYf6>sk}cYU$Th6~0wBC~JOBUy diff --git a/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Display/Window.class b/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Display/Window.class deleted file mode 100644 index 0986f973872de4645eb4d0d63c039ba38ba08d08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4674 zcmcIo33n6M75>KC$YQ`o1c=Szp*5{+7O^EP3J@a8Sc(M3GNyJ&U?e@;gGV#UXk_Db zUy^i7my|Yv?knAB6N8NlZPPt%n(ljlOHbQ-X9i0K5kk-D;h;C~&E4;J?|tJ}{(bF- z0DACG8Fdm?SoT=Nm^w3NM8=HKsmS3}?};E9&?uuxfsBBJ)-&3q7BMt)EOIn^M&uj` zO%Ld%?i`R%AMP4zMi5J6C<>NhnS_WboXEIlWQAr&28C^Fy16SEiJN1(DPoo_B0YMk zXlT=s6S|qVrX&RO-a&7FMuIdF1nE?;93cq-HY!27Tva17?vc=5v1g!cI(k9G&*ntY z(JeE8RTA2cn_AWos$;2arLGzJ6GHVITY-Dot2PNM!>Nj#jAQHOShQ;>h&5O%W1WKa ztiG*AbcV{tgl1CY*fejGDHn^D?TCB;s)U0v%``1X9VPcvP0d+_qUPvqkw;Bdl^o45 zTqARaE=)(w+xn!i)o>!#)5ZS3LBSi*NmjCw!@}ve^@3(kr!8{GvfW@LneI&r-i$EC z%cmRC^TJA7c_E=Aoa{=~vR}_LK{SAF3G3pvZQ1IWa2yJNTJ+SY1y4^9o3Ta4Rs|7k zqrl%@nuNwFJ@1UWmL(VwJD6!FiS0NzX;Y6Zqi0BZI5tFc{VrXf)cD>YgZPrbHQ5ZUtRsIW6sXfZ-|R?AH!q8#ZF1&`pQ zg!P=VjBsv4Ea7B0SqrSUp-894=c zZem;S80VBVrspDu4J)e|C4%5kX81^qT^?011}X%%Br{W5F+qClNzLH=5=>>BdHqmH zTji2S>4afZ*g@zx$^a}VFkw;SEbwa=Mt6aYMKUQikHeNxQs8iS?yZy#rz~~Ml(_S(0+i3+)aA_}PUK$1k-K1jUV82bl+qplic2hh+ zr>FV{66r$&!-IVT@k2dK^G*ftVw(EF{tWNmqu{-~Z>{hQ#Ef)CjhYNfyp|dhA7BvN) z87VxY;3N1bwI(Xq40TdN^xL9DIyvPu(SrE6f@e7r0jh$b(zKalwsQ(T$%lHYwfX?fHFszck}?i;m$X)N4U%z*;8018Cy&JC4569jqJ(CeZGC>9 zcAwn=#5W5;_;5#7D?Kji$rAR2yYB2^jcy)gs0+s}F~2VFLe%2Qr1~yeh7q5n_Cz6H zRuayl{4FU}=Up+hLN>2;nqsPR8@2gxl4l}4O!>DgiEdgF^`&6OD%&~Ht8eO9H)w|ZITU5Hd?NcRH zRjF3JhXG;cg}rd@Hb{EY(u7|I@hiL{nI=;U z)w@@#uWvq+XSA2>QfJDtCd$R=tzfGCbH%$ofrHr0Je06eHnvt~D@io(3 z=|1YN^qE4dLM@WM1nBomfMg?pdOH0<_f^z)H_W1W9xWHJ^g31yhgM$2>X+uxeq-O^ z?KjM0V|w$;K2aARc5j};rde#~b=NF*&tq@sf%CtVRY;!*mf zun@*sY{JvnLKA8SO`Vk;%l^{(BUG!PT|~!XNdNj6!>q^ zX&ajULqBygf-=4hwEPSA$k@DhTRo9}hobJrAALkF5qZdSwdgJ7d7NdZ>RhKnZl?E8 z*7i~c_t6(()HQ@N$$9q-k?>t|#FHBFr8cs-OACUUT!#Hs%#91oFOdB=n5khB4>Rv3 z%Y7?6=7TkvU#!Wz{buF|YckK^at+PLUbso~Lp7PNV73OcaWiwgCiC1v8lI&>VxN1- z=jQWR!*QFzTW9c&8N8d|cMb1jM82QSkF^fX;lt-4chBKtyr07-XffvSsTn-iaQZTy ztKe}xB@LA14kQRwN%}NQ5sK2-PsoeoXq8pHekK?@4XEpAA$#cJcN$zKA7U6%F)Q(b-PEfKc6p0csK%g3Az9#0di9aFxFH#rl@ZB>(DyzTJdz*4NB| zAQcxXXbch_KwmcjoU9Vpya1$mLZkmX*|#zgJhX7XSbN diff --git a/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Input/KeyboardInput.class b/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Input/KeyboardInput.class deleted file mode 100644 index 7d39f21786b4bdae260cb93b9a35b53b3ce1b8c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2666 zcmbVOZBr9h6n<{r7Q!kL39a}}RRXAMm0E46twhmad}%{L?dvAFgoS07ZZ=Rl{nUS< z{nF`|mKncvrjBT5`U5)sN1f^Pxw|3Rw2aQkOm@#b_q;s!Ip^Hv&wpP00pJ?G)({ie z?|OB^-dL{NM%`ZAFm9A)7Sc!{sUf99Lyy3|Wpmv$Y}2V5cPq=X>Il|f#WCde|P<1JOVy(-H+*S4>(OUG}daT2FAjOxf? zj68M9T6BC_m!5#OZrV+GcTr#{R~!pj4hrA0$oF9ar!}0>aTW$Mbk{+kr|LRBOWF{~ z<|6)Ky|R% zFIlAf;_LM-DO+ewMAA}|$64#@%AVY8k$(zToRh`DDYDFss_9e%lqs|7TdqUYt8R@r z_LP0L`)zZr1uspf_TVO1m4_@eb>SKJQi{wf58aUd4wKUiMDlXGO~sB)I9m#xUhOL6 z$g8~s(q*^lRppEouzM?d=bTlo&8ueGb^V6#nQOPDzr+*n!=3&lDrw#+RUNmvNhhhAat~A&3 zk=7~u9-3ECeRljA z;^V)g_rWvtJ%!#8Gvh~}B0K&Ye=l$V*v8?7UxU~;_#8%x&p~1sKtD2EXL-L5;SAB- z|0O5_(z~&QmY=OKjtKCvrOQJV12AK_or2X+;vM??QhuP8*H> zTLh^e-o}aN7?0sGhO^1Uj~MJ|&&9CtGwyd3G<$@b+2mssI?4+%{D2ExYqfZecLjdJ zu#&qrpCiw>RAt(^AK|D9s%$fz4F(Qv)gj|h^c@L+A0kbMG0N2x$&)yS@A&!p1t)@o zUkNDQYE!t?qL2s1UEB-Gw}p==sYcks$CQ$RRHl@|9Ayph(Z4Y_LB>A8e8?N6Sio_> z(7_$v9wC`{5`RLc5Mo$|Q>^W1q@sguID=SV8WE(4Lu4r4Z>RXam10sc7D;hZu@YG) z<4-yoRi-WoL&13_*x08r!WKFQgP+d}5jc}=IFk`L3B*SFiRS?xwvIf_L#c*LGh23I z8y`ekIXvhk{>OGX5;@(DoW`g4jB(=loDpL90$=j2+OkI7S1|coQL(A9;b091{skvk BcEkVx diff --git a/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Input/MouseListener.class b/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Input/MouseListener.class deleted file mode 100644 index f269aaf5bae242e92d2bddae1db7f5436c394d9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3332 zcmb_eTUQ%Z6#fq60%Tg!a4BGEX-jRAR;H!2R*AI&rA-WNEeIAbb&?EWV3>)M2^X)` zU*L-m>Wgo__@HYQ>#A$%vo3#z|H8G@?@UHWAZ1}!A7;)zd-gtifBWpq{Qmc&UjR(t zvoM+jI&7z?nrll%Q!SbcYwGpvaE<8o_7U8DZ?_{ zD+0~&#B3OC0*B-|OZJMX&Qij5h8F_A-Ur&yiUabTg95?$jVX6_QF{wo8BwLb&|x|gi8|Z^G_M8m+aN_ ztH=6+f)_EmjkST`W3e`neGJwHlB2CGrbbfZqfJy5iNOu4`M2ZiI3Zepg`IGGqgy_O#2&n$k+XYaK>8ySq!U zATm6@nTu4eqQ$3%)C?%>#|s6>#7xCU54VBi3#s6)=RQ|iU}UI;gN0AcE!o-lZJOA zULyS0bcf^^;4~PsZMW!h3cu^}4 zW^H@9QW~uhn|2+;D%Ns*YgNUWjgtOkAFC$!)=ktn;+vJ_J#Dx;vrb7{9Bt#K#&J^) z<70tS`+^t7eSxEUi}KE^vA}U&LVyE_6IhN#QZYFPy_Ex*Ym=N{-pWzvtsHpX%HrlK zCrcQUd|&78M+DK#bw2qJ&B>q9dN&q{MIJ)gM7y_rh^|d^Zr=1m-tuL1cwc`W$| z&jLRoIVZ^>NuKw}i;}!N_k(Bq2H!)7@ZC=Tqx^X|#8DkXg47WGzJM-VMmNUMhnqxn z7XwIBx|?|D9Wr>8tE94+qVIxIw|oq$w+DjB2k8EuLQRn7LS%!}ULK=(bkIMBbF-mx z?@r}Y4V7O*i*NZi#!ebpr{&(rCQ|--m23M0q#|E@jj<|yRnnJ8pZpT46ywuPk?Pmf zg0EcV`ubPN^+;c~D%0-E@SBWnvj_GBeF8^W3nLmu5-QHHnV-d*jIP1m8qU>VS@#2R zhdM!szbGa!jTs+SZ9tEFN157y4%eKs9njYsDi7>bzSvNCc7Mv3cPmGmWIyuV{*$o? z(c4tA|0^8m3Ix7EIPfh3Uc&ZsSI-+r_6K+J#3-ii=R12&e*W720bmhJIizqzLs~}{x*7W3@(Z=Xm5vOHw%>60rtvC-m@0x^9eMOIborK$M0ce#%Q8h~ ztf=E=4g)x*;kb@Lm9lZb2pBZW5nMJK10>-|9j9=bArrVOfoIEghNp$j;k1**ELK|T zM`WgQaaP9=&XJ2c_v;I8jS{|dXcuM0IHF?|=cx?heUm#rL*=l1iHM(9-wG=*i?12@ zKIr}_YiG$46)dhXq$4Hr6}oB9nj2N&t@5fv+6+`&i#u!Fv(-K}rh~dodCqor)3!3y z7|SB4yR{eG;~OFn9+4d{v?*BFCS``fLVIbLt0HXGIaZBfn%E9_6HU6j`#~j?W5}(z zP0tdKY^Bw)s8e?u^QwxAuEkF4_szR*;0GRWMA`cp%rNLt^O|Av<*6O$*OTwY?HumF z)G(*xE@)niw6gS?GO#y<5oH^bF=VSd{0v)3!EE`#eJ70Q;A1Xpj_}7SuKTXpFcad% zO_H$0z}3x$SQNhH*^R*Ul8^<5`+m|8bG+G2lJx#pZ~m#7UY1gLA*Jv&JY*Pe<-A7@ z8WtFa_dZHxh!VyWO}rF!ZHnd=OCqqv02v?EYRt^Uu4s5nTHNA3~`O{0#7EU+_^( z#PB(C7Dif{*v9bx@F(JIc0|fx5?8{wkK$^~WQ2R5OKGuJ7F}@`jO0`xC1euZvmbC8 q*TPJvaGjpL6kl{BqWdr%+8AyjO*Obdb(+O}vgOF#1I*L+{`7Bi&FEJE diff --git a/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Logic/GameLogic.class b/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Logic/GameLogic.class deleted file mode 100644 index 7a25cb9a1af14f48a6b4bdbb48198b75c63563c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 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 EAJIBI0ssI2 diff --git a/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Main/GameCore.class b/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Main/GameCore.class deleted file mode 100644 index b37067c80b20a6a00945de875ae03f55a7a8a948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmbVK$xZ@65PiiqIkga75p#DgE;M;WUJ zG;RsT!&G;@n)hnydU<_%25^cs8!^N!B+^JCMVRi2d*OIOx1H-|SGpk~b)>Wkj|uU@ zX2Ze+VMoi*=?JeWMc~wB5D2CBD$bd1D=kZYAe~D_oC|Rmc@}KK?pRLMZ!0$9%k`wtgC4;ybEisp zs?S*t3*)7RH4hsv>wYM-D~p>ALRLn@c*h6_{}dx6%ept&mo)-a z*tzMoM94kbHGdGe@?4p*X5Jrc$1DLhVDWAcCV5ekeDZ#L?N3A=;D|VbS*Dw;`~1ZW`8zQe5%a^~h-h-oVV*5v o0r`={3DXn5Nz6wQ>xi4+4+(=UVkw%&@_4c3KZ~t!x)@g90AS{}UjP6A diff --git a/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.class b/build/classes/java/main/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.class deleted file mode 100644 index afbd8a09731c04ab32641f50c51da47521a56872..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3603 zcmbVO+gDsy8UJl&hQkbJfDpo^ngrThfTT{*;RH@NoHL#| z6U1w4TWeD_-g>cVy=&F3<Nji#!b&NEa&KOYS5Xn9JAl`%+x4PQe&PqZ+MH@lH*(R zCRq-7#=KcnP#IxZqoY>1CC07%T!@n6Z93|)T_HZh%OmcLl~*`2vZ=)2X6npsnzV); z3aL%W2CQPiHWpLoEoa(YNT2~t;*(~D9ql8lUdj2M<;D1Nb2ASqO*}4sWjB zdO6f?m%_14wF`|3{hD!#zTxCe4Xp|XHYE)rkjtBnnZRz`FGfAU$hF_IsvQ#v?8IJS zuus9bcLtkFT-CMg;dUJz=v1gNgOs{$y26RgnQi1V`upI$WJA_;rcEz_1LzXFQwlv> zuzN$vVagoVaReV?%6I|idrFy5nRGRd;kbqqIzB849ojSl{;MKbXc<<`0IH-kEca7LlJ zIO~?|>3-WSvgV0>EP)J$HGEXZ2u2mUwyL@9P8l}aMfHs7ucp9}_KvM4!I_XlS`>I# z$Cwx+%=+^Al4s->MeVGPoOmHoaBX|=lIi%x7<(j8d%9P=bY92DFsTsBIE51XV*3A0 zgyD{f%HAuz0q@Gbu4kVTNHlvw$CEHZ&7>7(4L@{TM&##pOpE-=M+?(LRQBDxX$obW zF`Ct3;Ub;vie@{)er37RcpaZD%QWWG^}K8An1`d#G;hqYKRbEDKX3W7grueTba7*Q zCev|uze}KiPipXV6s09@4;tcn0nDF*h_jtIZ7J!vBt5+;=;va|6Jy!TXkT`6{A_lx zZ$R#RO2?wy(X)f+1_rZ3*}l=ioFG1<t}&N_tvXnJt?I}yb_Zl;S{Bi2doPh zIGKle?6?b5t=ufaB2Scp>2kPaRd|LwCnms-!lrMra$XW7pw4HNsqByPpfKe6|qG^wUzjO z0zbeHHT+02{l^M>Ry}Dsm)tos6;ALl`G<_W?|O?0uddCT^2JcpS;LvO&ElRB*PSaB z(s!4}nv->e0+d0cO85}+1IHuQc8^xko)bOUl-n(qt zNL39#SJ?HxudjW#Ge!kMwXz-C)s&$33Z+Cp<(jC3L2NtLU`w7=R0V554(eP1#K(XvxNP` z9FUX!D|m1ThX~cl?mCWE;MalN=lI>nz6Wfh^cq67{ED{Q`NC;HH+JAG8u2Ka@Fm`A z4K>2^_%e6Y4KLs_^%dwv(p2!D1F&qtIj(|h7RlGqtw7+=GERyX%Xny2hk8l}S}6ZM z)X_Ul^pD8XL;A8jg|FbNW!|YW@0jrV6|Yu6j1kemt~JE5JH%hRtysk|LfZgU^)62J z?mk`99jocqYP#b!-PL5*vW$V(@Mq#qBpZ{v&CA`@&9Ua{e0Qu_lSONe%Mx#ny^FKU zICuG#t5^={9^n%BSm+usK7Sn(QFKl+meD5}!Dg)ikGTzaJfQr<^Dapb3OXrhN^3Ju z)ZXDy8*-S6qA^J&DYpS8DbiH+ZOrhV#$WOV=743mvcCrZZ7f{Frv-5hpIgnF$TckR zP_lr&e~LCYCVSt!Ro}UcFG?UHf&X5{Uczk*$Nlut0}RL>24OGLVjt6DKf}^aYzM!c zNO5Ew$3Z-V2QiE;Ji?O;IK=sOn7oeQ3X}aM9L3K#a^K?3U-Ff;!j!s!9^7P_{0=Aa zds6=qr|>6^-oKz1f93P&ee~mB7-S%aRD{nTjVUO}@Hn-3iAiz=U#C88_yfK{C@FC) z$2h8@_$JR-jH&|PA`~IbEqt4FG1~D@yi7FL&s`s1^4b+MT5{?)lI7l8FkSzt~1lnro@b-(-uF=mEgh;@T0_= zQ4rir0yp;@&VA-_`32nR7dG$Qy-1PB@03$Yel3p3*n*+S+eLwKQ#Dz6wC-Ci1D zi{Zq`lFxQJHD68T3*H ze^^W@x|LAQ`_)q>?L=gnm`+mULZ`wihkr@GoU0|nX?>}`)&?}&rYgvAULW|cM}~M@ ztZXiCl - - - - - - - - - - - - Gradle Configuration Cache - - - -
- -
- Loading... -
- - - - - - diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/EngineInstance.class.uniqueId8 b/build/tmp/compileJava/compileTransaction/stash-dir/EngineInstance.class.uniqueId8 deleted file mode 100644 index 15f175f8fddcc4940bfd9968ec7121aa0e64f306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2030 zcmbVNZBx@g5Pq%{(w0DZ^94mg1#JrwP!T2g#)~6b)DZ?}bjF!$dP5`SQj-+M|Ktaq z@nwb&{s4cJ<6aVI94iz)lnc$DuDP<=T(oPcv8Gr#4k$kh2@+1Hw^DufQuLO zXubmNuy*+khGa-Xwn!K3d40Pi+;v{65;1*6$Kuru?%L`c36p-srX**NcGI*h)DNq| zuQ=tG+~wQC7cPMf%_9^c5+E8$b$A!y|^VM$U)ipka~W z;^C@PhA?4F)1XUGzb0s0(WIrfJ~j1d*Fd8Wm+8wDI<2blO?$TR1FSIq4O(I18@j%b zD1lL0J4juvW3-NhsLO^K-zbmdr;m9+}UR zvmnyK_#Q6)&;E3j%|1yfOyGJDcPAzzBqKNj?TU-TvS^R8U__@fQbfj$yIL_$Vk*dV n8aHU~ruf1e5#EQJfsEk}l2n6RRHs=yAX$doJ;Vb2;|Ko$ruX9q diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/GameCore.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/GameCore.class.uniqueId0 deleted file mode 100644 index b37067c80b20a6a00945de875ae03f55a7a8a948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmbVK$xZ@65PiiqIkga75p#DgE;M;WUJ zG;RsT!&G;@n)hnydU<_%25^cs8!^N!B+^JCMVRi2d*OIOx1H-|SGpk~b)>Wkj|uU@ zX2Ze+VMoi*=?JeWMc~wB5D2CBD$bd1D=kZYAe~D_oC|Rmc@}KK?pRLMZ!0$9%k`wtgC4;ybEisp zs?S*t3*)7RH4hsv>wYM-D~p>ALRLn@c*h6_{}dx6%ept&mo)-a z*tzMoM94kbHGdGe@?4p*X5Jrc$1DLhVDWAcCV5ekeDZ#L?N3A=;D|VbS*Dw;`~1ZW`8zQe5%a^~h-h-oVV*5v o0r`={3DXn5Nz6wQ>xi4+4+(=UVkw%&@_4c3KZ~t!x)@g90AS{}UjP6A diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/GameLogic.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/GameLogic.class.uniqueId4 deleted file mode 100644 index 7a25cb9a1af14f48a6b4bdbb48198b75c63563c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmbVIyH3ME5S+`y216n~BQzWZ6)AbiQ6vfy`pso!E;`oM<;=%X@Bw@jV(m!O5zWr5 zw3^3$|9pM{xW_cdz~EXq**6Lsrf63jBYC-5*axY+@Le6*F6+uW`$X^Dvm7IXiyeKC z4J4I)-t5>VgWLrsX&Zy#?DEy1D8(mF!SC7NcD6jy=U`mQK9M+{cS_?@npPd={}owu zD%rZ(QqnBNOWj7tk3Q%!{p)qrRmu!BzrF_;Y0WV*CE5)qJ)WZI@vK9=Jl8qE}@e1ofrWgnc2tl<)#bG^ZFKO$blhb8{@|?Ir7-(U0Ye zO(gLH@SzAZEdfyyyocGHotfYLXLipoe*Ffpjh7K75QM1IF^MU{+^PPm)j+#c?e$Mh zQV^y#th2=?A!v7cA*zIRX9{(q2YsWxIyByE>(<|^9hX{XwsLRO2R>1syv?-#zF)e+ zW~PdWP`l0!Q75eZA81!+BW#3e1Q9~airP8CZacowdr)}m(r$b&GtN_+D1nZ4-A+%K z%{t~~0)a1Ghy}vZpP-#@CMgTu9~kwHr$MM}<(~~@qatxe;3Jzd<2fGkOObB^ByWXni#^3F@jCfx2>LM!FS3=e*hg&Z;{-g$6ZUFY z!c#tx;(Z1Qv~`B?s98J1^wAIxhM0+8|3u@4HiLk(s%UWa0-_PMHLk=mo^h+)y#FI-Fg&dJy&ZRn~j9%jxyd-gtifBWpq{QmdjUjU@= zSr9D(owidp>xq(X6%)5|i$>lR2qaC* zbgu}sMq@KUvutZaYRIZI!ETV$!ZwjI3F44a;x@LS@IeZ<2T0 zt`J0aoAps?*)NS9(9kO_wdbpjV^}UVB>SL-Lz2CxV3b_lWA%P5Y z2;7Tip9cA8OhMgpVdGV&Vmrhzu9r$VJ-?JDe1X#%&fu&-ue{kQ!`&t(a66jW<$=31 zJQ|_hgams|K!5fauUW3)G@=~V@H|EY4mO}{5EPi+31@?BdZ!RKND^xcE=sH~JY%dX z*=y<7i1o6D7cshtwTa*pu{M!?0@fyyqirmwmo!|#%dCV|J`M$%l0W!JZepm?NfHu$r}@< zx)GHK|25qqIR-cl#%$ZIxQKyUR%JQBvU4vPtr7e!O@siGQ zQwic@fs?y}7sLaBBRh-o&TFy2Fht((Dh)_6@#=5aL_B-9@8#~-5SdkVEcnhTH(oKVMTiuQZQaBenL z?%S$-s;Tm8*yCCLjj@wPR%y8}w2q{=Ugg^H5XsONUt_FBUzPMl(kH$|LW=R}p-Am( za^6#}aXtO38(D_6Z@-LPFg6A6z14OZE__ zcr(&UAl}bX+^n=(>K{`64k(WT8~z41{0-n;;%eoI?E2n`1xg2bVwX&^*ypv3>*@8A zQrT9^gnjDFUj9M!F+K;Cow)L(Yr{_0hMg|tAODAoKBScFTOZ*Qe2Tt*0ruPabpQYW diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/PrimaryRuntime.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/PrimaryRuntime.class.uniqueId1 deleted file mode 100644 index c059524871f98c98d6ec0052c015a3ec3e41042c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3619 zcmbVOTU1ZMhyZKG|~s%_JHtCxDeBn6sw*|mIit-kr@lP@k`e9#9Uyw&eNXA;1$gvu<={`da( zf4}YD{`-x$01V>iaa19sA*>^Us6yQZl&7QVl*{m&snxP;J9XLoF}OX*IG2(Hs$?+~7_1LWto8#p%XU@ti93R_OqJJ|ra-AlvVUI$` zwq(Ad=PY~HS&E|pd&MD53VT||)?JeGT+5zI2X44U$9wQz8nfgRDRgeH+Xf-j>o$eE zw$&>zC-7*-E_sHXH#M{<9NCuCmzK+$wi(Ah+%6W~p>VAA-Rapj700bODAb1(KKw4J zcPPu(vf|iQ9c^e=s4@LCx^A>W*Y?b|@)kYavEvNLn)a;e#&HClVsT2LX9pH*uGeM}SA=e+YY2{cJ3a2HN$=+g0i(dOv3QU9;}XIW)fzm`$3N~SRD(UF!?*YX9^ zu**fUwMRnC&j-+}p-)FY1~&DA+;Yh?7Zs{)!*(Y98fG^bl|mWPF^my~L}}hB7iI?v zPKgyx>;rLRFsk7m9b*`$-88%IX;B?gjruc zUv`cBvZ$TakrOY(i%y|1bkVfEQiL55sO|3+FP+ozK};(|GIp`dE|~s*vtU%}rvVS@ zc*vLMnk6xdOryQe_WB~DeVva#CXgsRqa%;mKw;^JS;GtbnGvzEU@qW2ePiHP>S z{kAETF@|nIM*$2{$PtD21bxeLr2E<)TbF4prt5jv(NV-l74|L~3vAMM-tf*@-aH}c zE*?GK*qX_--Q4%$D8bWE)^Sl<<8Hq(ZWh3_DvG#*9iuHD)3Gd#eXrlt#gd07vYGL| z?DXWB>`>pJ-1)eUPsklTJ9Kt%C_9|(8z0IE;!`>v6-3=Sad1VDpVsjiL53zLa+1K0 zOO>VKoEkj}BU|+B9p}!CxzRSI5FT)5>HXR zB=tRLoj=d#&;w=CUQM3s-;E5 zmI&2G@!dGShwp3nfn@rt3J2CbY1tQ@1v3>)@*w$#jlAc$%L*@S%$v%^K-3w-o-LTA z17nV}P%fr#E{zQ*n+PYDi{=*BAKY+1cxRGT)$mh=+y3`ec9Xy^>}UN{u|q`p@Ztz2R4-33f8`M4S|x8Df93nnU-@$5 z8U|Y>KF{wH+`R@3A+A&HYf$Z>6=?EFws)+cuKi6kOdnZ8;|iJy-#Xp?8k*n4K7U=q z{xuv}!C_*K$jRX~+_{3Igz98>4JWGbD_`!D{2pT8W5=d+olp`rsH3*K_}HmOH=#3Z zy!T@dp5m>RKqFkj7r3Kt_#&RBz5+eNyH)&gE>l!mk6m`?&Z%7P-Gq5I9Q+8eBD14d>TjY;ZC@eP_C zCk1g8kFBRq=qeuJp(F!C@L8JPnCyM^okaU8J}2=A`EI<-tN=40%!o&s(J|akcizD) zIl!zqNCzL{>0z|;mtvNmWS-y62{MWf+=n}H9-UYuW(h}`A;<7_4wjdh`@g^mT;T*> zK^NZQTkJQ?u-~Bvzh~C`0jKaMa``h(=k#~5cX{Zi|L;M5&iC4n^KyUKzWDvqPc&Q5C#J9LsQ_L&;|2BTeU7XO5 K@DuzD&Hn*McA(h+ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Render.class.uniqueId6 b/build/tmp/compileJava/compileTransaction/stash-dir/Render.class.uniqueId6 deleted file mode 100644 index 341ead1ff02210f09ddc6bb72c9d635a58bea683..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmah`%TB^T6g?LTML@vk-W{l+8;yym8`MNoHBrKTS|%{0OwCaIFIOfm`~W}7c!yRb z(S#aL`=w5`$DgUkNgFAw4ktnpdq=$vnxFYLd8Uipzj zg-^RIpa=&gRQa`=Henq#j<_9lGw3tD#tqTpuT(xw6 S25U>)wBY6)W!ziy!R>F-&49N6 diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Scene.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/Scene.class.uniqueId2 deleted file mode 100644 index 273be0f9b81f3b05620ee7f11fe31ec0fb7c2bce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcma)2O;5r=5Pefxsucw>@$L;YvN7?7dO9FYuG~!KB{Tih7P8Ew(;jchuv+Rj!g<3v^1E=WkGcI^svul-6% z-EZU%hZDqnPydK5!Y=!S(KScUN2i~l4^9H?vG>OZLbeDU&W`^@*vA1QmZOVa-Rh80 Gfc_sjW^By> diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Window.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/Window.class.uniqueId3 deleted file mode 100644 index 9ff3178e2a0d1980ff23e1631f41c3ba7af3db81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4735 zcmcIn`F|7F5&y2QmBoUMIBfz}Qj#9-q>n)FVaruW_cEB&;c*)8kti&n_+YMnyCRKe*s8(b|SeB|8J;_MFF`*eEW?CYW zrj^K1&B&WG68w3sRMgek_)tcIH0lR!s9-e$5`2s(K^r;yjLKLmp}hiTxNO*3LG+)_ ziK4BUh7ao{v>h?jF9&RBJYEl0&BD1S83EcPn@! zLKH7gF018*nKtu6LPsbWPSwJ%)@s+D(Uexz`SIXNVufl}tw(y)RIMkK79suq=Sf9ikP zA{wA-&nh^IHxp>hm^P;f^oh`|ja8Ltv?iJ2mRb;Fn zg5wglaK19azKO7eb(%&5f#?PE==IwzMnD&y4a z=SkWumqbb<0vp2eL&G6vUqOKZle%VsUppMS4Pq>_NwIkxmW+}Do5QoQQa7Bk$hCBm zi>rAdZi%H7m)PBD1v9MZyzLVu+cIa}O5(S(3ZCG)Udg(23=}kjDvg8vRt0b4=CHv@ z@i47EHZ+__9~eG1GBDhKppRwVq2Qe?Q$I44;rY82yocwl6`kS!!M^_C0B!X?1@Fg` zWU$~SH>Xkuu_r0b)M}}RkZ)AjiP3OXZF^0hk$zCYhwxzu0gtJ!4j->cr0|r2kK$w0m#A7Z)JAnNWQh{($tkDf%#Tkfc$y>OqbkUjW{n)Hol)>9UToC3 zD{y|#u%FK=ILm%2u6Oa_1L^(@gZzww&*F3B$uf|cNwciyW4c))sEwiIC}WcF1qENk zm%IbSb!V9*x0+Ex7<0~wmJ}V#gXO}QutxY;qDZ97oT_J4OXIn>*kDg;M#cr=LM1P*Ju;Wmg=&RY6d8}S{Tc#oraj{?51uXO7hW2gBkC#CDDaTq7LQHm}M&` z;u>drh0Bl~98QYrn@rQDT2_l`VNaU*QY)^uG~%bsw+B~g;`R|#8h5U-Un8Gomn!)uEYt=;tEPNHT5-Ex``;JX=(0(^sV zo^)E$vyN|@&XcaC&XYb>=(&=bC4CUk|Ca&Df)Dky`h%{^sPAf+NAn_D&SB+MtT`4~ zcNrUAT15M`d51f{a}it9+h6vC!o1kEeF59%v6G)Y^XOf~?!eyqMeGY4;Qy|!OZ4s% zdbc%`{l0k&&}5+b%sJZgDpJRIb{T{7ILxE2D>woy;@DB1E#kx+PM(FoVG-gyWU?nn zN%NGZ=Al1N4%Fi-^#3R}(EoZ0%~~|mxCI-@)pm5yXHFQK(M_K@Jv7@-0gU4=45AZ< zv6XI$cjE*?6u2->)AjvH?4Yx17o9&n_$Kbd1q$X1=*3sbde99RzJ{;Uj6#R=_y&cu z8&8q!wtvyStu5ze`bf;*S9mmq|G}IlO%i?;`qL!F!pJAE5Qat=R>9<63-}~G^aXr+ z4$m~4yohHieB44w0}{lzB(_nRMvx{Z4PqY-p&vt4sN!BGm^%%q>u4c7mzVHuqgBQy zRaoHy&QzI@mXb+#FE1)%^kl_$r-oK>@zh_$$@5sj<@P0u*Gt90`!#a}X^V3ez9SY)Nh0&y0HQ~9a~*a zi76fycJ&3y7CWL)eeZHK6ud~I1{%La>vi}cenigzjebFEKgLh!_gm8WIsQ!Rd?)=2 J{)T^`?Z4GkxD5aR diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index f19c87e1ba1d276a6a327e93b642c77bfd65d191..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110800 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 T!6;;A<|H!9OzRXBBl3R$X!mQ7 diff --git a/src/main/java/net/halbear/Executable/Init.java b/src/main/java/net/halbear/Executable/Init.java index dae817e..9fe7a37 100644 --- a/src/main/java/net/halbear/Executable/Init.java +++ b/src/main/java/net/halbear/Executable/Init.java @@ -2,10 +2,13 @@ package net.halbear.Executable; import net.halbear.Terrain4J.EngineCore.Main.GameCore; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import org.tinylog.Logger; public class Init { public static void main(String[] args){ + Logger.info("Launching Software"); var GameEngine = new PrimaryRuntime("Terrain4J", new GameCore()); GameEngine.run(); + Logger.info("Launched Engine"); } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/VulkanInstance.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/VulkanInstance.java index 7626cdf..243a39a 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/VulkanInstance.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/VulkanInstance.java @@ -4,7 +4,9 @@ import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; import org.lwjgl.PointerBuffer; import org.lwjgl.glfw.GLFWVulkan; import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.*; +import org.tinylog.Logger; import java.nio.ByteBuffer; import java.nio.IntBuffer; @@ -14,21 +16,28 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.logging.Logger; import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; -import static org.lwjgl.vulkan.EXTDebugUtils.vkCreateDebugUtilsMessengerEXT; -import static org.lwjgl.vulkan.EXTDebugUtils.vkDestroyDebugUtilsMessengerEXT; +import static org.lwjgl.vulkan.EXTDebugUtils.*; import static org.lwjgl.vulkan.VK10.*; import static org.lwjgl.vulkan.VK14.VK_API_VERSION_1_4; public class VulkanInstance { + public static final int MESSAGE_SEVERITY_BITMASK = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT; + public static final int MESSAGE_TYPE_BITMASK = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; + private static final String DBG_CALL_BACK_PREF = "VkDebugUtilsCallback, {}"; private static final String VALIDATION_LAYER = "VK_LAYER_KHRONOS_validation"; private static final String PORTABILITY_EXTENSION = "VK_KHR_portability_enumeration"; - private static VkInstance vkInstance; + private final VkInstance vkInstance; + private VkDebugUtilsMessengerCreateInfoEXT DebugUtils; + private long DebugHandle; public VulkanInstance(boolean validate){ + Logger.debug("Initialising Vulkan Instance"); try (MemoryStack MemStack = MemoryStack.stackPush()) { ByteBuffer appShortName = MemStack.UTF8("Terrain4J"); var appInfo = VkApplicationInfo.calloc(MemStack).sType$Default().pApplicationName(appShortName).applicationVersion(1).pEngineName(appShortName).engineVersion(3).apiVersion(VK_API_VERSION_1_4); @@ -40,12 +49,15 @@ public class VulkanInstance { boolean SupportsValidation = validate; if (validate && ValidationLayerCount == 0){ SupportsValidation = false; + Logger.warn("No Layers Found to Validate, continuing without validation"); } + Logger.debug("Validation:{}", SupportsValidation); //once its done the validation layers, transform it into a pointer (null terminated string to be exact) PointerBuffer RequiredLayers = null; if (SupportsValidation){ RequiredLayers = MemStack.mallocPointer(ValidationLayerCount); for(int i = 0; i < ValidationLayerCount; i++){ + Logger.debug("Using Validation Layer:{}", ValidationLayers.get(i)); RequiredLayers.put(i, MemStack.ASCII(ValidationLayers.get(i))); } } @@ -72,6 +84,11 @@ public class VulkanInstance { RequiredExtensions.put(ExtraExtensions.get(i)); } RequiredExtensions.flip(); + long extension = MemoryUtil.NULL; + if(SupportsValidation){ + DebugUtils = CreateDebugCallBack(); + extension = DebugUtils.address(); + } var InstanceInfo = VkInstanceCreateInfo.calloc(MemStack) .sType$Default() .pApplicationInfo(appInfo) @@ -83,6 +100,13 @@ public class VulkanInstance { PointerBuffer PointerInstance = MemStack.mallocPointer(1); vkCheck(vkCreateInstance(InstanceInfo,null,PointerInstance), "Error Creating Vulkan Instance"); vkInstance = new VkInstance(PointerInstance.get(0),InstanceInfo); + + DebugHandle = VK_NULL_HANDLE; + if(SupportsValidation){ + LongBuffer LongBuffer = MemStack.mallocLong(1); + vkCheck(vkCreateDebugUtilsMessengerEXT(vkInstance, DebugUtils, null, LongBuffer), "Error Creating Handle"); + DebugHandle = LongBuffer.get(0); + } } } private Set getSupportedInstanceExtensions(){ @@ -91,6 +115,7 @@ public class VulkanInstance { IntBuffer ExtensionsBuffer = MemStack.callocInt(1); vkEnumerateInstanceExtensionProperties((String)null,ExtensionsBuffer, null); int ExtensionsCount = ExtensionsBuffer.get(0); + Logger.debug("Instance Extension Count:[{}]", ExtensionsCount); var InstanceExtensionsProps = VkExtensionProperties.calloc(ExtensionsCount, MemStack); vkEnumerateInstanceExtensionProperties((String)null,ExtensionsBuffer, InstanceExtensionsProps); @@ -98,7 +123,8 @@ public class VulkanInstance { VkExtensionProperties Properties = InstanceExtensionsProps.get(i); String ExtensionName = Properties.extensionNameString(); InstanceExtensions.add(ExtensionName); - } + Logger.trace("Supported Instance Extension [{}]", ExtensionName); + } } return InstanceExtensions; } @@ -107,6 +133,7 @@ public class VulkanInstance { IntBuffer LayersArray = MemStack.callocInt(1); vkEnumerateInstanceLayerProperties(LayersArray, null); int Layers = LayersArray.get(0); + Logger.debug("Validation Layer Count:{}", Layers); var PropertiesBuffer = VkLayerProperties.calloc(Layers, MemStack); vkEnumerateInstanceLayerProperties(LayersArray, PropertiesBuffer); List SupportedLayers = new ArrayList<>(); @@ -114,6 +141,7 @@ public class VulkanInstance { VkLayerProperties properties = PropertiesBuffer.get(i); String LayerName = properties.layerNameString(); SupportedLayers.add(LayerName); + Logger.trace("Supported Layer [{}]", LayerName); } List LayersToUse = new ArrayList<>(); if (SupportedLayers.contains(VALIDATION_LAYER)) { @@ -123,10 +151,39 @@ public class VulkanInstance { } } public void cleanup() { + Logger.debug("Closing Vulkan instance"); + if(DebugHandle != VK_NULL_HANDLE){ + vkDestroyDebugUtilsMessengerEXT(vkInstance, DebugHandle, null); + } vkDestroyInstance(vkInstance, null); + if(DebugUtils != null){ + DebugUtils.pfnUserCallback().free(); + DebugUtils.free(); + } } public VkInstance getVkInstance() { return vkInstance; } + + private static VkDebugUtilsMessengerCreateInfoEXT CreateDebugCallBack(){ + return VkDebugUtilsMessengerCreateInfoEXT + .calloc() + .sType$Default() + .messageSeverity(MESSAGE_SEVERITY_BITMASK) + .messageType(MESSAGE_TYPE_BITMASK) + .pfnUserCallback((messageSeverity, messageTypes, pCallbackData,pUserData) -> { + VkDebugUtilsMessengerCallbackDataEXT callBackData = VkDebugUtilsMessengerCallbackDataEXT.create(pCallbackData); + if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) != 0) { + Logger.info(DBG_CALL_BACK_PREF, callBackData.pMessageString()); + } else if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) != 0) { + Logger.warn(DBG_CALL_BACK_PREF, callBackData.pMessageString()); + } else if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) != 0) { + Logger.error(DBG_CALL_BACK_PREF, callBackData.pMessageString()); + } else { + Logger.debug(DBG_CALL_BACK_PREF, callBackData.pMessageString()); + } + return VK_FALSE; + }); + } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java index 4cdd583..1a69acf 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java @@ -2,7 +2,7 @@ package net.halbear.Terrain4J.EngineCore.Display; import net.halbear.Terrain4J.EngineCore.Input.KeyboardInput; import net.halbear.Terrain4J.EngineCore.Input.MouseListener; -import net.halbear.Terrain4J.EngineCore.Logic.Globals; +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import org.lwjgl.glfw.GLFWVidMode; import org.lwjgl.system.MemoryUtil; @@ -48,7 +48,7 @@ public class Window { }); glfwMakeContextCurrent(handle); - if (Globals.VSYNC) glfwSwapInterval(1); + if (EngineConfig.VSYNC) glfwSwapInterval(1); else glfwSwapInterval(0); mouseInput = new MouseListener(handle); } @@ -69,22 +69,22 @@ public class Window { return mouseInput; } public void pollEvents() { - if (displayFPS) glfwSetWindowTitle(handle, "Terrain 4J Engine - FPS: " + Globals.FrameRate_PRIMARYTHREAD + " TPS: " + Globals.TPS + " RenderFPS: " + Globals.FrameRate_RENDER + " VSYNC: " + Globals.VSYNC); + if (displayFPS) glfwSetWindowTitle(handle, "Terrain 4J Engine - FPS: " + EngineConfig.FrameRate_PRIMARYTHREAD + " TPS: " + EngineConfig.TPS + " RenderFPS: " + EngineConfig.FrameRate_RENDER + " VSYNC: " + EngineConfig.VSYNC); if (keyboardInput.keySinglePress(GLFW_KEY_V)) { SetVsync(); } keyboardInput.input(); mouseInput.input(); - Globals.RENDERFRAMES++; + EngineConfig.RENDERFRAMES++; } public void SetVsync(){ - if (Globals.VSYNC) { + if (EngineConfig.VSYNC) { glfwSwapInterval(0); - Globals.VSYNC = false; + EngineConfig.VSYNC = false; } else { glfwSwapInterval(1); - Globals.VSYNC = true; + EngineConfig.VSYNC = true; } } public void setShouldClose() { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Globals.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Globals.java deleted file mode 100644 index 7963beb..0000000 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Globals.java +++ /dev/null @@ -1,95 +0,0 @@ -package net.halbear.Terrain4J.EngineCore.Logic; - -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Properties; -import java.util.logging.Logger; - -public class Globals { - private static final long DEFAULT_ACCURACY = 0; - private static final int DEFAULT_TICKRATE = 60; - private static final int DEFAULT_WIDTH = 640; - private static final int DEFAULT_HEIGHT = 480; - private static final String FILENAME = "terrain4j.properties"; - private static Globals instance; - private long accuracy; - private int TickRate; - private int Width; - private int Height; - public static int FrameRate_PRIMARYTHREAD =0; - public static int TPS =0; - public static int FrameRate_MAINENGINETHREAD =0; - public static int FrameRate_RENDER =0; - public static int RENDERFRAMES =0; - public static boolean VSYNC = false; - private boolean vkValidated; - - - private Globals() { - var EngineConfig = new Properties(); - Path path = Paths.get(""); - InputStream stream = Globals.class.getResourceAsStream(path.toAbsolutePath().toString() + "/" + FILENAME); - boolean SuccessfulLoad = false; - if (stream != null) { - try { - EngineConfig.load(stream); - SuccessfulLoad = true; - } catch (IOException excp) { - System.out.println(excp.getMessage()); - } - } - if (SuccessfulLoad){ - accuracy = Long.parseLong(EngineConfig.getOrDefault("frame_accuracy", DEFAULT_ACCURACY).toString()); - TickRate = Integer.parseInt(EngineConfig.getOrDefault("main_tick_rate", DEFAULT_TICKRATE).toString()); - Width = Integer.parseInt(EngineConfig.getOrDefault("display_width", DEFAULT_TICKRATE).toString()); - Height = Integer.parseInt(EngineConfig.getOrDefault("display_height", DEFAULT_TICKRATE).toString()); - VSYNC = Boolean.parseBoolean(EngineConfig.getOrDefault("vsync", false).toString()); - try { - assert stream != null; - stream.close(); - } catch(IOException excp) { - System.out.println(excp.getMessage()); - } - } else{ - try { - EngineConfig.setProperty("frame_accuracy", "0"); - EngineConfig.setProperty("main_tick_rate", "60"); - EngineConfig.setProperty("display_width", "640"); - EngineConfig.setProperty("display_height", "480"); - EngineConfig.setProperty("vsync", "false"); - EngineConfig.store(new FileWriter(path.toAbsolutePath().toString() + "/" + FILENAME), "created new properties file"); - } catch (IOException excp2) { - System.out.println(excp2.getMessage()); - } - accuracy = DEFAULT_ACCURACY; - TickRate = DEFAULT_TICKRATE; - } - vkValidated = Boolean.parseBoolean(EngineConfig.getOrDefault("vkValidated", false).toString()); - } - - public boolean VkValidated(){ - return vkValidated; - } - - public static synchronized Globals getInstance() { - if (instance == null) { - instance = new Globals(); - } - return instance; - } - public int getWidth(){ - return Width; - } - public int getHeight(){ - return Height; - } - public long getAccuracy() { - return accuracy; - } - public int getTickRate() { - return TickRate; - } -} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/VulkanContext.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/VulkanContext.java index 4708154..e0d4f1c 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/VulkanContext.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/VulkanContext.java @@ -5,7 +5,7 @@ import net.halbear.Terrain4J.EngineCore.Display.VulkanInstance; public class VulkanContext { private final VulkanInstance Instance; public VulkanContext(){ - var EngineGlobals = Globals.getInstance(); + var EngineGlobals = EngineConfig.getInstance(); Instance = new VulkanInstance(EngineGlobals.VkValidated()); } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java index 0196c11..7580474 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java @@ -2,7 +2,7 @@ package net.halbear.Terrain4J.EngineCore.Main; import net.halbear.Terrain4J.EngineCore.Display.Render; import net.halbear.Terrain4J.EngineCore.Display.Window; -import net.halbear.Terrain4J.EngineCore.Logic.Globals; +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Logic.GameLogic; @@ -42,11 +42,11 @@ public class PrimaryRuntime { FrameDiff += tickDiff; TickDiff += tickDiff; SecondCounter += tickDiff; - if (FrameDiff >= Globals.getInstance().getAccuracy()){ + if (FrameDiff >= EngineConfig.getInstance().getAccuracy()){ window.pollEvents(); gameLogic.Input(engineInstance, (now - InitialTime)/ 1000000); Frames++; - if (TickDiff/1000 >= (double) 1000000 / (double)Globals.getInstance().getTickRate()) { + if (TickDiff/1000 >= (double) 1000000 / (double) EngineConfig.getInstance().getTickRate()) { TickFrames++; long nsTimeDiff = now - updateTime; gameLogic.Update(engineInstance, nsTimeDiff / 1000000); @@ -56,12 +56,12 @@ public class PrimaryRuntime { if (SecondCounter >= 1000000000){ SecondCounter = 0; System.out.println("FPS: " + Frames + " Ticks: " + TickFrames); - Globals.FrameRate_PRIMARYTHREAD = Frames; - Globals.FrameRate_RENDER = Globals.RENDERFRAMES; - Globals.TPS = TickFrames; + EngineConfig.FrameRate_PRIMARYTHREAD = Frames; + EngineConfig.FrameRate_RENDER = EngineConfig.RENDERFRAMES; + EngineConfig.TPS = TickFrames; Frames = 0; TickFrames = 0; - Globals.RENDERFRAMES = 0; + EngineConfig.RENDERFRAMES = 0; } render.render(engineInstance); FrameDiff = 0; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanUtils.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanUtils.java index e12c5ae..0f5df88 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanUtils.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanUtils.java @@ -21,9 +21,9 @@ public class VulkanUtils { return result; } - public static void vkCheck(int err, String errMsg) { - if (err != VK_SUCCESS) { - String errCode = switch (err) { + public static void vkCheck(int Error, String ErrorMessage) { + if (Error != VK_SUCCESS) { + String ErrorCode = switch (Error) { case VK_NOT_READY -> "VK_NOT_READY"; case VK_TIMEOUT -> "VK_TIMEOUT"; case VK_EVENT_SET -> "VK_EVENT_SET"; @@ -44,7 +44,7 @@ public class VulkanUtils { case VK_ERROR_UNKNOWN -> "VK_ERROR_UNKNOWN"; default -> "Not mapped"; }; - throw new RuntimeException(errMsg + ": " + errCode + " [" + err + "]"); + throw new RuntimeException(ErrorMessage + ": " + ErrorCode + " [" + Error + "]"); } } }