IEnumerator RespawnTimer()
    {
        yield return(new WaitForSeconds(respawnInterval));

        yield return(new WaitWhile(() => TilemapHelper.InPlayerRoom(this.gameObject)));

        yield return(new WaitForSeconds(0.5f));

        Vector3 position = FindVacantPosition();
        var     obj      = Instantiate(whitePowderPrefab, position, Quaternion.identity, this.transform.parent);

        RegisterPowder(obj.GetComponent <WhitePowder>());
    }
Exemple #2
0
    IEnumerator Loop()
    {
        while (true)
        {
            var food = sensors.observations.Find((f) => f.CompareTag("MoleRatFood"));
            if (state != State.DIGGING && food != null &&
                TilemapHelper.InPlayerRoom(this.gameObject))
            {
                targetObj = food;
                target    = food.transform.position;
                state     = State.MOVING;
                // yield return ShowExclamation();
            }

            switch (state)
            {
            case State.IDLE:
                yield return(Idle());

                state = State.MOVING;
                break;

            case State.MOVING:
                yield return(Move(food != null));

                if (food != null &&
                    Vector3.Distance(this.transform.position, food.transform.position) < 0.1f)
                {
                    state = State.DIGGING;
                }
                else
                {
                    state = State.IDLE;
                }
                break;

            case State.DIGGING:
                yield return(Dig());

                state = State.IDLE;
                break;
            }
        }
    }