public IEnumerator DoInteraction(Unit unit) { if (state != State.Building) { yield return(null); yield break; } yield return(unit.navAgent.MoveToInteractableSeq(GetComponent <Interactable>())); if (buildMaterials.Count < data.recipe.Length) { ItemData[] missingIngredients = GetMissingIngredients(); for (int i = 0; i < missingIngredients.Length; i++) { Item foundItem = Item.FindItem(missingIngredients[i]); if (foundItem != null) { Storable storable = foundItem.GetComponent <Storable>(); yield return(storable.PickUpInteraction(unit)); yield return(unit.navAgent.MoveToInteractableSeq(GetComponent <Interactable>())); if (state != State.Normal) { unit.inventory.Withdraw(storable); AddBuildMaterial(foundItem); } yield break; } } } else { CompleteBuilding(); } yield return(new WaitForSeconds(2f)); // Keep building the other buildings nearby Collider[] nearby = Physics.OverlapSphere(unit.transform.position, 10f); if (nearby != null) { for (int i = 0; i < nearby.Length; i++) { Building nearbyBuilding = nearby[i].GetComponent <Building>(); if (nearbyBuilding && nearbyBuilding.state == State.Building) { yield return(nearbyBuilding.DoInteraction(unit)); } } } yield break; }