From 9d1f4128f8102053155271f922df19b790d7a1d6 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sun, 26 Apr 2020 15:47:21 +0200 Subject: [PATCH] Removed ess_data as a dependency from the setup script, but added it into this repo and renamed it to module manager. --- SConstruct | 1 - game/addons/.gitignore | 6 +- game/addons/model_manager/LICENSE | 21 ++ game/addons/model_manager/README.md | 7 + game/addons/model_manager/icons/empty.png | Bin 0 -> 939 bytes .../model_manager/icons/empty.png.import | 34 ++ game/addons/model_manager/icons/gom.png | Bin 0 -> 1746 bytes .../addons/model_manager/icons/gom.png.import | 34 ++ game/addons/model_manager/icons/icon_add.png | Bin 0 -> 111 bytes .../model_manager/icons/icon_add.png.import | 34 ++ game/addons/model_manager/icons/icon_copy.png | Bin 0 -> 248 bytes .../model_manager/icons/icon_copy.png.import | 34 ++ .../model_manager/icons/icon_display-name.png | Bin 0 -> 200 bytes .../icons/icon_display-name.png.import | 34 ++ .../model_manager/icons/icon_duplicate.png | Bin 0 -> 167 bytes .../icons/icon_duplicate.png.import | 34 ++ game/addons/model_manager/icons/icon_edit.png | Bin 0 -> 346 bytes .../model_manager/icons/icon_edit.png.import | 34 ++ .../addons/model_manager/icons/icon_empty.png | Bin 0 -> 267 bytes .../model_manager/icons/icon_empty.png.import | 34 ++ game/addons/model_manager/icons/icon_load.png | Bin 0 -> 170 bytes .../model_manager/icons/icon_load.png.import | 34 ++ .../model_manager/icons/icon_move_down.png | Bin 0 -> 268 bytes .../icons/icon_move_down.png.import | 34 ++ .../model_manager/icons/icon_move_up.png | Bin 0 -> 269 bytes .../icons/icon_move_up.png.import | 34 ++ .../model_manager/icons/icon_multi_line.png | Bin 0 -> 140 bytes .../icons/icon_multi_line.png.import | 34 ++ .../model_manager/icons/icon_options.png | Bin 0 -> 392 bytes .../icons/icon_options.png.import | 34 ++ .../model_manager/icons/icon_reload_small.png | Bin 0 -> 409 bytes .../icons/icon_reload_small.png.import | 34 ++ .../model_manager/icons/icon_remove.png | Bin 0 -> 166 bytes .../icons/icon_remove.png.import | 34 ++ .../model_manager/icons/icon_rename.png | Bin 0 -> 160 bytes .../icons/icon_rename.png.import | 34 ++ game/addons/model_manager/icons/icon_save.png | Bin 0 -> 252 bytes .../model_manager/icons/icon_save.png.import | 34 ++ .../model_manager/icons/icon_script.png | Bin 0 -> 262 bytes .../icons/icon_script.png.import | 34 ++ .../model_manager/panels/CreateNamePopup.gd | 64 ++++ .../model_manager/panels/CreateNamePopup.tscn | 57 ++++ .../model_manager/panels/EntryButton.gd | 93 ++++++ .../model_manager/panels/FolderEntryButton.gd | 12 + .../panels/FolderEntryButton.tscn | 9 + .../model_manager/panels/HistoryEntry.gd | 39 +++ .../model_manager/panels/HistoryEntry.tscn | 11 + game/addons/model_manager/panels/MainPanel.gd | 89 ++++++ .../model_manager/panels/MainPanel.tscn | 44 +++ .../model_manager/panels/ResourcePanel.gd | 291 ++++++++++++++++++ .../model_manager/panels/ResourcePanel.tscn | 117 +++++++ .../model_manager/panels/ResourceRow.tscn | 46 +++ .../panels/ResourceRowMainButton.gd | 18 ++ game/addons/model_manager/plugin.cfg | 7 + game/addons/model_manager/plugin.gd | 36 +++ .../model_manager/previews/ControlPreview.gd | 14 + .../previews/ControlPreview.tscn | 21 ++ .../model_manager/previews/Node2DPreview.gd | 14 + .../model_manager/previews/Node2DPreview.tscn | 24 ++ .../model_manager/previews/SpatialPreview.gd | 14 + .../previews/SpatialPreview.tscn | 28 ++ .../model_manager/previews/TexturePreview.gd | 12 + .../previews/TexturePreview.tscn | 12 + game/project.godot | 134 +++++++- 64 files changed, 1848 insertions(+), 5 deletions(-) create mode 100644 game/addons/model_manager/LICENSE create mode 100644 game/addons/model_manager/README.md create mode 100644 game/addons/model_manager/icons/empty.png create mode 100644 game/addons/model_manager/icons/empty.png.import create mode 100644 game/addons/model_manager/icons/gom.png create mode 100644 game/addons/model_manager/icons/gom.png.import create mode 100644 game/addons/model_manager/icons/icon_add.png create mode 100644 game/addons/model_manager/icons/icon_add.png.import create mode 100644 game/addons/model_manager/icons/icon_copy.png create mode 100644 game/addons/model_manager/icons/icon_copy.png.import create mode 100644 game/addons/model_manager/icons/icon_display-name.png create mode 100644 game/addons/model_manager/icons/icon_display-name.png.import create mode 100644 game/addons/model_manager/icons/icon_duplicate.png create mode 100644 game/addons/model_manager/icons/icon_duplicate.png.import create mode 100644 game/addons/model_manager/icons/icon_edit.png create mode 100644 game/addons/model_manager/icons/icon_edit.png.import create mode 100644 game/addons/model_manager/icons/icon_empty.png create mode 100644 game/addons/model_manager/icons/icon_empty.png.import create mode 100644 game/addons/model_manager/icons/icon_load.png create mode 100644 game/addons/model_manager/icons/icon_load.png.import create mode 100644 game/addons/model_manager/icons/icon_move_down.png create mode 100644 game/addons/model_manager/icons/icon_move_down.png.import create mode 100644 game/addons/model_manager/icons/icon_move_up.png create mode 100644 game/addons/model_manager/icons/icon_move_up.png.import create mode 100644 game/addons/model_manager/icons/icon_multi_line.png create mode 100644 game/addons/model_manager/icons/icon_multi_line.png.import create mode 100644 game/addons/model_manager/icons/icon_options.png create mode 100644 game/addons/model_manager/icons/icon_options.png.import create mode 100644 game/addons/model_manager/icons/icon_reload_small.png create mode 100644 game/addons/model_manager/icons/icon_reload_small.png.import create mode 100644 game/addons/model_manager/icons/icon_remove.png create mode 100644 game/addons/model_manager/icons/icon_remove.png.import create mode 100644 game/addons/model_manager/icons/icon_rename.png create mode 100644 game/addons/model_manager/icons/icon_rename.png.import create mode 100644 game/addons/model_manager/icons/icon_save.png create mode 100644 game/addons/model_manager/icons/icon_save.png.import create mode 100644 game/addons/model_manager/icons/icon_script.png create mode 100644 game/addons/model_manager/icons/icon_script.png.import create mode 100644 game/addons/model_manager/panels/CreateNamePopup.gd create mode 100644 game/addons/model_manager/panels/CreateNamePopup.tscn create mode 100644 game/addons/model_manager/panels/EntryButton.gd create mode 100644 game/addons/model_manager/panels/FolderEntryButton.gd create mode 100644 game/addons/model_manager/panels/FolderEntryButton.tscn create mode 100644 game/addons/model_manager/panels/HistoryEntry.gd create mode 100644 game/addons/model_manager/panels/HistoryEntry.tscn create mode 100644 game/addons/model_manager/panels/MainPanel.gd create mode 100644 game/addons/model_manager/panels/MainPanel.tscn create mode 100644 game/addons/model_manager/panels/ResourcePanel.gd create mode 100644 game/addons/model_manager/panels/ResourcePanel.tscn create mode 100644 game/addons/model_manager/panels/ResourceRow.tscn create mode 100644 game/addons/model_manager/panels/ResourceRowMainButton.gd create mode 100644 game/addons/model_manager/plugin.cfg create mode 100644 game/addons/model_manager/plugin.gd create mode 100644 game/addons/model_manager/previews/ControlPreview.gd create mode 100644 game/addons/model_manager/previews/ControlPreview.tscn create mode 100644 game/addons/model_manager/previews/Node2DPreview.gd create mode 100644 game/addons/model_manager/previews/Node2DPreview.tscn create mode 100644 game/addons/model_manager/previews/SpatialPreview.gd create mode 100644 game/addons/model_manager/previews/SpatialPreview.tscn create mode 100644 game/addons/model_manager/previews/TexturePreview.gd create mode 100644 game/addons/model_manager/previews/TexturePreview.tscn diff --git a/SConstruct b/SConstruct index 848a4714..6fd17e6f 100644 --- a/SConstruct +++ b/SConstruct @@ -49,7 +49,6 @@ module_repositories = [ ] addon_repositories = [ - [ ['https://github.com/Relintai/ess_data.git', 'git@github.com:Relintai/ess_data.git' ], 'ess_data', '' ], ] third_party_addon_repositories = [ diff --git a/game/addons/.gitignore b/game/addons/.gitignore index 44f84133..1b4f8614 100644 --- a/game/addons/.gitignore +++ b/game/addons/.gitignore @@ -1,3 +1,3 @@ -*/* -ess_data -prop_tool \ No newline at end of file +* +!model_manager +!model_manager/** \ No newline at end of file diff --git a/game/addons/model_manager/LICENSE b/game/addons/model_manager/LICENSE new file mode 100644 index 00000000..386f030a --- /dev/null +++ b/game/addons/model_manager/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/game/addons/model_manager/README.md b/game/addons/model_manager/README.md new file mode 100644 index 00000000..025d3bb9 --- /dev/null +++ b/game/addons/model_manager/README.md @@ -0,0 +1,7 @@ +# ESS Data + +This is an addon for https://github.com/Relintai/entity_spell_system, to help with editing, and managing all game related the data in the project. + +Looks like this: + +![ess_data screenshot](screenshots/ess_data.png) diff --git a/game/addons/model_manager/icons/empty.png b/game/addons/model_manager/icons/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..25043861ab61e8f6932a1597b2fa58f68a990752 GIT binary patch literal 939 zcmaJ=O^ee&7>*VeS$4sbpddTUA}H7-leSqB8cWl(Zorh1EpEY!X)#S{$j*bg=Mj=i34VD+rxx@G_}^)dMXOV^HHOWmiN9$TE+rHCaXvfg~bH z5ZNo2QB|$Us&oX_4`k6|Z=~8rXB~^JG&rF&QUxJRQ$DTmBpwS$QIuRmlFAHGPUazX zvT~Rl777MV+}Mw(PePC@Izuv}8f2MXmJmc6*)Ulj6FV>=b0PupVqQ`Kw5qL8id_zNhNdj?%2OQAe+~5NgX!rJ}S&8KEP+ijbriT!Xl?0Ee{T zdRJU&D>t`75V6Pxj{TR|>%=4gtCCfJYc57-tKORHZO=vA$`x2LLf+WF8eMEL_vF)! zZP{XDd>k^j$IRBhp4wm7l{hesWXhFNCv+Jn`$=5fu;VdjpR%M9&iDnv%H zi{N|cSkYzWXQ1)?Mf0fdl5reNSqO)WS;CT8Gb{COmv zk_Aa+AsH$tDuW*_%19E?#khctzy>Xd3dkWu0BGgO3N@%@;HGs!bZ*`z;(%!glElFM z<5Vm!9ALpJ2=FKP;zcAf8K6=LWIul@mAnq1kjNAw34N$|vLEPA1t~P({e?rVslT1tQSm6>7H`1vaD>sboq- z1}gxwqCg0zA`Ber=|3UJm9w%6_4_oT2_tF+N+Ov+GKVw+ZR#rGf+qtcr%=LRj3hxLIiQy3>>OJkjca#o62I6NMt67!t^DRgJ^UXo5`dH2GKbbCW}QS&v4nW zC{+$AkQuJ{1D7=?*W3znC2E-ssbp!8n4^N_z;wuEo-^d&W}9TaAJ@4(Ljc& z&qUS2%`_VugKdIAN55iPgT2upXmY=ASg8L~)6DpOW$CT-y#;LmZ7hENUzVm6a2{4!DQW*et~~|0b&1q-j8D3Hk2U3SWAl|oA;Eq7(w7%H5^5_7 zb)0AKLJA`Sn;d1kQv@PxTw>0iA`rNK(#jB5hyk-4Tq06y2fg#$g(56>6!?M7b+YjZ z|9bgI6E3~&rj1U8Pm^>7sA^>+MWDoWE}2TxBCu#z2RwDME@kJ&F$y!Z85 zIYm_sWX+FXOgX!AY(4o^=dzCD^|iTn73ZukKVFh!pKz@sJa12;S8}JHOIPRRk?ad~ zS#%@dn0u%qJScvgma)1l>XE)p7`4<#Z<6#*aLf47o9ErDU3Q*uR9@71ih9w;I=}AX z{-vctm$8;GCMk3$sJc_pstMrTaUL%kt@`L@eL;^}U$*tk0b*gXb9qgCdCY_1*O{lb z7Ul(ImFRn#f&R69{LiGL80B{dq&$4CrT_7_4z32*QT&3yr|p1$lpwBVNaCnpa4o_$ zr>m>IF0a!4=0Nui$2$o>wvUHiKTUWXd6b@VZTqF3!erxw@ug+cu1&PDmb9dZUE*@= z;ifBo4?GJGg7~o4@17mbF|EWJ9m2N-HGacCL^nQ3v43vLCP%F~xWwh4ujHm&m$`71 zX%7s0j63^0pPUpfA9`(9ZA=>O*5&WNxU23$_S2G|PwXpr=f5%W#AE K>;`7S&c6Y$GObYn literal 0 HcmV?d00001 diff --git a/game/addons/model_manager/icons/gom.png.import b/game/addons/model_manager/icons/gom.png.import new file mode 100644 index 00000000..4444d73f --- /dev/null +++ b/game/addons/model_manager/icons/gom.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/gom.png-1b9f09573d23d00595c3177419881bd1.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/model_manager/icons/gom.png" +dest_files=[ "res://.import/gom.png-1b9f09573d23d00595c3177419881bd1.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/addons/model_manager/icons/icon_add.png b/game/addons/model_manager/icons/icon_add.png new file mode 100644 index 0000000000000000000000000000000000000000..297be1464c2abce00632c973439a617ee3366bdb GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`W}YsNAr`&K2@6y!K0G-1pPgUs z&++ALok8Aiya@>jDG3cNW|p%=MMNYt%NXMfX7Rm9VK~aba6C_F%1<@D+dvZ-JYD@< J);T3K0RUK(AnE`B literal 0 HcmV?d00001 diff --git a/game/addons/model_manager/icons/icon_add.png.import b/game/addons/model_manager/icons/icon_add.png.import new file mode 100644 index 00000000..3022204d --- /dev/null +++ b/game/addons/model_manager/icons/icon_add.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon_add.png-32631d56315601a131fd242aee7a3b79.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/model_manager/icons/icon_add.png" +dest_files=[ "res://.import/icon_add.png-32631d56315601a131fd242aee7a3b79.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/addons/model_manager/icons/icon_copy.png b/game/addons/model_manager/icons/icon_copy.png new file mode 100644 index 0000000000000000000000000000000000000000..d777f132d87ff6cfbf0497ea001a801267624df5 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^@JzX3_ zEP9ttbmTi^z{7I9qy5Hx2boi=AB62VxOxRkZTsKJ1q(a^MV*ws3FS_nnT~gVdk;>zwAeiO3b(|L=&QV@nj3)*XYh3Ob6Mw<&;$U0z+?mf literal 0 HcmV?d00001 diff --git a/game/addons/model_manager/icons/icon_copy.png.import b/game/addons/model_manager/icons/icon_copy.png.import new file mode 100644 index 00000000..4e7f3e4f --- /dev/null +++ b/game/addons/model_manager/icons/icon_copy.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon_copy.png-f4d65fb91114c70e50fb67c5c5bb5fb1.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/model_manager/icons/icon_copy.png" +dest_files=[ "res://.import/icon_copy.png-f4d65fb91114c70e50fb67c5c5bb5fb1.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/addons/model_manager/icons/icon_display-name.png b/game/addons/model_manager/icons/icon_display-name.png new file mode 100644 index 0000000000000000000000000000000000000000..7c4493395ef189a22396208d4cc4162cf859bb95 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_&o-U3d z7QK5Xo#s8PAmDO8;$8Dv<*qw>G*h%Wce0$EcCbb#)z9G3SskVd4aObSEOE{YM4UNp zf4a?okU?{)`GG2vvpJgb_NVXKSKej4vvRwkFMG-ku}#y?gk={uNyU89XWV->a=P}6 vnah~_-rrvR|4(yT!x9TFuUqq{F@IncRMoC2DOflU=nw`^S3j3^P6|i``PW7mOSW<3y zKtRF~HNPp0H)7a~CoC~Iz~;t#K#+UKA|B}mZ51`aMB_P0`T;x)MeB6tg)Y5%0%#9| Mr>mdKI;Vst0Gn(%zW@LL literal 0 HcmV?d00001 diff --git a/game/addons/model_manager/icons/icon_duplicate.png.import b/game/addons/model_manager/icons/icon_duplicate.png.import new file mode 100644 index 00000000..62276c1b --- /dev/null +++ b/game/addons/model_manager/icons/icon_duplicate.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon_duplicate.png-76ae8a34a4880e84a08bcdf68f9ea179.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/model_manager/icons/icon_duplicate.png" +dest_files=[ "res://.import/icon_duplicate.png-76ae8a34a4880e84a08bcdf68f9ea179.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/addons/model_manager/icons/icon_edit.png b/game/addons/model_manager/icons/icon_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..c114d2f84d99c530f47fec9a199afdfb86fecef9 GIT binary patch literal 346 zcmV-g0j2(lP)NeVk#i#2m?%#saRcO!n?4ELP-13i;v*`WCj`oPY)bT}NomSwr! zTcE0e_x=LdtE%e0D2lDM1=iY45%FOd9sw`FuJ?YLW!Ye*z&V!!Z`Ru5D2hH*^#FJR zE|Vmg$!~C;=VK9>03k2~#>SXiRSiVM11uG^;5whcjxpxF{^(r6IhS_86>#2!J120? zrK)<}0iPOUuG;krg1+#A;4ko8V6EK;9$N61s-DDge6tLOpChX3VMph)Rq$LOB1xaI so2k2Q0C%eT90b91G#Wjw1OH3D0d_HXv74Wf=g#o#;Oi1emML#IzPk1^=YzfT%O3B%WxLdb zu`ex6Y10}jv5BGui~(1--P)TU?;_TG>NVrL`cSEbKYuOv-*Keptj@$aVL&%Bc)I$z JtaD0e0sve*WHUKAa97EW-zCWk=rGL=Fl0)d@n8yzrtp!uPZxWM2no-e zKWY8$@;d)=y9eG!R=Y(`%Zt!nDz>jY?xXBKMthDI=OaR|PMrB!VY0w-jjl3(VGqsk z4CfgCaSO`sTEs8lWRdK{_P{Jzug5TRl1kYoC->Ov-p}ud9>}_qwPtJf+OM@5es+Og zHyLg)Wv~~WJ~MmcO=$)Oua!&=r_P8qBtO&Xd%W}NAAvwW7su&8XRxb2bPSRVG*}1p O41=eupUXO@geCxf5M?I- literal 0 HcmV?d00001 diff --git a/game/addons/model_manager/icons/icon_move_down.png.import b/game/addons/model_manager/icons/icon_move_down.png.import new file mode 100644 index 00000000..4f5d19fb --- /dev/null +++ b/game/addons/model_manager/icons/icon_move_down.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon_move_down.png-fa1ee547bba931c04bfdf9354d54a11d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/model_manager/icons/icon_move_down.png" +dest_files=[ "res://.import/icon_move_down.png-fa1ee547bba931c04bfdf9354d54a11d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/addons/model_manager/icons/icon_move_up.png b/game/addons/model_manager/icons/icon_move_up.png new file mode 100644 index 0000000000000000000000000000000000000000..684013dc4046f14021fb5ae2637be66c363e88b8 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_KJY5_^ zEPCHgwC8Iw5NWUPFVR+4FkCptLGQu2BM&UUsHn*uI>{?k_J}uTmtaN}+jBed4vt$A z|8weYSO49szh3u)_pWufx8?5snEK*oqoG>zvq>FHX>r<1Pfce%Hbdk9r^AiydS~_o zdCgsZGvU^TYiFVdQ&MBb@0MO5EjQ{`u literal 0 HcmV?d00001 diff --git a/game/addons/model_manager/icons/icon_move_up.png.import b/game/addons/model_manager/icons/icon_move_up.png.import new file mode 100644 index 00000000..43ca1f23 --- /dev/null +++ b/game/addons/model_manager/icons/icon_move_up.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon_move_up.png-894ca3a411a207ef4d2cb84fd5f45a82.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/model_manager/icons/icon_move_up.png" +dest_files=[ "res://.import/icon_move_up.png-894ca3a411a207ef4d2cb84fd5f45a82.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/addons/model_manager/icons/icon_multi_line.png b/game/addons/model_manager/icons/icon_multi_line.png new file mode 100644 index 0000000000000000000000000000000000000000..95a029cc6e52396d5f7f22d5a069bf94a78b1d2a GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_Ro-U3d z7QM*{3j_>|3=9lxDn2~0*JI`4;QWRUxX^PLB{`Q{6ZHb(6%?{J zLZr$e#|T|6>=`EG1eAQ}Mfb1%^{cBI_JrF-h)8hG2|$c742Q$7uDGnZQPr`CjMDb9 z&f?rv5*?}PxYI!*?g0ZHfK%W&(Mwh2_d+wefVEw0A^O0*%WxMh|Okmw_dOFl>M%8XK7|rGb`#6DyZrV*y?i! z<{^Z-OSM2*mS-`>H(JBhfoNtIRVV7;7~^3QjKGYa;i+u{^Tavl+(D;wbCgA7qN=8< mmRgL6obMdvHvamV_Qp4&vXm;#cB%LP0000o?b9VrCmJ|({`9MlJ6Zxhblma-i)>f^x)eyoVfL8!b z=iIGQsuIn?D2lpsh?#e#lyAAFo5^JI7(y5VXfpHZqLGL?nY}1L0DxMp_U^sE1OOpK zN91Ok0AQ_sSh63SbN89u5?brN*4hJD0f0D;KeX2UpFknR;+P_i<1+xG+1kE9+hJvQ`DHHM@5wSn=*z2Zbz=YTwY_xOf*U^8ayAto+?_62Nme`&#WOZHQNN^Pf#iQ=p!@*PDo_wTNB z`G26g{^Pyl5AQ7BI^nwYbGgeArf>X}tfq=2Kl>dri6zVXc(CVG@3_e_LMk7m4UT=t zJ9z2ra|@e8vmS(A-^#S0^Tpmsh6l^G{?k~xs3YckNx+deqC!fSj!5L*-o~@wB&X8Z z`p1zjOdDdFXEI;3Xp&WNH7I_u>)fp!vD7&&#U+PEYc=y(QCS3j3^P6dwi~%Kh4i<{p+ma-uXKi<*sR!WWJfO5a void: + _resource_type = resource_type + + +func about_to_show(): + _option_button.clear() + + if not ClassDB.class_exists(_resource_type): + return + + var arr : PoolStringArray = PoolStringArray() + arr.append(_resource_type) + arr.append_array(ClassDB.get_inheriters_from_class(_resource_type)) + + var gsc : Array = ProjectSettings.get("_global_script_classes") + + var l : int = arr.size() - 1 + + while (arr.size() != l): + l = arr.size() + + for i in range(gsc.size()): + var d : Dictionary = gsc[i] as Dictionary + + var found = false + for j in range(arr.size()): + if arr[j] == d["class"]: + found = true + break + + if found: + continue + + for j in range(arr.size()): + if arr[j] == d["base"]: + arr.append(d["class"]) + + for a in arr: + _option_button.add_item(a) + + +func _on_OK_pressed(): + emit_signal("ok_pressed", _line_edit.text, _option_button.get_item_text(_option_button.selected)) + hide() diff --git a/game/addons/model_manager/panels/CreateNamePopup.tscn b/game/addons/model_manager/panels/CreateNamePopup.tscn new file mode 100644 index 00000000..eee9999b --- /dev/null +++ b/game/addons/model_manager/panels/CreateNamePopup.tscn @@ -0,0 +1,57 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/model_manager/panels/CreateNamePopup.gd" type="Script" id=1] + +[node name="CreateNamePopup" type="ConfirmationDialog"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -245.5 +margin_top = -125.5 +margin_right = 245.5 +margin_bottom = 125.5 +window_title = "Create New Resource" +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +line_edit_path = NodePath("VBoxContainer/LineEdit") +option_button_path = NodePath("VBoxContainer/OptionButton") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 8.0 +margin_top = 8.0 +margin_right = 483.0 +margin_bottom = 215.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Label2" type="Label" parent="VBoxContainer"] +margin_right = 449.0 +margin_bottom = 25.0 +size_flags_horizontal = 3 +text = "Type" + +[node name="OptionButton" type="OptionButton" parent="VBoxContainer"] +margin_top = 33.0 +margin_right = 449.0 +margin_bottom = 70.0 +size_flags_horizontal = 3 + +[node name="Label" type="Label" parent="VBoxContainer"] +margin_top = 78.0 +margin_right = 449.0 +margin_bottom = 103.0 +size_flags_horizontal = 3 +text = "Name" + +[node name="LineEdit" type="LineEdit" parent="VBoxContainer"] +margin_top = 111.0 +margin_right = 449.0 +margin_bottom = 156.0 +size_flags_horizontal = 3 +caret_blink = true diff --git a/game/addons/model_manager/panels/EntryButton.gd b/game/addons/model_manager/panels/EntryButton.gd new file mode 100644 index 00000000..80913e35 --- /dev/null +++ b/game/addons/model_manager/panels/EntryButton.gd @@ -0,0 +1,93 @@ +tool +extends Control + +signal inspect_data +signal duplicate +signal delete + +export(PackedScene) var spatial_preview : PackedScene +export(PackedScene) var node2d_preview : PackedScene +export(PackedScene) var control_preview : PackedScene +export(PackedScene) var texture_preview : PackedScene + +export(NodePath) var main_button_path : NodePath + +var _main_button : Button + +var _preview : Node +var _data : Resource + +func _ready(): + _main_button = get_node(main_button_path) as Button + +func set_resource(data : Resource) -> void: + _data = data + + _main_button.set_resource(data) + + var name_text : String = "" + + if data.has_method("get_id"): + name_text += str(data.get_id()) + " - " + + if data.has_method("get_text_name"): + name_text += str(data.get_text_name()) + else: + if data.resource_name != "": + name_text += data.resource_name + else: + name_text += data.resource_path + + if data.has_method("get_rank"): + name_text += " - Rank " + str(data.get_rank()) + + if data is Texture: + _preview = texture_preview.instance() + add_child(_preview) + _preview.owner = self + move_child(_preview, 0) + + _preview.set_texture(data as Texture) + elif data is PackedScene: + var n : Node = data.instance() + + if _preview != null: + _preview.queue_free() + + if n is Spatial: + _preview = spatial_preview.instance() + add_child(_preview) + _preview.owner = self + move_child(_preview, 0) + + _preview.preview(n as Spatial) + elif n is Node2D: + _preview = node2d_preview.instance() + add_child(_preview) + _preview.owner = self + move_child(_preview, 0) + + _preview.preview(n as Node2D) + elif n is Control: + _preview = control_preview.instance() + add_child(_preview) + _preview.owner = self + move_child(_preview, 0) + + _preview.preview(n as Control) + else: + n.queue_free() + + _main_button.text = name_text + +func can_drop_data(position, data): + return false + +func inspect(): + emit_signal("inspect_data", _data) + +func duplicate_data(): + emit_signal("duplicate", _data) + +func delete(): + emit_signal("delete", _data) diff --git a/game/addons/model_manager/panels/FolderEntryButton.gd b/game/addons/model_manager/panels/FolderEntryButton.gd new file mode 100644 index 00000000..8fc59cbe --- /dev/null +++ b/game/addons/model_manager/panels/FolderEntryButton.gd @@ -0,0 +1,12 @@ +tool +extends Button + +export(int) var tab = 0 + +var _panel + +func _pressed(): + _panel.set_tab(tab) + +func set_main_panel(panel): + _panel = panel diff --git a/game/addons/model_manager/panels/FolderEntryButton.tscn b/game/addons/model_manager/panels/FolderEntryButton.tscn new file mode 100644 index 00000000..f1131987 --- /dev/null +++ b/game/addons/model_manager/panels/FolderEntryButton.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/model_manager/panels/FolderEntryButton.gd" type="Script" id=1] + +[node name="FolderEntryButton" type="Button"] +margin_right = 210.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +script = ExtResource( 1 ) diff --git a/game/addons/model_manager/panels/HistoryEntry.gd b/game/addons/model_manager/panels/HistoryEntry.gd new file mode 100644 index 00000000..f32b6e16 --- /dev/null +++ b/game/addons/model_manager/panels/HistoryEntry.gd @@ -0,0 +1,39 @@ +tool +extends Button + +signal history_entry_selected + +var data : Resource setget set_data#, get_data + +func _pressed() -> void: + emit_signal("history_entry_selected", data) + +func set_data(pdata: Resource) -> void: + data = pdata + + var s : String = "(" + data.get_class() + ") " + + if data.has_method("get_id"): + s += str(data.get_id()) + " - " + + if data.has_method("get_text_name"): + s += str(data.get_text_name()) + + if data.has_method("get_rank"): + s += " (R " + str(data.get_rank()) + ")" + + text = s + +func get_data() -> Resource: + return data + +func get_drag_data(position): + if data == null: + return null + + var d : Dictionary = Dictionary() + d["type"] = "resource" + d["resource"] = data + d["from"] = self + + return d diff --git a/game/addons/model_manager/panels/HistoryEntry.tscn b/game/addons/model_manager/panels/HistoryEntry.tscn new file mode 100644 index 00000000..abf5b5eb --- /dev/null +++ b/game/addons/model_manager/panels/HistoryEntry.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/model_manager/panels/HistoryEntry.gd" type="Script" id=1] + +[node name="HistoryEntry" type="Button"] +margin_right = 236.0 +margin_bottom = 37.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/addons/model_manager/panels/MainPanel.gd b/game/addons/model_manager/panels/MainPanel.gd new file mode 100644 index 00000000..d87da0f2 --- /dev/null +++ b/game/addons/model_manager/panels/MainPanel.gd @@ -0,0 +1,89 @@ +tool +extends Control + +signal inspect_data + +export(PackedScene) var resource_scene : PackedScene +export(PackedScene) var folder_entry_button_scene : PackedScene +export(String) var base_folder : String = "res://modules/" +export(NodePath) var main_container : NodePath +export(NodePath) var folder_entry_container_path : NodePath + + +var _main_container : Node +var _resource_scene : Node +var _folder_entry_container : Node + + +var _folders : Array = [ +] + +func _ready(): + var dir : Directory = Directory.new() + + + if dir.file_exists("res://ess_data.json"): + var file : File = File.new() + + if file.open("res://ess_data.json", File.READ) == OK: + var s : String = file.get_as_text() + + _folders = parse_json(s) + + file.close() +# else: +# var file : File = File.new() +# +# if file.open("res://ess_data.json", File.WRITE) == OK: +# file.store_string(to_json(_folders)) +# +# file.close() + + _main_container = get_node(main_container) + + _resource_scene = resource_scene.instance() + _main_container.add_child(_resource_scene) + _resource_scene.owner = _main_container + _resource_scene.connect("inspect_data", self, "inspect_data") + + _folder_entry_container = get_node(folder_entry_container_path) + + for ch in _folder_entry_container.get_children(): + ch.queue_free() + + var index = 0 + for f in _folders: + if f.has("header"): + var h : Label = Label.new() + + _folder_entry_container.add_child(h) + h.owner = _folder_entry_container + + h.text = f["header"] + + var fe : Node = folder_entry_button_scene.instance() + + _folder_entry_container.add_child(fe) + fe.owner = _folder_entry_container + + fe.text = f["name"] + fe.tab = index + + fe.set_main_panel(self) + + index += 1 + + set_tab(0) +# set_tab("test") + +func set_tab(tab_index : int) -> void: + hide_all() + + _resource_scene.show() + _resource_scene.set_resource_type(_folders[tab_index]["folder"], _folders[tab_index]["type"]) + +func hide_all() -> void: + _resource_scene.hide() + +func inspect_data(var data : Resource) -> void: + emit_signal("inspect_data", data) diff --git a/game/addons/model_manager/panels/MainPanel.tscn b/game/addons/model_manager/panels/MainPanel.tscn new file mode 100644 index 00000000..62094d6f --- /dev/null +++ b/game/addons/model_manager/panels/MainPanel.tscn @@ -0,0 +1,44 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://addons/model_manager/panels/MainPanel.gd" type="Script" id=1] +[ext_resource path="res://addons/model_manager/panels/FolderEntryButton.tscn" type="PackedScene" id=2] +[ext_resource path="res://addons/model_manager/panels/ResourcePanel.tscn" type="PackedScene" id=3] + +[node name="Panel" type="MarginContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +resource_scene = ExtResource( 3 ) +folder_entry_button_scene = ExtResource( 2 ) +base_folder = "res://data/" +main_container = NodePath("HSplitContainer/MarginContainer") +folder_entry_container_path = NodePath("HSplitContainer/ScrollContainer/VBoxContainer") + +[node name="HSplitContainer" type="HSplitContainer" parent="."] +margin_right = 1024.0 +margin_bottom = 600.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +split_offset = 210 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="ScrollContainer" type="ScrollContainer" parent="HSplitContainer"] +margin_right = 210.0 +margin_bottom = 600.0 +size_flags_vertical = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="HSplitContainer/ScrollContainer"] +margin_right = 210.0 +size_flags_horizontal = 3 + +[node name="MarginContainer" type="MarginContainer" parent="HSplitContainer"] +margin_left = 222.0 +margin_right = 1024.0 +margin_bottom = 600.0 diff --git a/game/addons/model_manager/panels/ResourcePanel.gd b/game/addons/model_manager/panels/ResourcePanel.gd new file mode 100644 index 00000000..9dd1e24b --- /dev/null +++ b/game/addons/model_manager/panels/ResourcePanel.gd @@ -0,0 +1,291 @@ +tool +extends Control + +signal inspect_data + +export(PackedScene) var resource_row_scene : PackedScene +export(PackedScene) var history_row_scene : PackedScene + +export(NodePath) var entry_container_path : NodePath + +export(NodePath) var name_popup_path : NodePath +export(NodePath) var create_popup_path : NodePath +export(NodePath) var delete_popup_path : NodePath + +export(NodePath) var history_container_path : NodePath + +var _filter_term : String + +var _entry_container : Node +var _name_popup : Node +var _create_popup : ConfirmationDialog +var _delete_popup : ConfirmationDialog + +var _history_container : Node + +var _folder : String +var _resource_type : String + +var _queue_deleted : Resource + +var _state : Dictionary +var _states : Dictionary + +func _ready(): + _history_container = get_node(history_container_path) + + _entry_container = get_node(entry_container_path) + _name_popup = get_node(name_popup_path) + _name_popup.connect("ok_pressed", self, "ok_pressed") + + _create_popup = get_node(create_popup_path) + _delete_popup = get_node(delete_popup_path) + +func set_resource_type(folder : String, resource_type : String) -> void: + if folder == _folder and _resource_type == resource_type: + return + + _states[_folder + "," + _resource_type] = _state + + if _states.has(folder + "," + resource_type): + _state = _states[folder + "," + resource_type] + else: + _state = Dictionary() + + _folder = folder + _resource_type = resource_type + +# _filter_term = "" + + _create_popup.set_resource_type(resource_type) + + refresh() + +func refresh() -> void: + for ch in _entry_container.get_children(): + ch.queue_free() + + var d : Directory = Directory.new() + + if d.open(_folder) == OK: + d.list_dir_begin() + var data_array : Array = Array() + + var file_name = d.get_next() + + while (file_name != ""): + if not d.current_is_dir(): + + if ResourceLoader.exists(_folder + file_name, _resource_type): + + var res = ResourceLoader.load(_folder + file_name, _resource_type) + + if _filter_term != "": + var ftext : String = "" + + if res.has_method("get_text_name"): + ftext = res.get_text_name() + + if ftext == "": + if res.resource_name != "": + ftext = res.resource_name + else: + ftext = res.resource_path + + ftext = ftext.to_lower() + + if ftext.find(_filter_term) == -1: + file_name = d.get_next() + continue + + var id : int = 0 + + if res.has_method("get_id"): + id = res.get_id() + + data_array.append({ + "id": id, + "resource": res + }) + + file_name = d.get_next() + + data_array.sort_custom(self, "sort_entries") + + for d in data_array: + + var resn : Node = resource_row_scene.instance() + + _entry_container.add_child(resn) + resn.owner = _entry_container + resn.set_resource(d["resource"]) + resn.connect("inspect_data", self, "inspect_data") + resn.connect("duplicate", self, "duplicate_data") + resn.connect("delete", self, "delete") + +func inspect_data(var data : Resource) -> void: + var found : bool = false + + for ch in _history_container.get_children(): + if ch.data == data: + found = true + + _history_container.move_child(ch, 0) + + break + + if not found: + var n : Node = history_row_scene.instance() + + _history_container.add_child(n) + _history_container.move_child(n, 0) + n.owner = _history_container + + n.data = data + n.connect("history_entry_selected", self, "inspect_data") + + if _history_container.get_child_count() > 20: + var ch : Node = _history_container.get_child(_history_container.get_child_count() - 1) + + ch.queue_free() + + emit_signal("inspect_data", data) + +func ok_pressed(res_name: String, pclass_name: String) -> void: + + var d : Directory = Directory.new() + + if d.open(_folder) == OK: + d.list_dir_begin() + + var file_name = d.get_next() + + var max_ind : int = 0 + + while (file_name != ""): + + if not d.current_is_dir(): + + var curr_ind : int = int(file_name.split("_")[0]) + + if curr_ind > max_ind: + max_ind = curr_ind + + file_name = d.get_next() + + max_ind += 1 + + var newfname : String = str(res_name) + newfname = newfname.replace(" ", "_") + newfname = newfname.to_lower() + newfname = str(max_ind) + "_" + newfname + ".tres" + + var res : Resource = null + + if ClassDB.class_exists(pclass_name) and ClassDB.can_instance(pclass_name): + res = ClassDB.instance(pclass_name) + else: + var gsc : Array = ProjectSettings.get("_global_script_classes") + + for i in range(gsc.size()): + var gsce : Dictionary = gsc[i] as Dictionary + + if gsce["class"] == pclass_name: + var script : Script = load(gsce["path"]) + + res = script.new() + + break + + if res == null: + print("ESSData: Error in creating resource type " + pclass_name) + return + + if res.has_method("set_id"): + res.set_id(max_ind) + + if res.has_method("set_text_name"): + res.set_text_name(str(res_name)) + + ResourceSaver.save(_folder + newfname, res) + + refresh() + +func duplicate_data(data): + if not data is Resource: + return + + var d : Directory = Directory.new() + + if d.open(_folder) == OK: + d.list_dir_begin() + + var file_name = d.get_next() + + var max_ind : int = 0 + + while (file_name != ""): + + if not d.current_is_dir(): + + var curr_ind : int = int(file_name.split("_")[0]) + + if curr_ind > max_ind: + max_ind = curr_ind + + file_name = d.get_next() + + max_ind += 1 + + var res_name : String = "" + + if data.has_method("get_text_name"): + res_name = data.get_text_name() + + var newfname : String = res_name + newfname = newfname.replace(" ", "_") + newfname = newfname.to_lower() + newfname = str(max_ind) + "_" + newfname + ".tres" + + var res : Resource = data.duplicate() + + if res.has_method("set_id"): + res.set_id(max_ind) + + if res.has_method("set_text_name"): + res.set_text_name(str(res_name)) + + ResourceSaver.save(_folder + newfname, res) + + refresh() + +func delete(data): + if data == null or data as Resource == null: + return + + _queue_deleted = data as Resource + + _delete_popup.popup_centered() + +func delete_confirm(): + if _queue_deleted == null: + return + + var d : Directory = Directory.new() + d.remove(_queue_deleted.resource_path) + + _queue_deleted = null + + refresh() + +func clear_history() -> void: + for ch in _history_container.get_children(): + ch.queue_free() + +func search(text : String) -> void: + _filter_term = text.to_lower() + + refresh() + +func sort_entries(a, b): + return a["id"] < b["id"] diff --git a/game/addons/model_manager/panels/ResourcePanel.tscn b/game/addons/model_manager/panels/ResourcePanel.tscn new file mode 100644 index 00000000..92f9ae17 --- /dev/null +++ b/game/addons/model_manager/panels/ResourcePanel.tscn @@ -0,0 +1,117 @@ +[gd_scene load_steps=8 format=2] + +[ext_resource path="res://addons/model_manager/panels/CreateNamePopup.tscn" type="PackedScene" id=1] +[ext_resource path="res://addons/model_manager/panels/ResourceRow.tscn" type="PackedScene" id=2] +[ext_resource path="res://addons/model_manager/panels/HistoryEntry.tscn" type="PackedScene" id=3] +[ext_resource path="res://addons/model_manager/icons/icon_add.png" type="Texture" id=4] +[ext_resource path="res://addons/model_manager/panels/ResourcePanel.gd" type="Script" id=5] +[ext_resource path="res://addons/model_manager/icons/icon_empty.png" type="Texture" id=6] +[ext_resource path="res://addons/model_manager/icons/icon_reload_small.png" type="Texture" id=7] + +[node name="Panel" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 5 ) +__meta__ = { +"_edit_use_anchors_": false +} +resource_row_scene = ExtResource( 2 ) +history_row_scene = ExtResource( 3 ) +entry_container_path = NodePath("ResourcePanel/VBoxContainer2/ScrollContainer2/VBoxContainer") +name_popup_path = NodePath("CreateNamePopup") +create_popup_path = NodePath("CreateNamePopup") +delete_popup_path = NodePath("DeletePopup") +history_container_path = NodePath("ResourcePanel/VBoxContainer/ScrollContainer/VBoxContainer") + +[node name="ResourcePanel" type="HSplitContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +split_offset = 500 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer2" type="VBoxContainer" parent="ResourcePanel"] +margin_right = 664.0 +margin_bottom = 600.0 + +[node name="LineEdit" type="LineEdit" parent="ResourcePanel/VBoxContainer2"] +margin_right = 664.0 +margin_bottom = 45.0 +right_icon = ExtResource( 6 ) +placeholder_text = "Filter" +caret_blink = true + +[node name="CreateButton" type="Button" parent="ResourcePanel/VBoxContainer2"] +margin_top = 53.0 +margin_right = 664.0 +margin_bottom = 90.0 +rect_min_size = Vector2( 100, 0 ) +text = "Create" +icon = ExtResource( 4 ) +expand_icon = true + +[node name="HSeparator" type="HSeparator" parent="ResourcePanel/VBoxContainer2"] +margin_top = 98.0 +margin_right = 664.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="ScrollContainer2" type="ScrollContainer" parent="ResourcePanel/VBoxContainer2"] +margin_top = 114.0 +margin_right = 664.0 +margin_bottom = 600.0 +size_flags_vertical = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="ResourcePanel/VBoxContainer2/ScrollContainer2"] +margin_right = 664.0 +size_flags_horizontal = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="ResourcePanel"] +margin_left = 688.0 +margin_right = 1024.0 +margin_bottom = 600.0 + +[node name="Button" type="Button" parent="ResourcePanel/VBoxContainer"] +margin_right = 336.0 +margin_bottom = 37.0 +size_flags_horizontal = 3 +text = "Clear History" +icon = ExtResource( 7 ) + +[node name="HSeparator" type="HSeparator" parent="ResourcePanel/VBoxContainer"] +margin_top = 45.0 +margin_right = 336.0 +margin_bottom = 53.0 +size_flags_horizontal = 3 + +[node name="ScrollContainer" type="ScrollContainer" parent="ResourcePanel/VBoxContainer"] +margin_top = 61.0 +margin_right = 336.0 +margin_bottom = 600.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="ResourcePanel/VBoxContainer/ScrollContainer"] +margin_right = 336.0 +size_flags_horizontal = 3 + +[node name="CreateNamePopup" parent="." instance=ExtResource( 1 )] + +[node name="DeletePopup" type="ConfirmationDialog" parent="."] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -139.0 +margin_top = -55.0 +margin_right = 139.0 +margin_bottom = 55.0 +dialog_text = "Delete?" +[connection signal="text_entered" from="ResourcePanel/VBoxContainer2/LineEdit" to="." method="search"] +[connection signal="pressed" from="ResourcePanel/VBoxContainer2/CreateButton" to="CreateNamePopup" method="popup"] +[connection signal="pressed" from="ResourcePanel/VBoxContainer/Button" to="." method="clear_history"] +[connection signal="confirmed" from="DeletePopup" to="." method="delete_confirm"] diff --git a/game/addons/model_manager/panels/ResourceRow.tscn b/game/addons/model_manager/panels/ResourceRow.tscn new file mode 100644 index 00000000..421e7d5a --- /dev/null +++ b/game/addons/model_manager/panels/ResourceRow.tscn @@ -0,0 +1,46 @@ +[gd_scene load_steps=9 format=2] + +[ext_resource path="res://addons/model_manager/previews/TexturePreview.tscn" type="PackedScene" id=1] +[ext_resource path="res://addons/model_manager/previews/ControlPreview.tscn" type="PackedScene" id=2] +[ext_resource path="res://addons/model_manager/previews/Node2DPreview.tscn" type="PackedScene" id=3] +[ext_resource path="res://addons/model_manager/previews/SpatialPreview.tscn" type="PackedScene" id=4] +[ext_resource path="res://addons/model_manager/panels/ResourceRowMainButton.gd" type="Script" id=5] +[ext_resource path="res://addons/model_manager/panels/EntryButton.gd" type="Script" id=6] +[ext_resource path="res://addons/model_manager/icons/icon_duplicate.png" type="Texture" id=7] +[ext_resource path="res://addons/model_manager/icons/icon_remove.png" type="Texture" id=8] + +[node name="ResourceRow" type="HBoxContainer"] +margin_right = 634.0 +margin_bottom = 37.0 +rect_min_size = Vector2( 100, 0 ) +size_flags_horizontal = 3 +script = ExtResource( 6 ) +__meta__ = { +"_edit_use_anchors_": false +} +spatial_preview = ExtResource( 4 ) +node2d_preview = ExtResource( 3 ) +control_preview = ExtResource( 2 ) +texture_preview = ExtResource( 1 ) +main_button_path = NodePath("ResourceRowMainButton") + +[node name="ResourceRowMainButton" type="Button" parent="."] +margin_right = 570.0 +margin_bottom = 37.0 +size_flags_horizontal = 3 +script = ExtResource( 5 ) + +[node name="Button2" type="Button" parent="."] +margin_left = 574.0 +margin_right = 602.0 +margin_bottom = 37.0 +icon = ExtResource( 7 ) + +[node name="Button3" type="Button" parent="."] +margin_left = 606.0 +margin_right = 634.0 +margin_bottom = 37.0 +icon = ExtResource( 8 ) +[connection signal="pressed" from="ResourceRowMainButton" to="." method="inspect"] +[connection signal="pressed" from="Button2" to="." method="duplicate_data"] +[connection signal="pressed" from="Button3" to="." method="delete"] diff --git a/game/addons/model_manager/panels/ResourceRowMainButton.gd b/game/addons/model_manager/panels/ResourceRowMainButton.gd new file mode 100644 index 00000000..37177fc4 --- /dev/null +++ b/game/addons/model_manager/panels/ResourceRowMainButton.gd @@ -0,0 +1,18 @@ +tool +extends Button + +var _data : Resource + +func get_drag_data(position): + if _data == null: + return null + + var d : Dictionary = Dictionary() + d["type"] = "resource" + d["resource"] = _data + d["from"] = self + + return d + +func set_resource(data : Resource) -> void: + _data = data diff --git a/game/addons/model_manager/plugin.cfg b/game/addons/model_manager/plugin.cfg new file mode 100644 index 00000000..1f7b6abd --- /dev/null +++ b/game/addons/model_manager/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Entity Spell System Data Manager" +description="" +author="Relintai" +version="1.0" +script="plugin.gd" diff --git a/game/addons/model_manager/plugin.gd b/game/addons/model_manager/plugin.gd new file mode 100644 index 00000000..bfd589ea --- /dev/null +++ b/game/addons/model_manager/plugin.gd @@ -0,0 +1,36 @@ +tool +extends EditorPlugin + +const _main_panel : PackedScene = preload("res://addons/model_manager/panels/MainPanel.tscn") +const _script_icon : Texture = preload("res://addons/model_manager/icons/icon_multi_line.png") + +var _main_panel_instance : Control + +func _enter_tree(): + _main_panel_instance = _main_panel.instance() as Control + _main_panel_instance.connect("inspect_data", self, "inspect_data") + + get_editor_interface().get_editor_viewport().add_child(_main_panel_instance) + + make_visible(false) + +func _exit_tree(): + _main_panel_instance.queue_free() + +func has_main_screen(): + return true + +func make_visible(visible): + if visible: + _main_panel_instance.show() + else: + _main_panel_instance.hide() + +func get_plugin_icon(): + return _script_icon + +func get_plugin_name(): + return "Modules" + +func inspect_data(var data : Resource) -> void: + get_editor_interface().inspect_object(data) diff --git a/game/addons/model_manager/previews/ControlPreview.gd b/game/addons/model_manager/previews/ControlPreview.gd new file mode 100644 index 00000000..0758c3e0 --- /dev/null +++ b/game/addons/model_manager/previews/ControlPreview.gd @@ -0,0 +1,14 @@ +tool +extends ViewportContainer + +export(NodePath) var container_path : NodePath + +var _container : Node + +func _ready() -> void: + _container = get_node(container_path) + +func preview(n: Control) -> void: + _container.add_child(n) + n.owner = _container + diff --git a/game/addons/model_manager/previews/ControlPreview.tscn b/game/addons/model_manager/previews/ControlPreview.tscn new file mode 100644 index 00000000..af0b81c6 --- /dev/null +++ b/game/addons/model_manager/previews/ControlPreview.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/model_manager/previews/ControlPreview.gd" type="Script" id=1] + +[node name="ControlPreview" type="ViewportContainer"] +margin_right = 60.0 +margin_bottom = 60.0 +rect_min_size = Vector2( 60, 60 ) +rect_pivot_offset = Vector2( -198.876, -96.6558 ) +stretch = true +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +container_path = NodePath("Viewport") + +[node name="Viewport" type="Viewport" parent="."] +size = Vector2( 500, 500 ) +own_world = true +handle_input_locally = false +render_target_update_mode = 3 diff --git a/game/addons/model_manager/previews/Node2DPreview.gd b/game/addons/model_manager/previews/Node2DPreview.gd new file mode 100644 index 00000000..586b8d91 --- /dev/null +++ b/game/addons/model_manager/previews/Node2DPreview.gd @@ -0,0 +1,14 @@ +tool +extends ViewportContainer + +export(NodePath) var container_path : NodePath + +var _container : Node + +func _ready() -> void: + _container = get_node(container_path) + +func preview(n: Node2D) -> void: + _container.add_child(n) + n.owner = _container + diff --git a/game/addons/model_manager/previews/Node2DPreview.tscn b/game/addons/model_manager/previews/Node2DPreview.tscn new file mode 100644 index 00000000..20d6ede4 --- /dev/null +++ b/game/addons/model_manager/previews/Node2DPreview.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/model_manager/previews/Node2DPreview.gd" type="Script" id=1] + +[node name="Node2DPreview" type="ViewportContainer"] +margin_right = 60.0 +margin_bottom = 60.0 +rect_min_size = Vector2( 60, 60 ) +rect_pivot_offset = Vector2( -198.876, -96.6558 ) +stretch = true +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +container_path = NodePath("Viewport") + +[node name="Viewport" type="Viewport" parent="."] +size = Vector2( 500, 500 ) +own_world = true +handle_input_locally = false +render_target_update_mode = 3 + +[node name="Camera2D" type="Camera2D" parent="Viewport"] +current = true diff --git a/game/addons/model_manager/previews/SpatialPreview.gd b/game/addons/model_manager/previews/SpatialPreview.gd new file mode 100644 index 00000000..565cb9db --- /dev/null +++ b/game/addons/model_manager/previews/SpatialPreview.gd @@ -0,0 +1,14 @@ +tool +extends ViewportContainer + +export(NodePath) var container_path : NodePath + +var _container : Node + +func _ready() -> void: + _container = get_node(container_path) + +func preview(n: Spatial) -> void: + _container.add_child(n) + n.owner = _container + diff --git a/game/addons/model_manager/previews/SpatialPreview.tscn b/game/addons/model_manager/previews/SpatialPreview.tscn new file mode 100644 index 00000000..6490a605 --- /dev/null +++ b/game/addons/model_manager/previews/SpatialPreview.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/model_manager/previews/SpatialPreview.gd" type="Script" id=1] + +[node name="SpatialPreview" type="ViewportContainer"] +margin_right = 60.0 +margin_bottom = 60.0 +rect_min_size = Vector2( 60, 60 ) +rect_pivot_offset = Vector2( -198.876, -96.6558 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +container_path = NodePath("Viewport") + +[node name="Viewport" type="Viewport" parent="."] +size = Vector2( 60, 60 ) +size_override_stretch = true +own_world = true +handle_input_locally = false +render_target_update_mode = 3 + +[node name="Camera" type="Camera" parent="Viewport"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10.9828 ) +current = true + +[node name="DirectionalLight" type="DirectionalLight" parent="Viewport"] +transform = Transform( 0.276929, 0, -0.96089, 0, 1, 0, 0.96089, 0, 0.276929, -13.093, 0, 6.67786 ) diff --git a/game/addons/model_manager/previews/TexturePreview.gd b/game/addons/model_manager/previews/TexturePreview.gd new file mode 100644 index 00000000..5b50e163 --- /dev/null +++ b/game/addons/model_manager/previews/TexturePreview.gd @@ -0,0 +1,12 @@ +tool +extends TextureRect + +func set_texture(tex: Texture)-> void: + texture = tex + + if tex is PackerImageResource: + var t : ImageTexture = ImageTexture.new() + + t.create_from_image(tex.data, 0) + + texture = t diff --git a/game/addons/model_manager/previews/TexturePreview.tscn b/game/addons/model_manager/previews/TexturePreview.tscn new file mode 100644 index 00000000..78e3ed2e --- /dev/null +++ b/game/addons/model_manager/previews/TexturePreview.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/model_manager/previews/TexturePreview.gd" type="Script" id=1] + +[node name="TexturePreview" type="TextureRect"] +margin_bottom = 37.0 +rect_min_size = Vector2( 50, 50 ) +expand = true +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/project.godot b/game/project.godot index c1a4faf3..39104265 100644 --- a/game/project.godot +++ b/game/project.godot @@ -184,11 +184,121 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://steering_ai_framework/GSAIUtils.gd" }, { +"base": "InspectorGadgetBase", +"class": "GadgetAABB", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_aabb.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetBasis", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_basis.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetBool", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_bool.gd" +}, { +"base": "GadgetVector4", +"class": "GadgetColor", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_vector4/gadget_color.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetFloat", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_float.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetInt", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_int.gd" +}, { +"base": "GadgetStringEdit", +"class": "GadgetNodePath", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_node_path.gd" +}, { +"base": "GadgetVector4", +"class": "GadgetPlane", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_vector4/gadget_plane.gd" +}, { +"base": "GadgetVector4", +"class": "GadgetQuat", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_vector4/gadget_quat.gd" +}, { +"base": "GadgetStringEdit", +"class": "GadgetRID", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_rid.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetRect2", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_rect2.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetResource", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_resource.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetStringEdit", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_string_edit.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetStringLabel", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_string_label.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetTransform", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_transform.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetTransform2D", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_transform2d.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetVector2", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_vector2.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetVector3", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_vector3.gd" +}, { +"base": "InspectorGadgetBase", +"class": "GadgetVector4", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/gadgets/gadget_vector4.gd" +}, { "base": "Resource", "class": "GameModule", "language": "GDScript", "path": "res://scripts/game_modules/GameModule.gd" }, { +"base": "InspectorGadgetBase", +"class": "InspectorGadget", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/inspector_gadget.gd" +}, { +"base": "MarginContainer", +"class": "InspectorGadgetBase", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/inspector_gadget_base.gd" +}, { +"base": "Reference", +"class": "InspectorGadgetUtil", +"language": "GDScript", +"path": "res://addons/inspector-gadget/src/inspector_gadget_util.gd" +}, { "base": "ItemTemplate", "class": "ItemTemplateGD", "language": "GDScript", @@ -300,7 +410,29 @@ _global_script_class_icons={ "GSAISteeringBehavior": "", "GSAITargetAcceleration": "", "GSAIUtils": "", +"GadgetAABB": "", +"GadgetBasis": "", +"GadgetBool": "", +"GadgetColor": "", +"GadgetFloat": "", +"GadgetInt": "", +"GadgetNodePath": "", +"GadgetPlane": "", +"GadgetQuat": "", +"GadgetRID": "", +"GadgetRect2": "", +"GadgetResource": "", +"GadgetStringEdit": "", +"GadgetStringLabel": "", +"GadgetTransform": "", +"GadgetTransform2D": "", +"GadgetVector2": "", +"GadgetVector3": "", +"GadgetVector4": "", "GameModule": "", +"InspectorGadget": "", +"InspectorGadgetBase": "", +"InspectorGadgetUtil": "", "ItemTemplateGD": "", "LayeredTextureMaker": "", "Main": "", @@ -355,7 +487,7 @@ window/size/viewport_scale=100 [editor_plugins] -enabled=PoolStringArray( "ess_data" ) +enabled=PoolStringArray( "model_manager" ) [ess]