private bool Try_CraftItem(CraftData craftData) { int elementCount = GetComponentsInChildren <QueueElement>().Length; if (elementCount < m_MaxElements) { var newElement = Instantiate <QueueElement>(m_QueueElementTemplate); newElement.gameObject.SetActive(true); newElement.transform.SetParent(m_QueueParent); newElement.transform.SetAsFirstSibling(); newElement.transform.localPosition = Vector3.zero; newElement.transform.localScale = Vector3.one; newElement.Initialize(craftData, m_Inventory); newElement.Cancel.AddListener(On_CraftingCanceled); if (elementCount == 0) { newElement.StartCrafting(); newElement.Complete.AddListener(StartNext); m_ActiveElement = newElement; } else { m_Queue.Insert(0, newElement); } return(true); } return(false); }
private void On_CraftingCanceled(QueueElement queueElement) { if (m_Queue.Contains(queueElement)) { m_Queue.Remove(queueElement); } if (queueElement == m_ActiveElement) { StartNext(); } }
private void StartNext() { if (m_Queue.Count > 0) { var next = m_Queue[m_Queue.Count - 1]; m_Queue.Remove(next); next.StartCrafting(); next.Complete.AddListener(StartNext); m_ActiveElement = next; } }