From d8f93baebac733c35632c384dc04ad0baaa9ba19 Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 26 Jan 2022 20:38:09 +0100 Subject: [PATCH] Now when a module is toggled on in the data manager, it will add entries to to folder tab, based on what folders are available in it. --- game/addons/data_manager/_data/settings.tres | 42 ++++----- game/addons/data_manager/panels/MainPanel.gd | 96 ++++++++++++++------ 2 files changed, 87 insertions(+), 51 deletions(-) diff --git a/game/addons/data_manager/_data/settings.tres b/game/addons/data_manager/_data/settings.tres index 69036cce..0f4ea973 100644 --- a/game/addons/data_manager/_data/settings.tres +++ b/game/addons/data_manager/_data/settings.tres @@ -5,71 +5,71 @@ [resource] script = ExtResource( 1 ) folder_count = 24 -folders/0/folder = "res://data/entity_resources/" +folders/0/folder = "entity_resources" folders/0/header = "Entities" folders/0/name = "Entity Resources" folders/0/type = "EntityResourceData" -folders/1/folder = "res://data/entity_skills/" +folders/1/folder = "entity_skills" folders/1/header = "" folders/1/name = "Skills" folders/1/type = "EntitySkillData" -folders/2/folder = "res://data/entities/" +folders/2/folder = "entities" folders/2/header = "" folders/2/name = "Entities" folders/2/type = "EntityData" -folders/3/folder = "res://data/player_character_data/" +folders/3/folder = "player_character_data" folders/3/header = "" folders/3/name = "Player Characters" folders/3/type = "EntityData" -folders/4/folder = "res://data/entity_classes/" +folders/4/folder = "entity_classes" folders/4/header = "" folders/4/name = "Classes" folders/4/type = "EntityClassData" -folders/5/folder = "res://data/ai/" +folders/5/folder = "ai" folders/5/header = "" folders/5/name = "AI" folders/5/type = "AIAction" -folders/6/folder = "res://data/character_models/" +folders/6/folder = "character_models" folders/6/header = "Models" folders/6/name = "Models" folders/6/type = "MeshDataResource" -folders/7/folder = "res://data/character_textures/" +folders/7/folder = "character_textures" folders/7/header = "" folders/7/name = "Textures" folders/7/type = "Texture" -folders/8/folder = "res://data/spells/" +folders/8/folder = "spells" folders/8/header = "Spells" folders/8/name = "Spells" folders/8/type = "Spell" -folders/9/folder = "res://data/aura_groups/" +folders/9/folder = "aura_groups" folders/9/header = "" folders/9/name = "Aura Groups" folders/9/type = "AuraGroup" -folders/10/folder = "res://data/character_specs/" +folders/10/folder = "character_specs" folders/10/header = "" folders/10/name = "Specs" folders/10/type = "CharacterSpec" -folders/11/folder = "res://data/effect_data/" +folders/11/folder = "effect_data" folders/11/header = "" folders/11/name = "Effect Datas" folders/11/type = "SpellEffectVisual" -folders/12/folder = "res://data/world_spells/" +folders/12/folder = "world_spells" folders/12/header = "" folders/12/name = "World Spells" folders/12/type = "WorldSpellData" -folders/13/folder = "res://data/item_templates/" +folders/13/folder = "item_templates" folders/13/header = "Items" folders/13/name = "Items" folders/13/type = "ItemTemplate" -folders/14/folder = "res://data/crafting/" +folders/14/folder = "crafting" folders/14/header = "" folders/14/name = "Craft Recipes" folders/14/type = "CraftRecipe" -folders/15/folder = "\"res://data/item_visuals/" +folders/15/folder = "item_visuals" folders/15/header = "" folders/15/name = "Item Visuals" folders/15/type = "ItemVisual" -folders/16/folder = "res://data/planets/" +folders/16/folder = "planets" folders/16/header = "World" folders/16/name = "World" folders/16/type = "World" @@ -85,19 +85,19 @@ folders/19/folder = "sub_zones" folders/19/header = "" folders/19/name = "SubZones" folders/19/type = "SubZone" -folders/20/folder = "res://data/dungeons/" +folders/20/folder = "dungeons" folders/20/header = "" folders/20/name = "Dungeons" folders/20/type = "DungeonData" -folders/21/folder = "res://data/dungeon_rooms/" +folders/21/folder = "dungeon_rooms" folders/21/header = "" folders/21/name = "Dungeon Rooms" folders/21/type = "DungeonRoomData" -folders/22/folder = "res://data/basic_models/" +folders/22/folder = "basic_models" folders/22/header = "" folders/22/name = "Basic Models" folders/22/type = "MeshDataResource" -folders/23/folder = "res://data/prop_models/" +folders/23/folder = "prop_models" folders/23/header = "" folders/23/name = "Prop Models" folders/23/type = "PackedScene" diff --git a/game/addons/data_manager/panels/MainPanel.gd b/game/addons/data_manager/panels/MainPanel.gd index f7d0fb01..4f4e7066 100644 --- a/game/addons/data_manager/panels/MainPanel.gd +++ b/game/addons/data_manager/panels/MainPanel.gd @@ -18,6 +18,7 @@ var _module_entry_container : Node var _folder_entry_container : Node var _modules : Array = Array() +var _active_modules : Array = Array() var _settings : DataManagerAddonSettings = null var _initialized : bool = false @@ -45,16 +46,18 @@ func load_data(): _resource_scene.connect("inspect_data", self, "inspect_data") _module_entry_container = get_node(module_entry_container_path) + _folder_entry_container = get_node(folder_entry_container_path) + + generate_module_entry_list() + +func generate_module_entry_list() -> void: + for ch in _folder_entry_container.get_children(): + ch.queue_free() + load_modules() for m in _modules: - var label_str : String = m.resource_name - - if label_str == "": - label_str = m.resource_path - label_str = label_str.replace("res://", "") - label_str = label_str.replace("/game_module.tres", "") - label_str = label_str.replace("game_module.tres", "") + var label_str : String = get_module_label_text(m) var b : Button = Button.new() b.toggle_mode = true @@ -62,38 +65,60 @@ func load_data(): b.set_h_size_flags(SIZE_EXPAND_FILL) b.connect("toggled", self, "on_module_entry_button_toggled", [ m ]) _module_entry_container.add_child(b) - - _folder_entry_container = get_node(folder_entry_container_path) - + +func generate_folder_entry_list() -> void: for ch in _folder_entry_container.get_children(): ch.queue_free() + + var dir : Directory = Directory.new() - var index = 0 - for f in _settings.folders: - if f.header != "": - var h : Label = Label.new() + for module in _active_modules: + var label_str : String = "= " + get_module_label_text(module) + " =" + var mlabel : Label = Label.new() + mlabel.text = label_str + mlabel.align = HALIGN_CENTER + mlabel.valign = VALIGN_CENTER + _folder_entry_container.add_child(mlabel) + var module_dir_base : String = module.resource_path.get_base_dir() + + var index = 0 + for f in _settings.folders: + if !dir.dir_exists(module_dir_base + "/" + f.folder): + continue - _folder_entry_container.add_child(h) - h.owner = _folder_entry_container + if f.header != "": + var h : Label = Label.new() + + _folder_entry_container.add_child(h) + h.text = f.header - 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 + var fe : Node = folder_entry_button_scene.instance() + + _folder_entry_container.add_child(fe) + + fe.text = f.name + fe.tab = index + + fe.set_main_panel(self) + + index += 1 set_tab(0) func on_module_entry_button_toggled(on : bool, module) -> void: - pass + if on: + for m in _active_modules: + if m == module: + return + + _active_modules.push_back(module) + generate_folder_entry_list() + else: + for i in range(_active_modules.size()): + if _active_modules[i] == module: + _active_modules.remove(i) + generate_folder_entry_list() + return func load_modules() -> void: _modules.clear() @@ -152,3 +177,14 @@ func inspect_data(var data : Resource) -> void: func set_plugin(plugin : EditorPlugin) -> void: _plugin = plugin + +func get_module_label_text(module) -> String: + var label_str : String = module.resource_name + + if label_str == "": + label_str = module.resource_path + label_str = label_str.replace("res://", "") + label_str = label_str.replace("/game_module.tres", "") + label_str = label_str.replace("game_module.tres", "") + + return label_str