ResourceManager.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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 bool HasResources(List<ResourceAmount> costs)
  57. {
  58. foreach (var cost in costs)
  59. {
  60. if (GetResource(cost.type) < cost.amount)
  61. return false;
  62. }
  63. return true;
  64. }
  65. public bool SpendResources(List<ResourceAmount> costs)
  66. {
  67. if (!HasResources(costs))
  68. return false;
  69. foreach (var cost in costs)
  70. {
  71. SpendResource(cost.type, cost.amount);
  72. }
  73. return true;
  74. }
  75. public Dictionary<ResourceType, int> GetAllResources()
  76. {
  77. return new Dictionary<ResourceType, int>(resources);
  78. }
  79. }