From fdeb0bae4ff289a2d1333a9b622ff6928ad4290d Mon Sep 17 00:00:00 2001 From: Ed_ Date: Fri, 18 Oct 2024 18:00:23 -0400 Subject: [PATCH] dik what this was but pushing ancient changes --- .gitignore | 11 ++++- .gitmodules | 3 ++ Bootstrap.Windows.bat | 46 ++++++++++++++++++ Editor/SENative.gdextension | 12 +++++ ...g.64.dll => SENative.windows.debug.64.dll} | Bin 795648 -> 795648 bytes Editor/bin/SENative.windows.debug.64.exp | Bin 0 -> 1020 bytes Editor/bin/SENative.windows.debug.64.lib | Bin 0 -> 2490 bytes Editor/bin/libgdexample.windows.debug.64.exp | Bin 1050 -> 0 bytes Editor/bin/libgdexample.windows.debug.64.lib | Bin 2586 -> 0 bytes Editor/gdexample.gdextension | 12 ----- Editor/main.tscn | 19 +++----- Editor/project.godot | 2 +- Engine/gd_nim | 1 + Source/Library.hpp | 8 +++ Source/SConstruct | 4 +- Source/gdexample.cpp | 4 +- Source/gdexample.h | 8 ++- Source/register_types.cpp | 20 ++++---- Source/register_types.h | 9 +++- build_engine.bat | 6 +++ build_engine.debug.bat | 5 ++ build_engine.release.bat | 5 ++ build_engine.release_debug.bat | 5 ++ build_project.bat | 15 ++++++ editor.bat | 4 +- game.debug.bat | 3 ++ game.release.bat | 3 ++ game.release_debug.bat | 3 ++ 28 files changed, 161 insertions(+), 47 deletions(-) create mode 100644 Bootstrap.Windows.bat create mode 100644 Editor/SENative.gdextension rename Editor/bin/{libgdexample.windows.debug.64.dll => SENative.windows.debug.64.dll} (82%) create mode 100644 Editor/bin/SENative.windows.debug.64.exp create mode 100644 Editor/bin/SENative.windows.debug.64.lib delete mode 100644 Editor/bin/libgdexample.windows.debug.64.exp delete mode 100644 Editor/bin/libgdexample.windows.debug.64.lib delete mode 100644 Editor/gdexample.gdextension create mode 160000 Engine/gd_nim create mode 100644 Source/Library.hpp create mode 100644 build_engine.bat create mode 100644 build_engine.debug.bat create mode 100644 build_engine.release.bat create mode 100644 build_engine.release_debug.bat create mode 100644 build_project.bat create mode 100644 game.debug.bat create mode 100644 game.release.bat create mode 100644 game.release_debug.bat diff --git a/.gitignore b/.gitignore index db0c40a..6fa7625 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,6 @@ mono_crash.*.json - # VSCode .vscode/* @@ -43,3 +42,13 @@ mono_crash.*.json # Fork Source/.sconsign.dblite .vs + + + + +# Compiled Object files + +*.slo +*.lo +*.o +*.obj \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 8c36aad..e4c2c66 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "Engine/gdnative_cpp"] path = Engine/gdnative_cpp url = https://github.com/godotengine/godot-cpp +[submodule "Engine/gd_nim"] + path = Engine/gd_nim + url = https://github.com/pragmagic/godot-nim diff --git a/Bootstrap.Windows.bat b/Bootstrap.Windows.bat new file mode 100644 index 0000000..706109e --- /dev/null +++ b/Bootstrap.Windows.bat @@ -0,0 +1,46 @@ +where "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" >nul 2>nul +if not ERRORLEVEL 0 ( + echo Visual Studio 2019 not found... Remove this error message if you do have it. + pause + exit +) + +where python >nul 2>nul +if not ERRORLEVEL 0 ( + echo Need python not found... Remove this error message if you have it. + pause + exit +) + +where scons >nul 2>nul +if not ERRORLEVEL 0 ( + python pip install scons +) + +git clone --recurse-submodules https:// + +cd LangStudies + +start build_engine.bat + +:tools_wait +timeout 1 +if not exist Engine\gd\bin\godot.windows.opt.tools.64.exe ( + goto :tools_wait +) +timeout 10 + +start Engine\gd\bin\godot.windows.opt.tools.64.exe -e App/project.godot +timeout 30 + +taskkill /f /im godot.windows.opt.tools.64.exe + +:opt_wait +timeout 1 +if not exist Engine\gd\bin\godot.windows.opt.64.exe ( + goto :opt_wait +) + +timeout 2 + +start /w build_project.bat diff --git a/Editor/SENative.gdextension b/Editor/SENative.gdextension new file mode 100644 index 0000000..b464d5d --- /dev/null +++ b/Editor/SENative.gdextension @@ -0,0 +1,12 @@ +[configuration] + +entry_symbol = "SENative_Init" + +[libraries] + +linux.64.debug = "bin/SENative.linux.debug.64.so" +linux.64.release = "bin/SENative.linux.release.64.so" +windows.64.debug = "bin/SENative.windows.debug.64.dll" +windows.64.release = "bin/SENative.windows.release.64.dll" +macos.debug = "bin/SENative.debug.framework" +macos.release = "bin/SENative.release.framework" \ No newline at end of file diff --git a/Editor/bin/libgdexample.windows.debug.64.dll b/Editor/bin/SENative.windows.debug.64.dll similarity index 82% rename from Editor/bin/libgdexample.windows.debug.64.dll rename to Editor/bin/SENative.windows.debug.64.dll index 4719347fd01177993487b2c00b20f6828abbe083..d79d8fab4fbe5ea418c9908f74bd5057935cd931 100644 GIT binary patch delta 37392 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%0A_{4cNHP zL!;h1DaYnYyXk)ASD3A)$+sR@e?3)w>%qkOmZ^y1kNo1vU26AIG*?RI%1@;pYkxuc z^a&{Muu;?y8FT2-OQ8R0D*FoG!Ck9G-Cl_{9uGd!K5o&QZFmDI=@gxNCHjec3t3)^ z_M+%Vl=@m!77M?p-fx7T@yDWgOA2~?vqjs!!CSqKwyB?vZGC07^eIovDaNGl=-gW| zyh3N`{f`fB>K1suan&UgmEDc^lrG=m6=EEBiPq=fJ*ARZZ`ylGdu2&GFo*8OdrC{C zUGWkJI9}<9JfMZ}drFfeMMw(zi3^?j`nC2nn7#m)XpJ8Yen-i_cu`Gh=i?O+?Xjx6 z`Gx!xeg~wA4EWMD0PlckTjOI+0sIPxUh>Dd^6?6YR>68FKEDET{iZq^&0P73g|BqX za|%dAz%Ch3!ZiTzfV_@SpCwOn;`1vY^CbV*3obpzD^^M2yrK5c0(%bISETI@J995y+{%>p z^&Au3*^3vq=16-p>|*<1_mTDl*wOp&VpVNve*pVqw%w#%4EAQ&#co_jeU5jmr`0dUuhq7R@26xpw{oiw2HsujM4#4nP0U&1!xxvP+4(Gw57#rL*r@Y-awa z!f2cOENlG|%4K&^yeoN?0c%^=|6u*ul_r!?x(NLZI>)5dH~xck^@g>6fO1(8(+`nX z5VMZ_7wd?1LXhHP(AT4dp-Pw1_5XvjslN4PsPe3YIM$o~uBWu~-QDLuSbz7icC3$i z7PWiQlmf3k~-Fn%+a9UmehMjIvowFRi)OK zSv@7Svzs*_Mv2tx?^Bm%N=^Mq>#SxJThRp{cFVua96l zM(d<3E1F69%0AJyi6jk)`VZ2EDEgwiazl>~ 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 z zgHnMd#tYq7NE!@m2H{gl9B?&6U7Nr%6EJdEl)=DapI~&E5A5{`=KmUuWElG)xzMwL zZc{M4(7k~jAbHRefpZ|Qpr-*ZK)i8JHy0Q(6{85<0vrtqhMo#M1_^_n11vrb3l@4X zupcB6dh)as%pZ(s7}-EQ>{#gDz>bhO=!wAfka*~sz}JvO=( zA-XvT2L1{$LC*u0ID{#H9t>;-@q-=*90Li4o(lXD5(YgJ82Bxw0J`P>YPjFnHtsqA zZuXa?ER*)!uG1REiq!Ut6UXQFMNJL@Upxc`EriD=$>-bz-UOauCpMC!Oja~a} znU7+7c{p!qo%ArUsPnflqBCAWq6^-!WCS|lAEBu`{1V2?ZTPmwjX*c}+nCT9zl?Ud z4e!g1K&Si;GTo}3>JLA~j768DUm1a}@je_YPr%2~)j9Y5+6c;RcrWsD8-5DQdX+!@ z8zayOKZ>(D=Pjp=K*xOOwE3U2Xj_~@p?kdX2_w*T9z&RN0el<-I_JLM8iB6yUTiA2 z;U&~{kB66yK*v0ZSZBO~?YdZQxqE-t9~u@3&tgP(`7#pi7qY@$jOvt^(9}I1e$ohZ z%#%oU#w(c61@Aax1UlhaOzAGaj;v)7p7J6OGv!7+i%z)_U&b+Ad)lYz=<1Z0a6l%L^ZQbN~OzAGaiA;xA`@?52 zqm!2S209jP{y9#RC*bFh>s9W5&0KYjx1pySd=O`Kn}2~-o%4B|)8V{V)hNpC`5s)- z89$F!IP3z%2iMG1$GitMo$^s^(p_FhU55*vlCf1M{A0wr!!KjIF8HR4?rI(L9*pRe zk0R0Ciyr^$7NZuSaHeSLgdfGY&iO^8y5O5$cUS9}KZmw%@*JjgmwhiWWV*)NFryp% zFgoQneAgQuS%*FUr(y|RNA!4j-3WBdN093dzl3F7@NNGz0^Q(yaaL#iELQa@f9Opk z&@mrEq1${4mvoOew*KW|aKAq;9>ai6`8aAi=l5JPf^r+a3-xjv{t33~4)6N6dqOAt z@&EXrRL8u6Sg&&SmNDqkcmCH6(5*zgh;@sCmqHXa9dYfr+82eouJe9u)hR!QSm*o> zw(DAd6mCaDH~32!Ew|?%qNzLlHpa{CqbO{PqE<-D6IeWq3Eky&v~{RN;SNmcgujYR zxA_!ibdNV)7ln?l^B9ill#ipUa~||Hq7%BtpF*x1*Vm))nnm>ix1JyJ{i5@Z=wE929@t#&4q0th!sBC=tNWLE4HMHF2CBDSIXd1~ z3ExGze>LNIOib_o|IzuEE8#o)eNo3bWjqTXI}KEC+&$u;?pG?|uefqS{PwjD;}vi3 zuO43dv)4M|Ut-j=an2X69bT|+H#+OV!RpQ{ANdpqD&gjX75g~8Fj&30Z)E!3!Rn1} z*n{Qj;PgqWD>tB#R>E$SSE0?Pad2^MuzKJ7`X&|+ZK-~(|JI3x_QKRcwlK5MSva;3 o>`3?RD4KdCd!#nEX>Mk&J9lEPF+V!roFAW07vKBg>RR9b08`B6IsgCw delta 37435 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 PObkv`r@nD{X|Crh%Umh2 diff --git a/Editor/bin/SENative.windows.debug.64.exp b/Editor/bin/SENative.windows.debug.64.exp new file mode 100644 index 0000000000000000000000000000000000000000..1726e22b73bef4c3d2f2ae67afcba29bed072a3e GIT binary patch literal 1020 zcma)5TWb?R6h6tS^;#McL{Qj=2r0_2xe!vR5DY0T+9<9R9|r4YXBtLlcfwwhwD0;8 zeDk;X?vsDTS6}qZ%x+Ar6%RSz`R3b`IdeI~K33r;+Se+;I#?r|1zAuGFnmI1=sybS zD#kwk2;<{?QuhlPWCh?2`l|I|5z#` zC3Gxedj4MdVhRsnyS9ca`KG5cwhs5;OAfFv!bGL&D03SxH{EA@qo?p09@ik8v-9iv zDo;WVe8G#HNfJcvj*vWc8;f3dlm4FeK%{vfT|dj2P_*SWx9C7cQI4m5Ob-V1l~OXL z`##cUhqSgx+iSMlW>32+&0cpqbb&5K{GRB7a0_}h-4ErC?fuE=0e zpZ!opQz96iLq+$R1N|c&WW@6}@Y1ZZ+S#@XS9@4jbRaz$1re@n2S+w1nM`Lm0Nn|t zVzYEdl*;^hf{&!XRO%xSt!ZA4&9O=gl0S0V@L{PSFUA5l(JrJ-X_FMZco2H> z-~Qgrt#o;}viZ;- z4Gp&YvxBVxdBfLm^lKxX}$XvXo|Y`kh`K}SJqYwC1r7`__&Z= zE3Fok;!?ic&|1~VzP7E__xB=d^;z>pL`p(Y^6R;rbqQXLT%)fjJz38$D~p*@2EtRx zZfgzNQQO+-MKs$qn%2rS?PXP|Ra?~>ECzk8TD43JG1EXt5j!#bB*ToGBwVI=!jJ7TLMKid!(EmD!Lcdd#?`$OET{cm{W3s?kl<$&ZJ~)P}y&nadBzh z#5gB9Pj9rp(b4skhBHp(Y)#F?xP&k><30(+7@2YB#H4B15Ts*`d&6+*`Tpq^rfUhV!Dw5 zE`Rml-H*)YdtD^ly{kiina5uwwqrlA#{T;L=bu@M?Vw9+$g?*70JdvbnzNqZ`uC3= N2AyAY%iB01{y#@F7aITo literal 0 HcmV?d00001 diff --git a/Editor/bin/libgdexample.windows.debug.64.exp b/Editor/bin/libgdexample.windows.debug.64.exp deleted file mode 100644 index 33847e5a07ce5e589e42898230510669093a53c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1050 zcma)5%Wl&^6upU|A4&O=d(TFD}61)>cIql(2yk&~Ia(~donA9Ygp ztoZ>Jd7K&x1 zX0&@)dH6Y$P4ckm8x^3y{*yAN(mYsyskoY>(o~97mP)(1u0b6HpM;dngJ>q0Q}CF| zA~h>;`aOpV0hIBWXFL%6oQ(xLV*<+jG5(wc$zrS$;93?u!0B)46+J<`t(lFuqFEDh zRkIf2ea(7^cQkvBsQ$NLfOuCk7xAHH+lcDCEIs}&WT&|OeW*2%!te!om&g+~%~Iko zqKOo{amZsvb}7$fLMA*WH}9LxXYdTR8>_gQA8JS)Yw#4l=Ku$Mn#fchWp?ZRroI1q z^aj4dP6MU|{rB9y%#$g@qhn=Gm;{l%#|2C6)_l<4B!7oJ$baHy{}g?%|7;fWR6Af_|#Do!Xp?ols}f-&~KJs$-TE^rT9 zCMOAJXV?H`ib^qA${dwayiM@!co#}@XejNM*N^g1+4<025w2Y6oWKy*F<@-fwa}iNXi+Z2Zp67%2mm+(_~L+n2N?5`I>GBU^;E~VSXGqN;!-x3SLW|7-^rzx z^4XkX8mnuX{#Y$lOg+45Y-r`pT3FLp8*Aa&I20wbl1|&F;d$SA)~x)!mCS-NKbN1Q zb&OI);oGo1t7`R$Vr&?7I2tW~Hg2e<@l;n#{gH0MX0ZG;-8SH0a*MDOJwkYtAddTh z9Y5e5111RXZK_-2ZRp{F7o!+~pSM1W_{6a88Dt++djRMFizEIvJYC**;iXV`FC%z6 zY-nm-osNm23nc7Q{lg7J5XgwOxZf-{;}QuMX+Pn|>@q?vN>t3S)TJ^tFzm}XA0+DG zYuleVh)L`=&Mg|nYPnW^P!G-Iu7uL5%mN?p>dunJj>js9s7wk{OME72;NFmn z+HH6|2M3+&&;mq$Rs}pV&<<@~SlU2XyK|p7^Px#N^hq39nEentlG*A&w%uBd7tcsI z!4z{z?|@qd#*(qa*IH|O@#EFQ))xxF3eA~;T1UW4>|mfIh8P1s2!;2Ifo$DVV%9Ls zn55(M{7T$nDM=#zt!#c<-23>OHt2_CpKMNW*xIkbzEF5CLl)UgzpGW)tMOAPyk~x= zg!wRdGk&)(c2rr$(_MZ-MhJUtwMw$Qs diff --git a/Editor/gdexample.gdextension b/Editor/gdexample.gdextension deleted file mode 100644 index 2ab4bbb..0000000 --- a/Editor/gdexample.gdextension +++ /dev/null @@ -1,12 +0,0 @@ -[configuration] - -entry_symbol = "example_library_init" - -[libraries] - -linux.64.debug = "bin/libgdexample.linux.debug.64.so" -linux.64.release = "bin/libgdexample.linux.release.64.so" -windows.64.debug = "bin/libgdexample.windows.debug.64.dll" -windows.64.release = "bin/libgdexample.windows.release.64.dll" -macos.debug = "bin/libgdexample.debug.framework" -macos.release = "bin/libgdexample.release.framework" \ No newline at end of file diff --git a/Editor/main.tscn b/Editor/main.tscn index 7e0a0a6..0a7a661 100644 --- a/Editor/main.tscn +++ b/Editor/main.tscn @@ -1,14 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://bqqewt05ne1ad"] +[gd_scene format=3 uid="uid://d3u3lj2du4mgd"] -[ext_resource type="Texture2D" uid="uid://cnv7sgufjc3fk" path="res://icon.png" id="1_tqon5"] - -[node name="main" type="Node"] - -[node name="GDExample" type="GDExample" parent="."] -position = Vector2(7.83596, 18.1283) -texture = ExtResource( "1_tqon5" ) - -[node name="Sprite2D" type="Sprite2D" parent="."] -modulate = Color(1, 0.309804, 0.580392, 1) -position = Vector2(214, 2) -texture = ExtResource( "1_tqon5" ) +[node name="Control" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1024.0 +offset_bottom = -600.0 diff --git a/Editor/project.godot b/Editor/project.godot index a63a06a..1d98669 100644 --- a/Editor/project.godot +++ b/Editor/project.godot @@ -17,4 +17,4 @@ config/features=PackedStringArray("4.0", "Vulkan Clustered") [native_extensions] -paths=["res://../Source/gdexample.gdextension"] +paths=["res://SENative.gdextension"] diff --git a/Engine/gd_nim b/Engine/gd_nim new file mode 160000 index 0000000..107f30a --- /dev/null +++ b/Engine/gd_nim @@ -0,0 +1 @@ +Subproject commit 107f30ac38cf2bfb2557e47b64d3f58bd8ad9169 diff --git a/Source/Library.hpp b/Source/Library.hpp new file mode 100644 index 0000000..906e1c2 --- /dev/null +++ b/Source/Library.hpp @@ -0,0 +1,8 @@ +#pragma once + + +namespace SE { + + + +} \ No newline at end of file diff --git a/Source/SConstruct b/Source/SConstruct index bf6fcf1..40d91ae 100644 --- a/Source/SConstruct +++ b/Source/SConstruct @@ -21,14 +21,14 @@ sources = Glob("./*.cpp") if env["platform"] == "osx": library = env.SharedLibrary( - EditorDir + "/bin/libgdexample.{}.{}.framework/libgdexample.{}.{}".format( + EditorDir + "/bin/SENative.{}.{}.framework/SENative.{}.{}".format( env["platform"], env["target"], env["platform"], env["target"] ), source=sources, ) else: library = env.SharedLibrary( - EditorDir + "/bin/libgdexample.{}.{}.{}{}".format( + EditorDir + "/bin/SENative.{}.{}.{}{}".format( env["platform"], env["target"], env["arch_suffix"], env["SHLIBSUFFIX"] ), source=sources, diff --git a/Source/gdexample.cpp b/Source/gdexample.cpp index bac8a2b..6540b0a 100644 --- a/Source/gdexample.cpp +++ b/Source/gdexample.cpp @@ -1,7 +1,7 @@ #include "gdexample.h" -namespace godot { +namespace SE { #pragma region GodotRT @@ -37,4 +37,4 @@ GDExample::~GDExample() {} -} // godot \ No newline at end of file +} // SE \ No newline at end of file diff --git a/Source/gdexample.h b/Source/gdexample.h index d9a2cbc..d314f64 100644 --- a/Source/gdexample.h +++ b/Source/gdexample.h @@ -3,7 +3,10 @@ #include #include -namespace godot { +namespace SE { + +using namespace godot; + class GDExample : public Sprite2D { @@ -26,4 +29,5 @@ public: ~GDExample(); }; -} \ No newline at end of file + +} // SE \ No newline at end of file diff --git a/Source/register_types.cpp b/Source/register_types.cpp index a3f7c75..5082f86 100644 --- a/Source/register_types.cpp +++ b/Source/register_types.cpp @@ -3,18 +3,20 @@ #include "gdexample.h" -namespace godot { - -void register_types(ModuleInitializationLevel p_level) +void register_types(godot::ModuleInitializationLevel p_level) { + using namespace godot; + if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) return; - ClassDB::register_class(); + ClassDB::register_class(); } -void unregister_types(ModuleInitializationLevel p_level) +void unregister_types(godot::ModuleInitializationLevel p_level) { + using namespace godot; + if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) return; @@ -24,12 +26,14 @@ void unregister_types(ModuleInitializationLevel p_level) extern "C" { GDNativeBool GDN_EXPORT - example_library_init( + SENative_Init( GDNativeInterface const* p_interface, GDNativeExtensionClassLibraryPtr const p_library, GDNativeInitialization* r_initialization) { - godot::GDExtensionBinding::InitObject + using namespace godot; + + GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization); init_obj.register_initializer(register_types); init_obj.register_terminator(unregister_types); @@ -39,5 +43,3 @@ extern "C" } } -} // godot - diff --git a/Source/register_types.h b/Source/register_types.h index 59644c9..847144a 100644 --- a/Source/register_types.h +++ b/Source/register_types.h @@ -1,4 +1,9 @@ #pragma once -void register_types(); -void unregister_types(); +namespace godot +{ + enum ModuleInitializationLevel : int; +} + +void register_types(godot::ModuleInitializationLevel p_level); +void unregister_types(godot::ModuleInitializationLevel p_level); diff --git a/build_engine.bat b/build_engine.bat new file mode 100644 index 0000000..05365e4 --- /dev/null +++ b/build_engine.bat @@ -0,0 +1,6 @@ +start /w build_engine.debug.bat +start /w build_engine.release_debug.bat +start /w build_engine.release.bat + +exit + diff --git a/build_engine.debug.bat b/build_engine.debug.bat new file mode 100644 index 0000000..2872469 --- /dev/null +++ b/build_engine.debug.bat @@ -0,0 +1,5 @@ +cd Engine\gd\ + +scons -j%NUMBER_OF_PROCESSORS% platform=windows + +exit \ No newline at end of file diff --git a/build_engine.release.bat b/build_engine.release.bat new file mode 100644 index 0000000..a31c2f9 --- /dev/null +++ b/build_engine.release.bat @@ -0,0 +1,5 @@ +cd Engine\gd\ + +scons -j%NUMBER_OF_PROCESSORS% platform=windows tools=no target=release bits=64 + +exit \ No newline at end of file diff --git a/build_engine.release_debug.bat b/build_engine.release_debug.bat new file mode 100644 index 0000000..2f07817 --- /dev/null +++ b/build_engine.release_debug.bat @@ -0,0 +1,5 @@ +cd Engine\gd\ + +scons -j%NUMBER_OF_PROCESSORS% platform=windows tools=yes target=release_debug bits=64 + +exit \ No newline at end of file diff --git a/build_project.bat b/build_project.bat new file mode 100644 index 0000000..6ca98c3 --- /dev/null +++ b/build_project.bat @@ -0,0 +1,15 @@ +set YYYY=%date:~10,4% +set MM=%date:~4,2% +set DD=%date:~7,2% +set HH=%time:~0,2% +if %HH% lss 10 (set CUR_HH=0%time:~1,1%) +set NN=%time:~3,2% +set SS=%time:~6,2% +set MS=%time:~9,2% +set SUBFILENAME=%YYYY%%MM%%DD%_%HH%%NN%%SS% + +cd Builds +mkdir %SUBFILENAME% + +cd ..\Engine\gd\bin +godot.windows.opt.64.exe --export "Windows Desktop" "..\Builds\%SUBFILENAME%\LangStudies.exe" --path "..\..\..\App" \ No newline at end of file diff --git a/editor.bat b/editor.bat index 31f91cd..61a3a4f 100644 --- a/editor.bat +++ b/editor.bat @@ -1,5 +1,3 @@ -cd Engine\gd\bin\ +start Engine\gd\bin\godot.windows.opt.tools.64.exe -e App/project.godot -start godot.windows.opt.tools.64.exe -exit \ No newline at end of file diff --git a/game.debug.bat b/game.debug.bat new file mode 100644 index 0000000..12d1817 --- /dev/null +++ b/game.debug.bat @@ -0,0 +1,3 @@ +start Engine\gd\bin\godot.windows.tools.64.exe --path App/ + + diff --git a/game.release.bat b/game.release.bat new file mode 100644 index 0000000..62ba422 --- /dev/null +++ b/game.release.bat @@ -0,0 +1,3 @@ +start Engine\gd\bin\godot.windows.opt.64.exe --path App/ + + diff --git a/game.release_debug.bat b/game.release_debug.bat new file mode 100644 index 0000000..aceb4cb --- /dev/null +++ b/game.release_debug.bat @@ -0,0 +1,3 @@ +start Engine\gd\bin\godot.windows.opt.tools.64.exe --path App/ + +