174 lines
5.3 KiB
C#
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();
|
|
}
|
|
}
|
|
} |