void RandomWalk() { Tiles randomTile = knownTiles[Random.Range(0, knownTiles.Count - 1)]; walkableList = CheckPath(TileSystem.GetTile(transform.position), randomTile, knownTiles); seekState = SeekStates.FLEE; }
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; } } }