Removed ess_data as a dependency from the setup script, but added it into this repo and renamed it to module manager.
@ -49,7 +49,6 @@ module_repositories = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
addon_repositories = [
|
addon_repositories = [
|
||||||
[ ['https://github.com/Relintai/ess_data.git', 'git@github.com:Relintai/ess_data.git' ], 'ess_data', '' ],
|
|
||||||
]
|
]
|
||||||
|
|
||||||
third_party_addon_repositories = [
|
third_party_addon_repositories = [
|
||||||
|
6
game/addons/.gitignore
vendored
@ -1,3 +1,3 @@
|
|||||||
*/*
|
*
|
||||||
ess_data
|
!model_manager
|
||||||
prop_tool
|
!model_manager/**
|
21
game/addons/model_manager/LICENSE
Normal file
@ -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.
|
7
game/addons/model_manager/README.md
Normal file
@ -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)
|
BIN
game/addons/model_manager/icons/empty.png
Normal file
After Width: | Height: | Size: 939 B |
34
game/addons/model_manager/icons/empty.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/empty.png-91b6ffc31d1ab0c9081673d056b1aae6.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/empty.png"
|
||||||
|
dest_files=[ "res://.import/empty.png-91b6ffc31d1ab0c9081673d056b1aae6.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
|
BIN
game/addons/model_manager/icons/gom.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
34
game/addons/model_manager/icons/gom.png.import
Normal file
@ -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
|
BIN
game/addons/model_manager/icons/icon_add.png
Normal file
After Width: | Height: | Size: 111 B |
34
game/addons/model_manager/icons/icon_add.png.import
Normal file
@ -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
|
BIN
game/addons/model_manager/icons/icon_copy.png
Normal file
After Width: | Height: | Size: 248 B |
34
game/addons/model_manager/icons/icon_copy.png.import
Normal file
@ -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
|
BIN
game/addons/model_manager/icons/icon_display-name.png
Normal file
After Width: | Height: | Size: 200 B |
34
game/addons/model_manager/icons/icon_display-name.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_display-name.png-f5557fd29e500456264ad785c21c47c0.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_display-name.png"
|
||||||
|
dest_files=[ "res://.import/icon_display-name.png-f5557fd29e500456264ad785c21c47c0.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
|
BIN
game/addons/model_manager/icons/icon_duplicate.png
Normal file
After Width: | Height: | Size: 167 B |
34
game/addons/model_manager/icons/icon_duplicate.png.import
Normal file
@ -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
|
BIN
game/addons/model_manager/icons/icon_edit.png
Normal file
After Width: | Height: | Size: 346 B |
34
game/addons/model_manager/icons/icon_edit.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_edit.png-ea78f3ad8dd14a28835b846f71898d96.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_edit.png"
|
||||||
|
dest_files=[ "res://.import/icon_edit.png-ea78f3ad8dd14a28835b846f71898d96.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
|
BIN
game/addons/model_manager/icons/icon_empty.png
Normal file
After Width: | Height: | Size: 267 B |
34
game/addons/model_manager/icons/icon_empty.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_empty.png-428c8222194b802f67b678e5c3fd15ed.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_empty.png"
|
||||||
|
dest_files=[ "res://.import/icon_empty.png-428c8222194b802f67b678e5c3fd15ed.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
|
BIN
game/addons/model_manager/icons/icon_load.png
Normal file
After Width: | Height: | Size: 170 B |
34
game/addons/model_manager/icons/icon_load.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_load.png-7ead551ff2c330dd66b58d1f82e9ad24.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_load.png"
|
||||||
|
dest_files=[ "res://.import/icon_load.png-7ead551ff2c330dd66b58d1f82e9ad24.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
|
BIN
game/addons/model_manager/icons/icon_move_down.png
Normal file
After Width: | Height: | Size: 268 B |
34
game/addons/model_manager/icons/icon_move_down.png.import
Normal file
@ -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
|
BIN
game/addons/model_manager/icons/icon_move_up.png
Normal file
After Width: | Height: | Size: 269 B |
34
game/addons/model_manager/icons/icon_move_up.png.import
Normal file
@ -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
|
BIN
game/addons/model_manager/icons/icon_multi_line.png
Normal file
After Width: | Height: | Size: 140 B |
34
game/addons/model_manager/icons/icon_multi_line.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_multi_line.png-02a64189a571e7ff46fd9a62341016cf.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_multi_line.png"
|
||||||
|
dest_files=[ "res://.import/icon_multi_line.png-02a64189a571e7ff46fd9a62341016cf.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
|
BIN
game/addons/model_manager/icons/icon_options.png
Normal file
After Width: | Height: | Size: 392 B |
34
game/addons/model_manager/icons/icon_options.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_options.png-1beb2966bd057330ea98392e982b8aba.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_options.png"
|
||||||
|
dest_files=[ "res://.import/icon_options.png-1beb2966bd057330ea98392e982b8aba.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
|
BIN
game/addons/model_manager/icons/icon_reload_small.png
Normal file
After Width: | Height: | Size: 409 B |
34
game/addons/model_manager/icons/icon_reload_small.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_reload_small.png-e7d85ab20753d8b74497ca7cd4b851ed.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_reload_small.png"
|
||||||
|
dest_files=[ "res://.import/icon_reload_small.png-e7d85ab20753d8b74497ca7cd4b851ed.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
|
BIN
game/addons/model_manager/icons/icon_remove.png
Normal file
After Width: | Height: | Size: 166 B |
34
game/addons/model_manager/icons/icon_remove.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_remove.png-1ec54533b4f9c075ba03cd885c63de8d.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_remove.png"
|
||||||
|
dest_files=[ "res://.import/icon_remove.png-1ec54533b4f9c075ba03cd885c63de8d.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
|
BIN
game/addons/model_manager/icons/icon_rename.png
Normal file
After Width: | Height: | Size: 160 B |
34
game/addons/model_manager/icons/icon_rename.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_rename.png-ed4b6df257a31c91158a25b262faa111.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_rename.png"
|
||||||
|
dest_files=[ "res://.import/icon_rename.png-ed4b6df257a31c91158a25b262faa111.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
|
BIN
game/addons/model_manager/icons/icon_save.png
Normal file
After Width: | Height: | Size: 252 B |
34
game/addons/model_manager/icons/icon_save.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_save.png-a9b3f47b1097f68902981cad3658b6c4.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_save.png"
|
||||||
|
dest_files=[ "res://.import/icon_save.png-a9b3f47b1097f68902981cad3658b6c4.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
|
BIN
game/addons/model_manager/icons/icon_script.png
Normal file
After Width: | Height: | Size: 262 B |
34
game/addons/model_manager/icons/icon_script.png.import
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon_script.png-7249902f6af8266e487b72220f5262fc.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://addons/model_manager/icons/icon_script.png"
|
||||||
|
dest_files=[ "res://.import/icon_script.png-7249902f6af8266e487b72220f5262fc.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
|
64
game/addons/model_manager/panels/CreateNamePopup.gd
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
tool
|
||||||
|
extends ConfirmationDialog
|
||||||
|
|
||||||
|
signal ok_pressed
|
||||||
|
|
||||||
|
export(NodePath) var line_edit_path : NodePath
|
||||||
|
export(NodePath) var option_button_path : NodePath
|
||||||
|
|
||||||
|
var _resource_type : String
|
||||||
|
|
||||||
|
var _line_edit : LineEdit
|
||||||
|
var _option_button : OptionButton
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
_line_edit = get_node(line_edit_path) as LineEdit
|
||||||
|
_option_button = get_node(option_button_path) as OptionButton
|
||||||
|
|
||||||
|
connect("confirmed", self, "_on_OK_pressed")
|
||||||
|
connect("about_to_show", self, "about_to_show")
|
||||||
|
|
||||||
|
func set_resource_type(resource_type : String) -> 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()
|
57
game/addons/model_manager/panels/CreateNamePopup.tscn
Normal file
@ -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
|
93
game/addons/model_manager/panels/EntryButton.gd
Normal file
@ -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)
|
12
game/addons/model_manager/panels/FolderEntryButton.gd
Normal file
@ -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
|
9
game/addons/model_manager/panels/FolderEntryButton.tscn
Normal file
@ -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 )
|
39
game/addons/model_manager/panels/HistoryEntry.gd
Normal file
@ -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
|
11
game/addons/model_manager/panels/HistoryEntry.tscn
Normal file
@ -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
|
||||||
|
}
|
89
game/addons/model_manager/panels/MainPanel.gd
Normal file
@ -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)
|
44
game/addons/model_manager/panels/MainPanel.tscn
Normal file
@ -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
|
291
game/addons/model_manager/panels/ResourcePanel.gd
Normal file
@ -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"]
|
117
game/addons/model_manager/panels/ResourcePanel.tscn
Normal file
@ -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"]
|
46
game/addons/model_manager/panels/ResourceRow.tscn
Normal file
@ -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"]
|
18
game/addons/model_manager/panels/ResourceRowMainButton.gd
Normal file
@ -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
|
7
game/addons/model_manager/plugin.cfg
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[plugin]
|
||||||
|
|
||||||
|
name="Entity Spell System Data Manager"
|
||||||
|
description=""
|
||||||
|
author="Relintai"
|
||||||
|
version="1.0"
|
||||||
|
script="plugin.gd"
|
36
game/addons/model_manager/plugin.gd
Normal file
@ -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)
|
14
game/addons/model_manager/previews/ControlPreview.gd
Normal file
@ -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
|
||||||
|
|
21
game/addons/model_manager/previews/ControlPreview.tscn
Normal file
@ -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
|
14
game/addons/model_manager/previews/Node2DPreview.gd
Normal file
@ -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
|
||||||
|
|
24
game/addons/model_manager/previews/Node2DPreview.tscn
Normal file
@ -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
|
14
game/addons/model_manager/previews/SpatialPreview.gd
Normal file
@ -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
|
||||||
|
|
28
game/addons/model_manager/previews/SpatialPreview.tscn
Normal file
@ -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 )
|
12
game/addons/model_manager/previews/TexturePreview.gd
Normal file
@ -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
|
12
game/addons/model_manager/previews/TexturePreview.tscn
Normal file
@ -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
|
||||||
|
}
|
@ -184,11 +184,121 @@ _global_script_classes=[ {
|
|||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://steering_ai_framework/GSAIUtils.gd"
|
"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",
|
"base": "Resource",
|
||||||
"class": "GameModule",
|
"class": "GameModule",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://scripts/game_modules/GameModule.gd"
|
"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",
|
"base": "ItemTemplate",
|
||||||
"class": "ItemTemplateGD",
|
"class": "ItemTemplateGD",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
@ -300,7 +410,29 @@ _global_script_class_icons={
|
|||||||
"GSAISteeringBehavior": "",
|
"GSAISteeringBehavior": "",
|
||||||
"GSAITargetAcceleration": "",
|
"GSAITargetAcceleration": "",
|
||||||
"GSAIUtils": "",
|
"GSAIUtils": "",
|
||||||
|
"GadgetAABB": "",
|
||||||
|
"GadgetBasis": "",
|
||||||
|
"GadgetBool": "",
|
||||||
|
"GadgetColor": "",
|
||||||
|
"GadgetFloat": "",
|
||||||
|
"GadgetInt": "",
|
||||||
|
"GadgetNodePath": "",
|
||||||
|
"GadgetPlane": "",
|
||||||
|
"GadgetQuat": "",
|
||||||
|
"GadgetRID": "",
|
||||||
|
"GadgetRect2": "",
|
||||||
|
"GadgetResource": "",
|
||||||
|
"GadgetStringEdit": "",
|
||||||
|
"GadgetStringLabel": "",
|
||||||
|
"GadgetTransform": "",
|
||||||
|
"GadgetTransform2D": "",
|
||||||
|
"GadgetVector2": "",
|
||||||
|
"GadgetVector3": "",
|
||||||
|
"GadgetVector4": "",
|
||||||
"GameModule": "",
|
"GameModule": "",
|
||||||
|
"InspectorGadget": "",
|
||||||
|
"InspectorGadgetBase": "",
|
||||||
|
"InspectorGadgetUtil": "",
|
||||||
"ItemTemplateGD": "",
|
"ItemTemplateGD": "",
|
||||||
"LayeredTextureMaker": "",
|
"LayeredTextureMaker": "",
|
||||||
"Main": "",
|
"Main": "",
|
||||||
@ -355,7 +487,7 @@ window/size/viewport_scale=100
|
|||||||
|
|
||||||
[editor_plugins]
|
[editor_plugins]
|
||||||
|
|
||||||
enabled=PoolStringArray( "ess_data" )
|
enabled=PoolStringArray( "model_manager" )
|
||||||
|
|
||||||
[ess]
|
[ess]
|
||||||
|
|
||||||
|