using UnityEngine; using System.Collections.Generic; using System; [System.Serializable] public enum ResourceType { Wood, Stone, Food, None } [System.Serializable] public class ResourceAmount { public ResourceType type; public int amount; public ResourceAmount(ResourceType type, int amount) { this.type = type; this.amount = amount; } } public class ResourceManager : MonoBehaviour { [Header("Resources")] [SerializeField] private Dictionary resources = new Dictionary(); public static event Action OnResourceChanged; void Awake() { // Initialize resources foreach (ResourceType resourceType in Enum.GetValues(typeof(ResourceType))) { resources[resourceType] = 0; } } public void AddResource(ResourceType type, int amount) { resources[type] += amount; OnResourceChanged?.Invoke(type, resources[type]); Debug.Log($"Added {amount} {type}. Total: {resources[type]}"); } public bool SpendResource(ResourceType type, int amount) { if (resources[type] >= amount) { resources[type] -= amount; OnResourceChanged?.Invoke(type, resources[type]); Debug.Log($"Spent {amount} {type}. Remaining: {resources[type]}"); return true; } return false; } public int GetResource(ResourceType type) { return resources.ContainsKey(type) ? resources[type] : 0; } public void RemoveResource(ResourceType type, int amount) { resources[type] = Mathf.Max(0, resources[type] - amount); OnResourceChanged?.Invoke(type, resources[type]); Debug.Log($"Removed {amount} {type}. Remaining: {resources[type]}"); } public bool HasResource(ResourceType type, int amount) { return GetResource(type) >= amount; } public bool HasResources(List costs) { foreach (var cost in costs) { if (GetResource(cost.type) < cost.amount) return false; } return true; } public bool SpendResources(List costs) { if (!HasResources(costs)) return false; foreach (var cost in costs) { SpendResource(cost.type, cost.amount); } return true; } public Dictionary GetAllResources() { return new Dictionary(resources); } }