Scriptum/Assets/Scripts/Equipment/EquipmentManager.cs
2022-06-05 20:01:56 +02:00

270 lines
7.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class EquipmentManager : BaseWarehouseController
{
public static int MAX_ITEMS = 0;
[SerializeField] public EquippableItem _helmet;
[SerializeField] public EquippableItem _chest;
[SerializeField] public EquippableItem _boots;
[SerializeField] public EquippableItem _weapon;
[SerializeField] public EquippableItem _potion_one;
[SerializeField] public EquippableItem _potion_two;
[SerializeField] public EquippableItem _potion_three;
[SerializeField] public EquippableItem _potion_four;
[SerializeField] public EquippableItem _potion_five;
public static EquipmentManager Instance;
Dictionary<int, Item> equipment;
private void Awake()
{
if(Instance == null)
{
Instance = this;
equipment = new Dictionary<int, Item>() {
{ 0, _helmet },
{ 1, _chest },
{ 2, _boots },
{ 3, _weapon },
{ 4, _potion_one },
{ 5, _potion_two },
{ 6, _potion_three },
{ 7, _potion_four },
{ 8, _potion_five }
};
}else if (Instance != this)
{
Destroy(gameObject);
}
}
protected override void SetupPanel()
{
if(this.dynamicPanel)
{
this.dynamicPanel.GetComponent<EquipmentPanelController>().Setup(gameObject, equipment);
}
}
// Handle in Manager items local list
public override void SetItemOnPosition(int _keyPosition, Item _item)
{
// in qeuippment panel its case where we drop drop on empty slot
if(_item == null) // if we move eg. form chest to eq Drop work on Eq Panel where dropitemSlot.Item is Null
return;
_keyPosition = MapItemTypeToSlotNumber((EquippableItem)_item);
this.equipment[_keyPosition] = _item;
this.ApplyEquipmentObject(true, (EquippableItem)_item);
base.SetItemOnPosition(_keyPosition, _item);
}
// Remove from Manager items local list
public override void RemoveItemFromPosition(int _keyPosition)
{
this.equipment.Remove(_keyPosition);
this.ApplyEquipmentObject(_keyPosition);
base.RemoveItemFromPosition(_keyPosition);
}
/*
* Function decide in which slot item should be handled
* Mach item to dictionary key based on items equippment type
* return: dictionary key
*/
private int MapItemTypeToSlotNumber(EquippableItem _item)
{
int key=-1;
if(_item == null)
{
Debug.LogError("Ten item w ogóle nie powinien być rozpatrywany jako dodany do ekwipunku - nigdy nie był typu EquippableItem");
}
switch(_item.EquipmentType)
{
case EquipmentType.Helmet:
{
key = 0;
break;
}
case EquipmentType.Chest:
{
key = 1;
break;
}
case EquipmentType.Boots:
{
key = 2;
break;
}
case EquipmentType.Weapon:
{
key = 3;
break;
}
case EquipmentType.Potion:
{
key = 4;
break;
}
case EquipmentType.Bracelet:
{
key = 5;
break;
}
case EquipmentType.Necklet:
{
key = 6;
break;
}
case EquipmentType.Ring:
{
if(!equipment.ContainsKey(7) || equipment[7] == null)
{
key = 7;
}
if(!equipment.ContainsKey(8) || equipment[8] == null)
{
key = 8;
}
break;
}
default:
{
Debug.Log("Can't mach number to item type");
break;
}
}
return key;
}
/*
* applu EquippableItem to be able to see actual equipment status - mapped with 'qeuipment' Dictioanry which is not showed in amnager panel :/
*/
public void ApplyEquipmentObject(bool put, EquippableItem _item = null)
{
switch(_item.EquipmentType)
{
case EquipmentType.Helmet:
{
_helmet = put ? _item : null;
break;
}
case EquipmentType.Chest:
{
_chest = put ? _item : null;
break;
}
case EquipmentType.Boots:
{
_boots = put ? _item : null;
break;
}
case EquipmentType.Weapon:
{
_weapon = put ? _item : null;
break;
}
case EquipmentType.Potion:
{
_potion_one = put ? _item : null;
break;
}
case EquipmentType.Bracelet:
{
_potion_two = put ? _item : null;
break;
}
case EquipmentType.Necklet:
{
_potion_three = put ? _item : null;
break;
}
case EquipmentType.Ring:
{
if(!equipment.ContainsKey(7) || equipment[7] == null)
{
_potion_four = put ? _item : null;
}
if(!equipment.ContainsKey(8) || equipment[8] == null)
{
_potion_five = put ? _item : null;
}
break;
}
default:
{
Debug.Log("Can't mach number to item type");
break;
}
}
}
public void ApplyEquipmentObject(int _keyPosition)
{
switch(_keyPosition)
{
case 0:
{
_helmet = null;
break;
}
case 1:
{
_chest = null;
break;
}
case 2:
{
_boots = null;
break;
}
case 3:
{
_weapon = null;
break;
}
case 4:
{
_potion_one = null;
break;
}
case 5:
{
_potion_two = null;
break;
}
case 6:
{
_potion_three = null;
break;
}
case 7:
{
_potion_four = null;
break;
}
case 9:
{
_potion_five = null;
break;
}
}
}
}