Exemplo n.º 1
0
 void RandomWalk()
 {
     Tiles randomTile = knownTiles[Random.Range(0, knownTiles.Count - 1)];
     walkableList = CheckPath(TileSystem.GetTile(transform.position), randomTile, knownTiles);
     seekState = SeekStates.FLEE;
 }
Exemplo n.º 2
0
    void CheckSeekState()
    {
        if (seekState == SeekStates.SAFE)
        {
            if (knownObstacles.Count > 0)
            {
                Tiles randomDestructible = knownObstacles[Random.Range(0, knownObstacles.Count - 1)];
                Tiles safeTile = null;

                for (int i = 0; i < randomDestructible.neighbours.Count; i++)
                {
                    if (knownTiles.Contains(randomDestructible.neighbours[i]))
                    {
                        randomDestructible = randomDestructible.neighbours[i];
                    }
                }

                if (randomDestructible != null)
                {
                    forbiddenTiles.Add(randomDestructible);

                    foreach (Tiles tile in Bomb.GetWarnedTiles(_backpackComp.firePower, randomDestructible.transform))
                    {
                        forbiddenTiles.Add(tile);
                    }

                    for (int i = 0; i < knownTiles.Count; i++)
                    {
                        if (!forbiddenTiles.Contains(knownTiles[i]))
                        {
                            safeTile = knownTiles[i];
                            continue;
                        }
                    }

                    if (safeTile != null)
                    {
                        walkableList = CheckPath(_movementComp.currentTile, randomDestructible, knownTiles);
                        fleeList = CheckPath(randomDestructible, safeTile, knownTiles);

                        if (walkableList.Count > 0 && fleeList.Count > 0)
                        {
                            seekState = SeekStates.WALKTOBOMB;
                        }
                        else
                        {
                            RandomWalk();
                        }

                        forbiddenTiles.Clear();
                    }
                    else
                    {
                        RandomWalk();
                    }
                }
                else
                {
                    RandomWalk();
                }
            }
            else
            {
                RandomWalk();
            }
        }
        else if (seekState == SeekStates.WALKTOBOMB)
        {
            FollowList();

            if (walkableList.Count == 0)
            {
                _backpackComp.DropBomb(_movementComp.currentTile);
                walkableList = fleeList;
                seekState = SeekStates.FLEE;
            }
        }
        else if (seekState == SeekStates.FLEE)
        {
            FollowList();

            if (walkableList.Count == 0)
            {
                seekState = SeekStates.SAFE;
            }
        }
    }