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") }, { new IfNode(), GD.Load("res://Prefabs/DSL/IfNode.tscn") }, { new ElseNode(), GD.Load("res://Prefabs/DSL/ElseNode.tscn") }, { new UntilNode(), GD.Load("res://Prefabs/DSL/UntilNode.tscn") }, { new ForNode(), GD.Load("res://Prefabs/DSL/ForNode.tscn") }, { new WhileNode(), GD.Load("res://Prefabs/DSL/WhileNode.tscn") }, { new MaintainNode(), GD.Load("res://Prefabs/DSL/MaintainNode.tscn") }, { new SacrificeNode(), GD.Load("res://Prefabs/DSL/SacrificeNode.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", new float[] { 0.05f, 1f } }, { "tin_ore", new float[] { 0.3f, 0.7f } }, { "copper_ore", new float[] { 0.3f, 0.7f } }, { "mushroom", new float[] { 0.3f, 0.1f } }, { "spider_silk", new float[] { 0.8f, 0.4f } }, { "coal", new float[] { 1f, 0.3f } }, { "water", new float[] { 0.4f, 0.2f } }, { "stone", new float[] { 1f, 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; } }