Exemplo n.º 1
0
        private void SetState(State state)
        {
            _state           = state;
            _timeInState     = 0f;
            _timeOfAttention = 0f;
            _path            = null;
            _pathIndex       = -1;

            switch (state)
            {
            case State.Idle:
            {
                _timeOfAttention = 1f;                         // + UnityEngine.Random.value * 3f;
                _speed           = 0f;
            } break;

            case State.Pathfinding:
            {
                _timeOfAttention = 5f + UnityEngine.Random.value * 10f;

                var randomOpenTiles = Game.TerrainEntities.
                                      Select(t => t.GetModule <TerrainModule>(ModuleType.Terrain)).
                                      Where(t => t.IsOpen()).ToArray();

                var tile = randomOpenTiles[UnityEngine.Random.Range(0, randomOpenTiles.Length)];
                if (tile != null)
                {
                    _path = _pathfinding.GetPathToTile(tile.X, tile.Y);
                }

                if (_path?.Count > 1)
                {
                    _speed     = 1f;
                    _pathIndex = 0;
                }
                else
                {
                    SetState(State.Idle);
                }
            } break;

            case State.AvoidingObstacle:
            {
                _timeOfAttention = 1f;
                _speed           = 1f;
            } break;

            case State.Dead:
            {
                if (_agent != null)
                {
                    _agent.Disable();
                }
            } break;
            }
        }