Reworked the data_manager addon. Now it stores it's settings using ProjectSettings, so it shouldn't bug out on a fresh import.

This commit is contained in:
Relintai 2022-07-31 17:49:43 +02:00
parent 2b840d1086
commit b81b7c348a
8 changed files with 64 additions and 162 deletions

View File

@ -1,107 +0,0 @@
[gd_resource type="Resource" load_steps=2 format=2]
[ext_resource path="res://addons/data_manager/resources/data_manager_addon_settings.gd" type="Script" id=1]
[resource]
script = ExtResource( 1 )
folder_count = 25
folders/0/folder = "."
folders/0/header = ""
folders/0/name = "Root"
folders/0/type = "Resource"
folders/1/folder = "entity_skills"
folders/1/header = ""
folders/1/name = "Skills"
folders/1/type = "EntitySkillData"
folders/2/folder = "entities"
folders/2/header = ""
folders/2/name = "Entities"
folders/2/type = "EntityData"
folders/3/folder = "player_character_data"
folders/3/header = ""
folders/3/name = "Player Characters"
folders/3/type = "EntityData"
folders/4/folder = "entity_classes"
folders/4/header = ""
folders/4/name = "Classes"
folders/4/type = "EntityClassData"
folders/5/folder = "ai"
folders/5/header = ""
folders/5/name = "AI"
folders/5/type = "AIAction"
folders/6/folder = "character_models"
folders/6/header = "Models"
folders/6/name = "Models"
folders/6/type = "MeshDataResource"
folders/7/folder = "character_textures"
folders/7/header = ""
folders/7/name = "Textures"
folders/7/type = "Texture"
folders/8/folder = "spells"
folders/8/header = "Spells"
folders/8/name = "Spells"
folders/8/type = "Spell"
folders/9/folder = "aura_groups"
folders/9/header = ""
folders/9/name = "Aura Groups"
folders/9/type = "AuraGroup"
folders/10/folder = "character_specs"
folders/10/header = ""
folders/10/name = "Specs"
folders/10/type = "CharacterSpec"
folders/11/folder = "effect_data"
folders/11/header = ""
folders/11/name = "Effect Datas"
folders/11/type = "SpellEffectVisual"
folders/12/folder = "world_spells"
folders/12/header = ""
folders/12/name = "World Spells"
folders/12/type = "WorldSpellData"
folders/13/folder = "item_templates"
folders/13/header = "Items"
folders/13/name = "Items"
folders/13/type = "ItemTemplate"
folders/14/folder = "crafting"
folders/14/header = ""
folders/14/name = "Craft Recipes"
folders/14/type = "CraftRecipe"
folders/15/folder = "item_visuals"
folders/15/header = ""
folders/15/name = "Item Visuals"
folders/15/type = "ItemVisual"
folders/16/folder = "planets"
folders/16/header = "World"
folders/16/name = "World"
folders/16/type = "World"
folders/17/folder = "continents"
folders/17/header = ""
folders/17/name = "Continents"
folders/17/type = "Continent"
folders/18/folder = "zones"
folders/18/header = ""
folders/18/name = "Zones"
folders/18/type = "Zone"
folders/19/folder = "sub_zones"
folders/19/header = ""
folders/19/name = "SubZones"
folders/19/type = "SubZone"
folders/20/folder = "dungeons"
folders/20/header = ""
folders/20/name = "Dungeons"
folders/20/type = "DungeonData"
folders/21/folder = "dungeon_rooms"
folders/21/header = ""
folders/21/name = "Dungeon Rooms"
folders/21/type = "DungeonRoomData"
folders/22/folder = "basic_models"
folders/22/header = ""
folders/22/name = "Basic Models"
folders/22/type = "MeshDataResource"
folders/23/folder = "prop_models"
folders/23/header = ""
folders/23/name = "Prop Models"
folders/23/type = "PackedScene"
folders/24/folder = "entity_resources"
folders/24/header = "Entities"
folders/24/name = "Entity Resources"
folders/24/type = "EntityResourceData"

View File

@ -47,6 +47,7 @@ func load_data():
_main_container.add_child(_resource_scene)
_resource_scene.owner = _main_container
_resource_scene.connect("inspect_data", self, "inspect_data")
_resource_scene.connect("edit_settings", self, "edit_settings")
_module_entry_container = get_node(module_entry_container_path)
_folder_entry_container = get_node(folder_entry_container_path)
@ -198,6 +199,10 @@ func hide_all() -> void:
func inspect_data(var data : Resource) -> void:
emit_signal("inspect_data", data)
func edit_settings() -> void:
emit_signal("inspect_data", _settings)
func set_plugin(plugin : EditorPlugin) -> void:
_plugin = plugin

View File

