| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- using UnityEngine;
- using System.Collections.Generic;
- using System;
- [System.Serializable]
- public enum ResourceType
- {
- Wood,
- Stone,
- Food
- }
- [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<ResourceType, int> resources = new Dictionary<ResourceType, int>();
- public static event Action<ResourceType, int> 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 bool HasResources(List<ResourceAmount> costs)
- {
- foreach (var cost in costs)
- {
- if (GetResource(cost.type) < cost.amount)
- return false;
- }
- return true;
- }
- public bool SpendResources(List<ResourceAmount> costs)
- {
- if (!HasResources(costs))
- return false;
- foreach (var cost in costs)
- {
- SpendResource(cost.type, cost.amount);
- }
- return true;
- }
- public Dictionary<ResourceType, int> GetAllResources()
- {
- return new Dictionary<ResourceType, int>(resources);
- }
- }
|