using UnityEngine; namespace Managers { public class PlayerManager : MonoBehaviour { public PlayerData playerData; public InventoryManager inventoryManager; public EquipmentManager equipmentManager; public ToolbarManager toolbarManager; public BoxManager boxManager; public static PlayerManager Instance { get; private set; } private void Awake() { if (Instance == null) { Instance = this; inventoryManager = GameObject.Find("InventoryManager").GetComponent(); toolbarManager = GameObject.Find("ToolbarManager").GetComponent(); equipmentManager = GameObject.Find("EquipmentManager").GetComponent(); boxManager = GameObject.Find("BoxManager").GetComponent(); DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } public void TakeDamage(int damage) { playerData.health -= damage; if (playerData.health <= 0) GameManager.Instance.EndGame(); } public void Heal(int amount) { playerData.health += amount; if (playerData.health > playerData.maxHealth) playerData.health = playerData.maxHealth; } public void AddExperience(int amount) { playerData.experience += amount; if (playerData.experience >= 100) { playerData.level++; playerData.experience = 0; } } public void AddGold(int amount) { playerData.gold += amount; } public void RemoveGold(int amount) { playerData.gold -= amount; } public void AddItemToInventory(GameItem item) { inventoryManager.AddItemToOpenSlot(item); } public void AddItemToToolbar(GameItem item) { toolbarManager.AddItemToOpenSlot(item); } public void AddItemToInventorySlot(GameItem item, int slotId) { inventoryManager.AddItemToSlot(item, slotId); } public void AddItemToToolbarSlot(GameItem item, int slotId) { toolbarManager.AddItemToSlot(item, slotId); } public void AddItemToEquipmentSlot(GameItem item, int slotId) { equipmentManager.AddItemToSlot(item, slotId); } // move item from one manager to another public void MoveItem(IItemManager sourceManager, int sourceSlotId, IItemManager destinationManager, int destinationSlotId) where TSlot : Slot { var item = sourceManager.GetItemFromSlot(sourceSlotId); if (item == null) return; sourceManager.RemoveItemFromSlot(destinationSlotId); destinationManager.AddItemToSlot(item, destinationSlotId); } // swap items within the same manager public void SwapItems(IItemManager manager, int slotId1, int slotId2) where TSlot : Slot { var item1 = manager.GetItemFromSlot(slotId1); var item2 = manager.GetItemFromSlot(slotId2); manager.RemoveItemFromSlot(slotId1); manager.RemoveItemFromSlot(slotId2); if (item1 != null) manager.AddItemToSlot(item1, slotId2); if (item2 != null) manager.AddItemToSlot(item2, slotId1); } // swap items between two different managers public void SwapItems(IItemManager manager1, int slotId1, IItemManager manager2, int slotId2) { var item1 = manager1.GetItemFromSlot(slotId1); var item2 = manager2.GetItemFromSlot(slotId2); manager1.RemoveItemFromSlot(slotId1); manager2.RemoveItemFromSlot(slotId2); if (item1 != null) manager2.AddItemToSlot(item1, slotId2); if (item2 != null) manager1.AddItemToSlot(item2, slotId1); } //swap items by slot type and slot id public void SwapItems(Slot.SlotType slotType1, int slotId1, Slot.SlotType slotType2, int slotId2) { var manager1 = GetManagerBySlotType(slotType1); var manager2 = GetManagerBySlotType(slotType2); if (manager1 == null || manager2 == null) return; SwapItems(manager1, slotId1, manager2, slotId2); } // gets manager by slot type public IItemManager GetManagerBySlotType(Slot.SlotType slotType) { switch (slotType) { case Slot.SlotType.Inventory: Debug.Log("Getting Inventory Manager"); return inventoryManager; case Slot.SlotType.Toolbar: Debug.Log("Getting Toolbar Manager"); return toolbarManager; case Slot.SlotType.Equipment: Debug.Log("Getting Equipment Manager"); return equipmentManager; case Slot.SlotType.Box: Debug.Log("Getting Box Manager"); return boxManager; default: return null; } } // remove item by slot type and slot id public void RemoveItemBySlotType(Slot.SlotType slotType, int slotId) { var manager = GetManagerBySlotType(slotType); if (manager == null) return; manager.RemoveItemFromSlot(slotId); } public void RemoveItemFromInventorySlot(int slotId) { inventoryManager.RemoveItemFromSlot(slotId); } public void RemoveItemFromToolbarSlot(int slotId) { toolbarManager.RemoveItemFromSlot(slotId); } public void RemoveItemFromEquipmentSlot(int slotId) { equipmentManager.RemoveItemFromSlot(slotId); } public Slot GetSlot(Slot.SlotType slotType, int slotId) { Debug.Log("Getting SlotType " + slotType + " / " + slotId); var manager = GetManagerBySlotType(slotType); if (manager == null) Debug.LogError("Manager not found"); return manager.GetSlot(slotId); } } }