evershade/Assets/Scripts/Managers/PlayerManager.cs

192 lines
6.1 KiB
C#

using UnityEngine;
namespace Managers
{
public class PlayerManager : MonoBehaviour
{
public PlayerData playerData;
public InventoryManager inventoryManager;
public EquipmentManager equipmentManager;
public ToolbarManager toolbarManager;
public static PlayerManager Instance { get; private set; }
private void Awake()
{
if (Instance == null)
{
Instance = this;
inventoryManager = GameObject.Find("InventoryManager").GetComponent<InventoryManager>();
toolbarManager = GameObject.Find("ToolbarManager").GetComponent<ToolbarManager>();
equipmentManager = GameObject.Find("EquipmentManager").GetComponent<EquipmentManager>();
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<TSlot>(IItemManager<TSlot> sourceManager, int sourceSlotId,
IItemManager<TSlot> 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<TSlot>(IItemManager<TSlot> 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<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;
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);
}
}
}