@ -10,9 +10,6 @@ anchor_bottom = 1.0
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
resource_scene = ExtResource( 3 )
base_folder = "res://data/"
main_container = NodePath("HSplitContainer/MarginContainer")

View File

@ -2,6 +2,7 @@ tool
extends Control
signal inspect_data
signal edit_settings
export(PackedScene) var resource_row_scene : PackedScene
export(PackedScene) var history_row_scene : PackedScene
@ -292,3 +293,7 @@ func search(text : String) -> void:
func sort_entries(a, b):
return a["id"] < b["id"]
func edit_settings():
emit_signal("edit_settings")

View File

@ -12,9 +12,6 @@
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")
@ -75,21 +72,28 @@ margin_left = 612.0
margin_right = 1024.0
margin_bottom = 600.0
[node name="Button" type="Button" parent="ResourcePanel/VBoxContainer"]
[node name="Settings" type="Button" parent="ResourcePanel/VBoxContainer"]
margin_right = 412.0
margin_bottom = 20.0
size_flags_horizontal = 3
text = "Settings"
[node name="Button" type="Button" parent="ResourcePanel/VBoxContainer"]
margin_top = 24.0
margin_right = 412.0
margin_bottom = 44.0
size_flags_horizontal = 3
text = "Clear History"
icon = ExtResource( 7 )
[node name="HSeparator" type="HSeparator" parent="ResourcePanel/VBoxContainer"]
margin_top = 24.0
margin_top = 48.0
margin_right = 412.0
margin_bottom = 28.0
margin_bottom = 52.0
size_flags_horizontal = 3
[node name="ScrollContainer" type="ScrollContainer" parent="ResourcePanel/VBoxContainer"]
margin_top = 32.0
margin_top = 56.0
margin_right = 412.0
margin_bottom = 600.0
size_flags_horizontal = 3
@ -114,5 +118,6 @@ 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/Settings" to="." method="edit_settings"]
[connection signal="pressed" from="ResourcePanel/VBoxContainer/Button" to="." method="clear_history"]
[connection signal="confirmed" from="DeletePopup" to="." method="delete_confirm"]

View File

@ -42,20 +42,6 @@ func get_plugin_name():
func inspect_data(var data : Resource) -> void:
get_editor_interface().inspect_object(data)
func ensure_data_dir_exists() -> void:
var dir : Directory = Directory.new()
if !dir.dir_exists("res://addons/data_manager/_data/"):
dir.make_dir("res://addons/data_manager/_data/")
func load_settings() -> void:
ensure_data_dir_exists()
var dir : Directory = Directory.new()
if !dir.file_exists("res://addons/data_manager/_data/settings.tres"):
settings = DataManagerAddonSettings.new()
ResourceSaver.save("res://addons/data_manager/_data/settings.tres", settings)
else:
settings = ResourceLoader.load("res://addons/data_manager/_data/settings.tres")
settings = DataManagerAddonSettings.new()
settings.load_from_project_settings()

View File

