Scriptum/Assets/Scripts/Chest/ChestController.cs

166 lines
4.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using GUI_Scripts;
using UnityEngine;
public class ChestController : BaseWarehouseController
{
[SerializeField] public GameObject chest;
[SerializeField] public List<Item> developerList = new List<Item>(); // FOR DEVELOPER TESTE - remove later !!!
private Animator m_Animator;
bool isTrigerred = false;
// Start is called before the first frame update
void Start()
{
m_Animator = gameObject.GetComponent<Animator>();
chest = gameObject; // set object on current GameObject
// FOR DEVELOPER TESTE - remove later !!!
for(int i = 0; i < developerList.Count; i++)
{
SetItemOnPosition(i, developerList[i]);
}
}
private bool beingHandled = false;
private static bool Opening;
private static bool Closing;
private IEnumerator OpenChestWithAnimation()
{
beingHandled = true;
// process pre-yield
m_Animator.SetTrigger("OpenIt");
yield return new WaitForSeconds( 0.4f );
this.OpenPanel();
InventoryManager.Instance.OpenPanel();
EquipmentManager.Instance.OpenPanel();
m_Animator.ResetTrigger("OpenIt");
// process post-yield
beingHandled = false;
}
// Update is called once per frame
void Update()
{
if (this._panel && this.isTrigerred && !this.isOpen) // we can open chest only when its closed
{
if (Input.GetKeyDown(KeyCode.E) && !beingHandled)
{
StartCoroutine(OpenChestWithAnimation());
}
}
if (!InventoryManager.Instance.isOpen)
{
if (Input.GetKeyDown(KeyCode.I))
{
InventoryManager.Instance.OpenPanel();
EquipmentManager.Instance.OpenPanel();
}
}
}
void OnTriggerExit2D(Collider2D collision)
{
if (this._panel != null)
{
this.ClosePanel();
}
this.isTrigerred = false;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "Player")
{
this.isTrigerred = true;
}
}
public override void ClosePanel()
{
base.ClosePanel();
InventoryManager.Instance.ClosePanel();
EquipmentManager.Instance.ClosePanel();
if (!beingHandled)
{
StartCoroutine(CloseChestWithAnimation());
}
ReactivateAnimation();
}
public void CloseChestWithAnimationForOtherPanels()
{
if (!beingHandled)
{
StartCoroutine(CloseChestWithAnimation());
}
ReactivateAnimation();
}
private IEnumerator CloseChestWithAnimation()
{
beingHandled = true;
// process pre-yield
yield return new WaitForSeconds( 0.2f );
m_Animator.SetTrigger("CloseIt");
yield return new WaitForSeconds( 0.1f );
m_Animator.ResetTrigger("CloseIt");
// process post-yield
beingHandled = false;
}
private void ReactivateAnimation()
{
m_Animator.SetTrigger("reactivate");
}
protected override void SetupPanel()
{
if(this.dynamicPanel)
{
this.dynamicPanel.GetComponent<ChestPanelController>().Setup(gameObject, _items);
}
}
// WARNING
// DANGER - functon override position which may be not free
///<summary>
/// Function for placed item in inventory on SPECYFIC position
/// Used by SceneInventoryManager for load saved items on their positions
///</summary>
// WHAT WITH FUNCTION - setupItemOnPosition() - ???
public void SetupItemInChest(int key, EquippableItem pickable)
{
this._items[key] = pickable;
}
public override void SetItemOnPosition(int _keyPosition, Item _item)
{
// Drag setup first end second object on the same panel - should only one - this wwere dropped item
// Becouse of this source slot from other panel is settuping in dropped panel too - list get empty item and it cause errors
if(_item != null)
{
this._items[_keyPosition] = _item;
Debug.Log("Put item on chest"+_item.name);
// Inform Map Chests manager about update - update list to be compliant with the local list
SceneChestManager.Instance.AddItemToChest(gameObject.name, _keyPosition, (EquippableItem)_item);
}
// if we assign null its removed later in EndDrag method
}
public override void RemoveItemFromPosition(int _keyPosition)
{
base.RemoveItemFromPosition(_keyPosition);
Debug.Log("Pick up item from chest");
// Inform Map Chests manager about update - update list to be compliant with the local list
SceneChestManager.Instance.RemoveItemFromChest(gameObject.name, _keyPosition);
}
}