using System.Collections; using System.Collections.Generic; using GUI_Scripts; using UnityEngine; public class ChestController : BaseWarehouseController { [SerializeField] public GameObject chest; [SerializeField] public List developerList = new List(); // 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(); 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().Setup(gameObject, _items); } } // WARNING // DANGER - functon override position which may be not free /// /// Function for placed item in inventory on SPECYFIC position /// Used by SceneInventoryManager for load saved items on their positions /// // 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); } }