using Godot; using System.Collections.Generic; using System.Text.Json; public partial class ResourceLoader { private const string LayerPrefabPath = "res://Prefabs/Layer.tscn"; private const string RobotPrefabPath = "res://Prefabs/Robot/Robot.tscn"; private const string RobotDisplayPath = "res://Prefabs/Robot/RobotDisplay.tscn"; private const string ItemDisplayPath = "res://Prefabs/Crafting/ItemDisplay.tscn"; private const string RecipesPath = "res://Assets/Recipes.json"; private const string ResearchPath = "res://Assets/Research.json"; public static PackedScene LoadLayerPrefab() { return GD.Load(LayerPrefabPath); } public static PackedScene LoadRobotPrefab() { return GD.Load(RobotPrefabPath); } public static PackedScene LoadRobotDisplay() { return GD.Load(RobotDisplayPath); } public static PackedScene LoadItemDisplay() { return GD.Load(ItemDisplayPath); } public static Texture2D LoadPath(string path) { return GD.Load(path); } public static Dictionary LoadTiles() { Dictionary tileMeshes = new Dictionary(); PackedScene tileCollection = GD.Load($"res://Assets/Objects/Tiles.glb"); Node root = tileCollection.Instantiate(); foreach (MeshInstance3D child in root.GetChildren()) { tileMeshes.Add(child.Name.ToString().ToLower(), child); } return tileMeshes; } public static Dictionary LoadDecorations() { Dictionary decorationMeshes = new Dictionary(); PackedScene decorationCollection = GD.Load($"res://Assets/Objects/Decorations.glb"); Node root = decorationCollection.Instantiate(); foreach (MeshInstance3D child in root.GetChildren()) { decorationMeshes.Add(child.Name.ToString().ToLower(), child); } return decorationMeshes; } public static Dictionary LoadDSLNodes() { Dictionary nodes = new Dictionary() { { new MoveNode(), GD.Load("res://Prefabs/DSL/MoveNode.tscn") }, { new HarvestNode(), GD.Load("res://Prefabs/DSL/HarvestNode.tscn") }, { new CraftNode(), GD.Load("res://Prefabs/DSL/CraftNode.tscn") }, { new ExploreNode(), GD.Load("res://Prefabs/DSL/ExploreNode.tscn") } }; return nodes; } public static Dictionary LoadResourceSymbols() { Dictionary symbols = new Dictionary() { { "iron_ore", GD.Load("res://Assets/Images/Resources/IronSymbol.png") }, { "tin_ore", GD.Load("res://Assets/Images/Resources/TinSymbol.png") }, { "copper_ore", GD.Load("res://Assets/Images/Resources/CopperSymbol.png") }, { "mushroom", GD.Load("res://Assets/Images/Resources/MushroomSymbol.png") }, { "spider_silk", GD.Load("res://Assets/Images/Resources/SpiderSilkSymbol.png") }, { "coal", GD.Load("res://Assets/Images/Resources/CoalSymbol.png") }, { "water", GD.Load("res://Assets/Images/Resources/WaterSymbol.png") }, { "stone", GD.Load("res://Assets/Images/Resources/StoneSymbol.png") }, }; return symbols; } public static Dictionary LoadResourceWeights() { Dictionary weights = new Dictionary() { { "iron_ore", [0.05f,1] }, { "tin_ore", [0.3f,0.7f] }, { "copper_ore", [0.3f,0.7f] }, { "mushroom", [0.3f,0.1f] }, { "spider_silk", [0.8f,0.4f] }, { "coal", [1,0.3f] }, { "water", [0.4f,0.2f] }, { "stone", [1,0.5f] }, }; return weights; } public static SortedDictionary LoadItems() { FileAccess file = FileAccess.Open(RecipesPath, FileAccess.ModeFlags.Read); string json = file.GetAsText(); SortedDictionary result = new SortedDictionary(); List items = JsonSerializer.Deserialize>(json); if (items == null) return result; foreach (ItemData item in items) { result.Add(item.Id, item); } return result; } public static Dictionary LoadResearch() { FileAccess file = FileAccess.Open(ResearchPath, FileAccess.ModeFlags.Read); string json = file.GetAsText(); Dictionary result = new Dictionary(); List researches = JsonSerializer.Deserialize>(json); if (researches == null) return result; foreach (ResearchData research in researches) { result.Add(research.Id, new Research(research)); } return result; } }