@ -101,18 +101,25 @@ func _get_property_list() -> Array:
var props : Array = Array()
props.append({
"name": "convert_to_json",
"name": "save",
"type": TYPE_NIL,
"hint": PROPERTY_HINT_BUTTON,
"hint_string": "convert_to_json",
})
props.append({
"name": "convert_from_json",
"type": TYPE_NIL,
"hint": PROPERTY_HINT_BUTTON,
"hint_string": "convert_from_json",
"hint_string": "save_to_project_settings",
})
# props.append({
# "name": "convert_to_json",
# "type": TYPE_NIL,
# "hint": PROPERTY_HINT_BUTTON,
# "hint_string": "convert_to_json",
# })
#
# props.append({
# "name": "convert_from_json",
# "type": TYPE_NIL,
# "hint": PROPERTY_HINT_BUTTON,
# "hint_string": "convert_from_json",
# })
props.append({
"name": "folder_count",
@ -153,26 +160,26 @@ func set_folder_count(val : int) -> void:
property_list_changed_notify()
func convert_to_json() -> void:
var f : File = File.new();
var f : File = File.new()
f.open("res://addons/data_manager/_data/settings.json", File.WRITE);
f.store_string(get_as_json());
f.close();
f.open("res://addons/data_manager/_data/settings.json", File.WRITE)
f.store_string(get_as_json())
f.close()
PLogger.log_message("Saved settings to res://addons/data_manager/_data/settings.json");
PLogger.log_message("Saved settings to res://addons/data_manager/_data/settings.json")
func convert_from_json() -> void:
var f : File = File.new()
if (!f.file_exists("res://addons/data_manager/_data/settings.json")):
PLogger.log_message("File res://addons/data_manager/_data/settings.json doesn't exist!");
return;
PLogger.log_message("File res://addons/data_manager/_data/settings.json doesn't exist!")
return
f.open("res://addons/data_manager/_data/settings.json", File.READ);
set_from_json(f.get_as_text());
f.close();
f.open("res://addons/data_manager/_data/settings.json", File.READ)
set_from_json(f.get_as_text())
f.close()
PLogger.log_message("Loaded settings from res://addons/data_manager/_data/settings.json");
PLogger.log_message("Loaded settings from res://addons/data_manager/_data/settings.json")
func get_as_json() -> String:
var arr : Array
@ -191,15 +198,6 @@ func get_as_json() -> String:
return to_json(arr);
#class SettingEntry:
# var folder : String = ""
# var header : String = ""
# var name : String = ""
# var type : String = ""
func set_from_json(data : String) -> void:
var jpr : JSONParseResult = JSON.parse(data)
@ -221,3 +219,12 @@ func set_from_json(data : String) -> void:
folders.push_back(s)
func save_to_project_settings() -> void:
ProjectSettings.set("addons/data_manager/folder_settings", get_as_json())
func load_from_project_settings() -> void:
var d : String = ProjectSettings.get("addons/data_manager/folder_settings")
if d != "":
set_from_json(d)

View File

@ -181,6 +181,10 @@ _global_script_class_icons={
@"SpellGD": ""
}
[addons]
data_manager/folder_settings="[{\"folder\":\".\",\"header\":\"\",\"name\":\"Root\",\"type\":\"Resource\"},{\"folder\":\"entity_skills\",\"header\":\"\",\"name\":\"Skills\",\"type\":\"EntitySkillData\"},{\"folder\":\"entities\",\"header\":\"\",\"name\":\"Entities\",\"type\":\"EntityData\"},{\"folder\":\"player_character_data\",\"header\":\"\",\"name\":\"Player Characters\",\"type\":\"EntityData\"},{\"folder\":\"entity_classes\",\"header\":\"\",\"name\":\"Classes\",\"type\":\"EntityClassData\"},{\"folder\":\"ai\",\"header\":\"\",\"name\":\"AI\",\"type\":\"AIAction\"},{\"folder\":\"character_models\",\"header\":\"Models\",\"name\":\"Models\",\"type\":\"MeshDataResource\"},{\"folder\":\"character_textures\",\"header\":\"\",\"name\":\"Textures\",\"type\":\"Texture\"},{\"folder\":\"spells\",\"header\":\"Spells\",\"name\":\"Spells\",\"type\":\"Spell\"},{\"folder\":\"aura_groups\",\"header\":\"\",\"name\":\"Aura Groups\",\"type\":\"AuraGroup\"},{\"folder\":\"character_specs\",\"header\":\"\",\"name\":\"Specs\",\"type\":\"CharacterSpec\"},{\"folder\":\"effect_data\",\"header\":\"\",\"name\":\"Effect Datas\",\"type\":\"SpellEffectVisual\"},{\"folder\":\"world_spells\",\"header\":\"\",\"name\":\"World Spells\",\"type\":\"WorldSpellData\"},{\"folder\":\"item_templates\",\"header\":\"Items\",\"name\":\"Items\",\"type\":\"ItemTemplate\"},{\"folder\":\"crafting\",\"header\":\"\",\"name\":\"Craft Recipes\",\"type\":\"CraftRecipe\"},{\"folder\":\"item_visuals\",\"header\":\"\",\"name\":\"Item Visuals\",\"type\":\"ItemVisual\"},{\"folder\":\"planets\",\"header\":\"World\",\"name\":\"World\",\"type\":\"World\"},{\"folder\":\"continents\",\"header\":\"\",\"name\":\"Continents\",\"type\":\"Continent\"},{\"folder\":\"zones\",\"header\":\"\",\"name\":\"Zones\",\"type\":\"Zone\"},{\"folder\":\"sub_zones\",\"header\":\"\",\"name\":\"SubZones\",\"type\":\"SubZone\"},{\"folder\":\"dungeons\",\"header\":\"\",\"name\":\"Dungeons\",\"type\":\"DungeonData\"},{\"folder\":\"dungeon_rooms\",\"header\":\"\",\"name\":\"Dungeon Rooms\",\"type\":\"DungeonRoomData\"},{\"folder\":\"basic_models\",\"header\":\"\",\"name\":\"Basic Models\",\"type\":\"MeshDataResource\"},{\"folder\":\"prop_models\",\"header\":\"\",\"name\":\"Prop Models\",\"type\":\"PackedScene\"},{\"folder\":\"entity_resources\",\"header\":\"Entities\",\"name\":\"Entity Resources\",\"type\":\"EntityResourceData\"}]"
[application]
config/name="Broken Seals"