using Godot; using Newlon.Resources; using System.Collections.Generic; namespace Newlon; public partial class GameRegistry : Node { private const string PLANT_RESOURCE_PATH = "res://assets/plants/"; private const string ZOMBIE_RESOURCE_PATH = "res://assets/zombies/"; public static GameRegistry Instance { get; private set; } public static readonly Dictionary EntityDictionary = []; public override void _EnterTree() { //Plant init string[] plantFiles = ResourceLoader.ListDirectory(PLANT_RESOURCE_PATH); foreach (var file in plantFiles) { if (ResourceLoader.Exists(PLANT_RESOURCE_PATH + file)) { var plant = ResourceLoader.Load(PLANT_RESOURCE_PATH + file); plant.internal_id = file.ToLower().Split('.')[0]; EntityDictionary.Add(file.ToLower().Split('.')[0], plant); } } //Zombie init string[] zombieFiles = ResourceLoader.ListDirectory(ZOMBIE_RESOURCE_PATH); foreach (var file in zombieFiles) { if (ResourceLoader.Exists(ZOMBIE_RESOURCE_PATH + file)) { var zombie = ResourceLoader.Load(ZOMBIE_RESOURCE_PATH + file); zombie.internal_id = file.ToLower().Split('.')[0]; EntityDictionary.Add(file.ToLower().Split('.')[0], zombie); } } } public static EntityResource GetEntityByName(string name) { if (EntityDictionary.ContainsKey(name) == false) return null; return EntityDictionary[name]; } public static List GetEntityNames() { List result = []; foreach (var key in EntityDictionary.Keys) { result.Add(key); } return result; } public static List GetEntities() { List result = []; foreach (var value in EntityDictionary.Values) { result.Add(value); } return result; } public static List GetPlants() { var entities = GetEntities(); List plants = []; foreach (var entity in entities) { if (entity is PlantResource plant) { plants.Add(plant); } } return plants; } public static List GetZombies() { var entities = GetEntities(); List zombies = []; foreach (var entity in entities) { if (entity is ZombieResource zombie) { zombies.Add(zombie); } } return zombies; } public static int GetEntityCount() { return EntityDictionary.Count; } }