ResourceManager.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using UnityEngine;
  2. using System.Collections.Generic;
  3. using System;
  4. [System.Serializable]
  5. public enum ResourceType
  6. {
  7. Wood,
  8. Stone,
  9. Food
  10. }
  11. [System.Serializable]
  12. public class ResourceAmount
  13. {
  14. public ResourceType type;
  15. public int amount;
  16. public ResourceAmount(ResourceType type, int amount)
  17. {
  18. this.type = type;
  19. this.amount = amount;
  20. }
  21. }
  22. public class ResourceManager : MonoBehaviour
  23. {
  24. [Header("Resources")]
  25. [SerializeField] private Dictionary<ResourceType, int> resources = new Dictionary<ResourceType, int>();
  26. public static event Action<ResourceType, int> OnResourceChanged;
  27. void Awake()
  28. {
  29. // Initialize resources
  30. foreach (ResourceType resourceType in Enum.GetValues(typeof(ResourceType)))
  31. {
  32. resources[resourceType] = 0;
  33. }
  34. }
  35. public void AddResource(ResourceType type, int amount)
  36. {
  37. resources[type] += amount;
  38. OnResourceChanged?.Invoke(type, resources[type]);
  39. Debug.Log($"Added {amount} {type}. Total: {resources[type]}");
  40. }
  41. public bool SpendResource(ResourceType type, int amount)
  42. {
  43. if (resources[type] >= amount)
  44. {
  45. resources[type] -= amount;
  46. OnResourceChanged?.Invoke(type, resources[type]);
  47. Debug.Log($"Spent {amount} {type}. Remaining: {resources[type]}");
  48. return true;
  49. }
  50. return false;
  51. }
  52. public int GetResource(ResourceType type)
  53. {
  54. return resources.ContainsKey(type) ? resources[type] : 0;
  55. }
  56. public void RemoveResource(ResourceType type, int amount)
  57. {
  58. resources[type] = Mathf.Max(0, resources[type] - amount);
  59. OnResourceChanged?.Invoke(type, resources[type]);
  60. Debug.Log($"Removed {amount} {type}. Remaining: {resources[type]}");
  61. }
  62. public bool HasResource(ResourceType type, int amount)
  63. {
  64. return GetResource(type) >= amount;
  65. }
  66. public bool HasResources(List<ResourceAmount> costs)
  67. {
  68. foreach (var cost in costs)
  69. {
  70. if (GetResource(cost.type) < cost.amount)
  71. return false;
  72. }
  73. return true;
  74. }
  75. public bool SpendResources(List<ResourceAmount> costs)
  76. {
  77. if (!HasResources(costs))
  78. return false;
  79. foreach (var cost in costs)
  80. {
  81. SpendResource(cost.type, cost.amount);
  82. }
  83. return true;
  84. }
  85. public Dictionary<ResourceType, int> GetAllResources()
  86. {
  87. return new Dictionary<ResourceType, int>(resources);
  88. }
  89. }