Added ESS.

This commit is contained in:
Relintai 2019-12-20 01:05:20 +01:00
parent 63e0993884
commit 7506c76b7d
60 changed files with 1898 additions and 0 deletions

7
README.md Normal file
View 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
icons/empty.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 939 B

34
icons/empty.png.import Normal file
View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/empty.png-7d550719aef4fbbab6c3c1fd09591e6e.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/empty.png"
dest_files=[ "res://.import/empty.png-7d550719aef4fbbab6c3c1fd09591e6e.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
icons/gom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

34
icons/gom.png.import Normal file
View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/gom.png-d698d0c3faea0ed12695dac1cd72a8b5.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/gom.png"
dest_files=[ "res://.import/gom.png-d698d0c3faea0ed12695dac1cd72a8b5.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
icons/icon_add.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

34
icons/icon_add.png.import Normal file
View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_add.png-f1c162d7141223cc47cbd782b2d3c33b.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_add.png"
dest_files=[ "res://.import/icon_add.png-f1c162d7141223cc47cbd782b2d3c33b.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
icons/icon_copy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_copy.png-119a754954c46d28a8bb4cf6c097bc4e.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_copy.png"
dest_files=[ "res://.import/icon_copy.png-119a754954c46d28a8bb4cf6c097bc4e.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
icons/icon_display-name.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_display-name.png-6dc1154c5644fb44130ce9337c2bdc41.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_display-name.png"
dest_files=[ "res://.import/icon_display-name.png-6dc1154c5644fb44130ce9337c2bdc41.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
icons/icon_duplicate.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_duplicate.png-8eb42030f197f9948b088f65267a9357.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_duplicate.png"
dest_files=[ "res://.import/icon_duplicate.png-8eb42030f197f9948b088f65267a9357.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
icons/icon_edit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_edit.png-1b2eb4935f9c052ce779434d5a5b98eb.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_edit.png"
dest_files=[ "res://.import/icon_edit.png-1b2eb4935f9c052ce779434d5a5b98eb.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
icons/icon_empty.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_empty.png-ee1200a4d86ed59a87bf05f5e5e7e845.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_empty.png"
dest_files=[ "res://.import/icon_empty.png-ee1200a4d86ed59a87bf05f5e5e7e845.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
icons/icon_load.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_load.png-58b86a3410a73664f2d01d988023e6b0.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_load.png"
dest_files=[ "res://.import/icon_load.png-58b86a3410a73664f2d01d988023e6b0.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
icons/icon_move_down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_move_down.png-de4dd05da066b6cb62171d65d80c378a.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_move_down.png"
dest_files=[ "res://.import/icon_move_down.png-de4dd05da066b6cb62171d65d80c378a.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
icons/icon_move_up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_move_up.png-5ccb4340283b687498f5a33f13527817.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_move_up.png"
dest_files=[ "res://.import/icon_move_up.png-5ccb4340283b687498f5a33f13527817.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
icons/icon_multi_line.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_multi_line.png-58479647109203a3e456a4d737bd1328.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_multi_line.png"
dest_files=[ "res://.import/icon_multi_line.png-58479647109203a3e456a4d737bd1328.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
icons/icon_options.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_options.png-6c0d3e25749924929760b01adc5b895b.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_options.png"
dest_files=[ "res://.import/icon_options.png-6c0d3e25749924929760b01adc5b895b.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
icons/icon_reload_small.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_reload_small.png-db1811167f43bb3e8d99174883afeb9c.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_reload_small.png"
dest_files=[ "res://.import/icon_reload_small.png-db1811167f43bb3e8d99174883afeb9c.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
icons/icon_remove.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_remove.png-a3408a3cd525a7aacd07e8019ee54c2b.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_remove.png"
dest_files=[ "res://.import/icon_remove.png-a3408a3cd525a7aacd07e8019ee54c2b.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
icons/icon_rename.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_rename.png-81d5babde7eb52ef868d3ebad1288dd1.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_rename.png"
dest_files=[ "res://.import/icon_rename.png-81d5babde7eb52ef868d3ebad1288dd1.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
icons/icon_save.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_save.png-62e6c0742a7d0865897693870b8c7854.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_save.png"
dest_files=[ "res://.import/icon_save.png-62e6c0742a7d0865897693870b8c7854.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
icons/icon_script.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon_script.png-b798d172fd493df9b9ca3cb2010c4cd4.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/ess_data/icons/icon_script.png"
dest_files=[ "res://.import/icon_script.png-b798d172fd493df9b9ca3cb2010c4cd4.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
panels/CreateNamePopup.gd Normal file
View 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()

View File

@ -0,0 +1,57 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/ess_data/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 = 16.0
margin_top = 16.0
margin_right = 475.0
margin_bottom = 182.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
panels/EntryButton.gd Normal file
View 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)

View 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

View File

@ -0,0 +1,9 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/ess_data/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
panels/HistoryEntry.gd Normal file
View 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
panels/HistoryEntry.tscn Normal file
View File

@ -0,0 +1,11 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/ess_data/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
}

297
panels/MainPanel.gd Normal file
View File

@ -0,0 +1,297 @@
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://data/"
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 = [
{
"folder": base_folder + "entity_resources/",
"type": "EntityResourceData",
"name": "Resources",
"header": "Entities"
},
{
"folder": base_folder + "entity_skills/",
"type": "EntitySkillData",
"name": "Skills"
},
{
"folder": base_folder + "entities/",
"type": "EntityData",
"name": "Entities"
},
{
"folder": base_folder + "player_character_data/",
"type": "EntityData",
"name": "Player Characters"
},
{
"folder": base_folder + "entity_classes/",
"type": "EntityClassData",
"name": "Classes"
},
{
"folder": base_folder + "ai/",
"type": "AIAction",
"name": "AI"
},
{
"folder": base_folder + "character_models/",
"type": "MeshDataResource",
"name": "Models",
"header": "Models"
},
{
"folder": base_folder + "character_textures/",
"type": "Texture",
"name": "Textures"
},
{
"folder": base_folder + "spells/",
"type": "Spell",
"name": "Spells",
"header": "Spells"
},
{
"folder": base_folder + "auras/",
"type": "Aura",
"name": "Auras"
},
{
"folder": base_folder + "aura_groups/",
"type": "AuraGroup",
"name": "Aura Groups"
},
{
"folder": base_folder + "character_specs/",
"type": "CharacterSpec",
"name": "Specs"
},
{
"folder": base_folder + "effect_data/",
"type": "SpellEffectVisual",
"name": "Effect Datas"
},
{
"folder": base_folder + "world_spells/",
"type": "WorldSpellData",
"name": "World Spells"
},
{
"folder": base_folder + "item_templates/",
"type": "ItemTemplate",
"name": "Items",
"header": "Items"
},
{
"folder": base_folder + "crafting/",
"type": "CraftRecipe",
"name": "Craft Recipes"
},
{
"folder": base_folder + "item_visuals/",
"type": "ItemVisual",
"name": "Item Visuals"
},
{
"folder": base_folder + "planets/",
"type": "PropDataEntry",
"name": "Planets",
"header": "World"
},
{
"folder": base_folder + "biomes/",
"type": "BiomeData",
"name": "Biomes"
},
{
"folder": base_folder + "dungeons/",
"type": "DungeonData",
"name": "Dungeons"
},
{
"folder": base_folder + "dungeon_rooms/",
"type": "DungeonRoomData",
"name": "Dungeon Rooms"
},
{
"folder": base_folder + "basic_models/",
"type": "MeshDataResource",
"name": "Basic Models"
},
{
"folder": base_folder + "model_blocks/",
"type": "PropData",
"name": "Model Blocks"
},
{
"folder": base_folder + "ships/",
"type": "PropData",
"name": "Ships",
"header": "Ships"
},
{
"folder": base_folder + "ship_parts/",
"type": "PropData",
"name": "Ship Parts"
},
{
"folder": base_folder + "props/",
"type": "PropData",
"name": "Props",
"header": "Props"
},
{
"folder": base_folder + "prop_models/",
"type": "PackedScene",
"name": "Prop Models"
},
{
"folder": base_folder + "spell_effects/enchanter/",
"type": "Spatial",
"name": "Enchanter",
"header": "Spell Effects"
},
{
"folder": base_folder + "spell_effects/nature/",
"type": "Spatial",
"name": "Nature"
},
{
"folder": base_folder + "spell_effects/textures/",
"type": "Texture",
"name": "Textures"
},
{
"folder": base_folder + "icons/",
"type": "Texture",
"name": "Icons",
"header": "Icons"
},
{
"folder": base_folder + "icons/items/",
"type": "Texture",
"name": "Items"
},
{
"folder": base_folder + "icons/naturalist/",
"type": "Texture",
"name": "Naturalist"
},
{
"folder": base_folder + "environments/",
"type": "Environment",
"name": "Environments",
"header": "Materials"
},
{
"folder": base_folder + "materials/",
"type": "Material",
"name": "Materials",
},
{
"folder": base_folder + "models/",
"type": "CharacterSkeleton",
"name": "Character Models"
},
{
"folder": base_folder + "fonts/",
"type": "Font",
"name": "Fonts"
},
{
"folder": base_folder + "shaders/",
"type": "Shader",
"name": "Shaders"
},
{
"folder": base_folder + "voxel_libraries/",
"type": "VoxelmanLibrary",
"name": "Voxel Libraries",
"header": "Voxel"
},
{
"folder": base_folder + "voxel_surfaces/",
"type": "VoxelSurface",
"name": "Voxel Surfaces"
},
{
"folder": base_folder + "voxel_textures/",
"type": "Texture",
"name": "Voxel Textures"
},
{
"folder": base_folder + "xp/",
"type": "XPData",
"name": "XP",
"header": "XP"
},
{
"folder": base_folder + "cursors/",
"type": "Texture",
"name": "Cursors",
"header": "Cursors"
},
]
func _ready():
_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)

43
panels/MainPanel.tscn Normal file
View File

@ -0,0 +1,43 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://addons/ess_data/panels/MainPanel.gd" type="Script" id=1]
[ext_resource path="res://addons/ess_data/panels/ResourcePanel.tscn" type="PackedScene" id=2]
[ext_resource path="res://addons/ess_data/panels/FolderEntryButton.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( 2 )
folder_entry_button_scene = ExtResource( 3 )
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
panels/ResourcePanel.gd Normal file
View 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
panels/ResourcePanel.tscn Normal file
View File

@ -0,0 +1,117 @@
[gd_scene load_steps=8 format=2]
[ext_resource path="res://addons/ess_data/icons/icon_add.png" type="Texture" id=1]
[ext_resource path="res://addons/ess_data/panels/ResourceRow.tscn" type="PackedScene" id=2]
[ext_resource path="res://addons/ess_data/icons/icon_empty.png" type="Texture" id=3]
[ext_resource path="res://addons/ess_data/panels/ResourcePanel.gd" type="Script" id=4]
[ext_resource path="res://addons/ess_data/panels/HistoryEntry.tscn" type="PackedScene" id=5]
[ext_resource path="res://addons/ess_data/panels/CreateNamePopup.tscn" type="PackedScene" id=6]
[ext_resource path="res://addons/ess_data/icons/icon_reload_small.png" type="Texture" id=7]
[node name="Panel" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
script = ExtResource( 4 )
__meta__ = {
"_edit_use_anchors_": false
}
resource_row_scene = ExtResource( 2 )
history_row_scene = ExtResource( 5 )
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( 3 )
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( 1 )
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( 6 )]
[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
panels/ResourceRow.tscn Normal file
View File

@ -0,0 +1,46 @@
[gd_scene load_steps=9 format=2]
[ext_resource path="res://addons/ess_data/panels/EntryButton.gd" type="Script" id=1]
[ext_resource path="res://addons/ess_data/icons/icon_duplicate.png" type="Texture" id=2]
[ext_resource path="res://addons/ess_data/icons/icon_remove.png" type="Texture" id=3]
[ext_resource path="res://addons/ess_data/panels/ResourceRowMainButton.gd" type="Script" id=4]
[ext_resource path="res://addons/ess_data/previews/SpatialPreview.tscn" type="PackedScene" id=5]
[ext_resource path="res://addons/ess_data/previews/Node2DPreview.tscn" type="PackedScene" id=6]
[ext_resource path="res://addons/ess_data/previews/ControlPreview.tscn" type="PackedScene" id=7]
[ext_resource path="res://addons/ess_data/previews/TexturePreview.tscn" type="PackedScene" 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( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
spatial_preview = ExtResource( 5 )
node2d_preview = ExtResource( 6 )
control_preview = ExtResource( 7 )
texture_preview = ExtResource( 8 )
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( 4 )
[node name="Button2" type="Button" parent="."]
margin_left = 574.0
margin_right = 602.0
margin_bottom = 37.0
icon = ExtResource( 2 )
[node name="Button3" type="Button" parent="."]
margin_left = 606.0
margin_right = 634.0
margin_bottom = 37.0
icon = ExtResource( 3 )
[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"]

View 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
plugin.cfg Normal file
View File

@ -0,0 +1,7 @@
[plugin]
name="Entity Spell System Data Manager"
description=""
author="Relintai"
version="1.0"
script="plugin.gd"

36
plugin.gd Normal file
View File

@ -0,0 +1,36 @@
tool
extends EditorPlugin
const _main_panel : PackedScene = preload("res://addons/ess_data/panels/MainPanel.tscn")
const _script_icon : Texture = preload("res://addons/ess_data/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 "Data"
func inspect_data(var data : Resource) -> void:
get_editor_interface().inspect_object(data)

View 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

View File

@ -0,0 +1,21 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/ess_data/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
previews/Node2DPreview.gd Normal file
View 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

View File

@ -0,0 +1,24 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/ess_data/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

View 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

View File

@ -0,0 +1,28 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/ess_data/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 )

View 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

View File

@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/ess_data/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
}