evershade/Assets/Scripts/Managers/PlayerManager.cs

174 lines
5.3 KiB
C#

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>();
inventoryManager.Initialize(playerData);
toolbarManager = player.AddComponent<ToolbarManager>();
toolbarManager.Initialize(playerData);
equipmentManager = player.AddComponent<EquipmentManager>();
equipmentManager.Initialize(playerData);
// Box Data should not be tied to character Data.
// boxManager = playerData.AddComponent<BoxManager>();
// 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<Slot> manager1, int slotId1, IItemManager<Slot> 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<Slot> 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();
}
}
}