197 lines
6.3 KiB
C#
197 lines
6.3 KiB
C#
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<InventoryManager>();
|
|
toolbarManager = GameObject.Find("ToolbarManager").GetComponent<ToolbarManager>();
|
|
equipmentManager = GameObject.Find("EquipmentManager").GetComponent<EquipmentManager>();
|
|
boxManager = GameObject.Find("BoxManager").GetComponent<BoxManager>();
|
|
|
|
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;
|
|
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);
|
|
}
|
|
}
|
|
} |