using UnityEngine; namespace Managers { public class PlayerManager : MonoBehaviour { public PlayerData playerData; public GameObject player; [SerializeField] private InventoryManager inventoryManager; [SerializeField] private ToolbarManager toolbarManager; [SerializeField] private EquipmentManager equipmentManager; // [SerializeField] private BoxManager boxManager; private void Awake() { // Find object with tag Player DontDestroyOnLoad(gameObject); inventoryManager = player.AddComponent(); inventoryManager.Initialize(playerData); toolbarManager = player.AddComponent(); toolbarManager.Initialize(playerData); equipmentManager = player.AddComponent(); equipmentManager.Initialize(playerData); // Box Data should not be tied to character Data. // boxManager = playerData.AddComponent(); // boxManager.Initialize(); } 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.Instance.AddItemToOpenSlot(item); } public void AddItemToInventorySlot(GameItem item, int slotId) { inventoryManager.AddItemToSlot(item, slotId); } public void AddItemToInventorySlot(GameItem item) { inventoryManager.AddItemToOpenSlot(item); } public void AddItemToToolbarSlot(GameItem item, int slotId) { toolbarManager.AddItemToSlot(item, slotId); } public void AddItemToEquipmentSlot(GameItem item, int slotId) { equipmentManager.AddItemToSlot(item, slotId); } // 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.Instance; 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 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); } // Load save data public Slot GetActiveToolbarSlot() { return ToolbarManager.Instance.GetActiveToolbarSlot(); } } }