Пример #1
0
    //---------------------------------------
    //      Action
    //---------------------------------------
    IEnumerator PatrolToNeighborCoroutine()
    {
        // Idle for random seconds
        idleTimer = Random.Range(owner.idleTimeMin, owner.idleTimeMax);
        while (idleTimer > 0)
        {
            //Debug.Log(idleTimer);
            if (owner.detectState != DetectState.Idle)
            {
                break;
            }

            idleTimer -= Time.deltaTime;
            yield return(null);
        }

        // Patrol to a random neighbor
        if (owner.detectState == DetectState.Idle)
        {
            List <Tile> neighbors  = MazeUTL.GetNeighborTilesWithoutWall(owner.CurrentTile);
            Tile        targetTile = MazeUTL.GetRandomTileFromList(neighbors);
            owner.TryMoveToTile(targetTile);
            do
            {
                yield return(new WaitForSeconds(0.01f));
            } while (owner.CurrentAction == ActionType.Walking);
            owner.StopWalkingAnim();
        }

        SetActionFinished("PatrolToNeighborCoroutine", true);
        yield return(null);
    }
Пример #2
0
    void GenerateStartPoint_Random(Maze maze)
    {
        Tile tile = MazeUTL.GetRandomTileFromList(maze.mazeTileList);

        tile.SpawnTileItem(level.startPointPrefab);
        level.tileStart = tile;
        TilesWithItem.Add(tile);
    }
Пример #3
0
    //---------------------------------------
    //      Action
    //---------------------------------------
    IEnumerator SearchAlertedTargetCoroutine()
    {
        Tile previousTile = owner.CurrentTile;

        // Smart search till the first intersection or being alerted
        List <Tile> path = MazeUTL.GetShortestPath(owner.CurrentTile, owner.alertedTarget.CurrentTile, (owner.searchRange));

        for (int i = 0; i < path.Count; i++)
        {
            previousTile = owner.CurrentTile;
            owner.TryMoveToTile(path[i]);
            do
            {
                yield return(new WaitForSeconds(0.01f));
            } while (owner.CurrentAction == ActionType.Walking);

            if ((owner.detectState == DetectState.Alerted))
            {
                break;
            }

            if (MazeUTL.GetNeighborTilesWithoutWall(owner.CurrentTile).Count >= 3)
            {
                break;
            }
        }

        // Random search during Warning state
        while (owner.detectState == DetectState.Warning)
        {
            List <Tile> neighbors = MazeUTL.GetNeighborTilesWithoutWall(owner.CurrentTile);
            if (neighbors.Count > 1)
            {
                neighbors.Remove(previousTile);
            }

            previousTile = owner.CurrentTile;
            owner.TryMoveToTile(MazeUTL.GetRandomTileFromList(neighbors));
            do
            {
                yield return(new WaitForSeconds(0.01f));
            } while (owner.CurrentAction == ActionType.Walking);
        }

        owner.StopWalkingAnim();

        SetActionFinished("SearchAlertedTargetCoroutine", true);
        yield return(null);
    }
Пример #4
0
    void GenerateObjective_Random(Maze maze)
    {
        // Make sure the objective is at least half map aways from the start point. Also, make it spawn at C shape wall layout.
        List <Tile> orgs = new List <Tile>();

        orgs.Add(level.tileStart);
        List <Tile> tileList = MazeUTL.UpdateTileListOutOfRange(maze.mazeTileList, orgs, Formula.CalculateObjectiveLeastDistance(LevelManager.instance.mazeDifficulty));

        tileList = MazeUTL.UpdateTileListWithDesiredWallLayout(tileList, WallLayout.C);
        Tile tile = MazeUTL.GetRandomTileFromList(tileList);

        tile.SpawnTileItem(level.objectivePrefab);
        level.tileObjective = tile;
        TilesWithItem.Add(tile);
    }
Пример #5
0
    List <Tile> GetItemSpawnRandomTiles(int numItems, int range, List <Tile> tileList, List <Tile> tilesLeft, List <Tile> exclusiveTiles)
    {
        if (numItems <= 0)
        {
            return(tileList);
        }

        tilesLeft = MazeUTL.UpdateTileListOutOfRange(tilesLeft, exclusiveTiles, range);
        Tile tile = MazeUTL.GetRandomTileFromList(tilesLeft);

        tileList.Add(tile);

        List <Tile> newExclusiveTiles = new List <Tile>();

        foreach (Tile t in exclusiveTiles)
        {
            newExclusiveTiles.Add(t);
        }
        newExclusiveTiles.Add(tile);

        numItems--;

        return(GetItemSpawnRandomTiles(numItems, range, tileList, tilesLeft, newExclusiveTiles));
    }