Ejemplo n.º 1
0
    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;
    }