示例#1
0
    void Setup()
    {
        //find grid size
        roomHeight = Mathf.RoundToInt(roomSizeWorldUnits.x / worldUnitsInOneGridCell);
        roomWidth  = Mathf.RoundToInt(roomSizeWorldUnits.y / worldUnitsInOneGridCell);
        //create grid
        grid = new gridSpace[roomWidth, roomHeight];
        //set grid's default state
        for (int x = 0; x < roomWidth - 1; x++)
        {
            for (int y = 0; y < roomHeight - 1; y++)
            {
                //make every cell "empty"
                grid[x, y] = gridSpace.empty;
            }
        }
        //set first walker
        //init list
        walkers = new List <walker>();
        //create a walker
        walker newWalker = new walker();

        newWalker.dir = RandomDirection();
        playerSpawn   = newWalker.dir;
        //find center of grid
        Vector2 spawnPos = new Vector2(Mathf.RoundToInt(roomWidth / 2.0f),
                                       Mathf.RoundToInt(roomHeight / 2.0f));

        newWalker.pos = spawnPos;
        //add walker to list
        walkers.Add(newWalker);
    }
示例#2
0
    void Setup()
    {
        roomHeight = Mathf.RoundToInt(roomSizeWorldUnits.x / worldUnitsInOneGridCell);
        roomWidth  = Mathf.RoundToInt(roomSizeWorldUnits.y / worldUnitsInOneGridCell);

        grid = new gridSpace[roomWidth, roomHeight];

        for (int x = 0; x < roomWidth - 1; x++)
        {
            for (int y = 0; y < roomHeight - 1; y++)
            {
                grid[x, y] = gridSpace.empty;
            }
        }
        //Inicializar lista
        walkers = new List <walker>();
        //Crear walker
        walker newWalker = new walker();

        newWalker.dir = RandomDirection();
        //encontrar centro del grid
        spawnPos = new Vector2(Mathf.RoundToInt(roomWidth / 2.0f),
                               Mathf.RoundToInt(roomHeight / 2.0f));
        newWalker.pos = spawnPos;
        //agregar walker a lista
        walkers.Add(newWalker);
    }
示例#3
0
    private void Setup()
    {
        _newGrid.SetupGrid();

        //make sure our tilemaps are clear. Can be an issue after coming from the editor
        topMap.ClearAllTiles();
        botMap.ClearAllTiles();
        darkGrassMap.ClearAllTiles();
        lightGrassMap.ClearAllTiles();

        GenerateNoisemap();

        //set first walker
        _walkers = new List <walker>();  // init list
        walker newWalker = new walker(); //create a walker

        newWalker.dir = RandomDirection();
        //find center of grid
        Vector2 spawnPos = new Vector2(Mathf.RoundToInt(_newGrid.roomWidth / 2.0f),
                                       Mathf.RoundToInt(_newGrid.roomHeight / 2.0f));

        newWalker.pos = spawnPos;
        //add walker to our list
        _walkers.Add(newWalker);
    }
    //fungsi untuk membuat ruangan pada permainan
    void Setup()
    {
        //Mencari ukuran Grid berdasarkan ukuran room yang ditentukan
        //ukuran room yang ditentukan sebesar 30x30
        roomHeight = Mathf.RoundToInt(roomSizeWorldUnits.x / worldUnitsInOneGridCell);
        roomWidth  = Mathf.RoundToInt(roomSizeWorldUnits.y / worldUnitsInOneGridCell);
        //Menciptakan Grid
        grid = new gridSpace[roomWidth, roomHeight];
        //membuat gridspace kosong sebagai default gridspace
        for (int x = 0; x < roomWidth - 1; x++)
        {
            for (int y = 0; y < roomHeight - 1; y++)
            {
                grid[x, y] = gridSpace.empty;
            }
        }
        //Membuat list Walker
        walkers = new List <walker>();
        //Menciptakan walker
        walker newWalker = new walker();

        newWalker.dir = RandomDirection();
        //Mencari bagian tengah pada Grid
        Vector2 spawnPos = new Vector2(Mathf.RoundToInt(roomWidth / 2.0f),
                                       Mathf.RoundToInt(roomHeight / 2.0f));

        newWalker.pos = spawnPos;
        //Memasukan Walker kedalam walker list
        walkers.Add(newWalker);
        // AstarPath.active.Scan();
    }
示例#5
0
    void Setup()
    {
        roomHeight = Mathf.RoundToInt(roomSizeWorldUnits.x / worldUnitsInOneGridCell);
        roomWidth  = Mathf.RoundToInt(roomSizeWorldUnits.y / worldUnitsInOneGridCell);

        grid = new gridSpace[roomWidth, roomHeight];

        for (int x = 0; x < roomWidth - 1; x++)
        {
            for (int y = 0; y < roomHeight - 1; y++)
            {
                grid[x, y] = gridSpace.empty;
            }
        }

        walkers = new List <walker>();

        walker newWalker = new walker();

        newWalker.dir = RandomDirection();

        Vector2 spawnPos = new Vector2(Mathf.RoundToInt(roomWidth / 2f), Mathf.RoundToInt(roomHeight / 2f));

        newWalker.pos = spawnPos;

        walkers.Add(newWalker);
    }
    void Start()
    {
        currentHealth = initialHealth;
        animator      = GetComponent <Animator>();
        timer         = 0;

        WalkerParticleSystem = GetComponent <ParticleSystem>();
        WalkerParticleSystem.Stop();

        w = GetComponent <walker> ();
    }
 // Mark grid spaces as floor.
 void CreateFloors() {
     int iterations = 0;
     do {
         // Mark grid tile as floor at every walker position.
         foreach (walker myWalker in walkers) {
             gridTiles[(int)myWalker.pos.x, (int)myWalker.pos.y] = Tile.floor;
         }
         // Chance to destroy a walker.
         int numberChecks = walkers.Count;
         for (int i = 0; i < numberChecks; i++) {
             if (walkers.Count > 1 && Random.value < walkerDestroyPerc) {
                 walkers.RemoveAt(i);
                 break;
             }
         }
         // Chance for walker to chance direction.
         for (int i = 0; i < walkers.Count; i++) {
             if (Random.value < walkerChangeDirPerc) {
                 walker thisWalker = walkers[i];
                 thisWalker.dir = RandomDirection();
                 walkers[i] = thisWalker;
             }
         }
         // Chance to spawn a new walker.
         numberChecks = walkers.Count;
         for (int i = 0; i < numberChecks; i++) {
             if (Random.value < walkerSpawnPerc && walkers.Count < maxWalkers) {
                 walker newWalker = new walker();
                 newWalker.dir = RandomDirection();
                 newWalker.pos = walkers[i].pos;
                 walkers.Add(newWalker);
             }
         }
         // Move walkers.
         for (int i = 0; i < walkers.Count; i++) {
             walker thisWalker = walkers[i];
             thisWalker.pos += thisWalker.dir;
             walkers[i] = thisWalker;
         }
         // Avoid boarders of the grid to leave at least 1 tile for walls.
         for (int i = 0; i < walkers.Count; i++) {
             walker thisWalker = walkers[i];
             thisWalker.pos.x = Mathf.Clamp(thisWalker.pos.x, 1, gridSizeX-2); // -(nodeDiameter*2) ???
             thisWalker.pos.y = Mathf.Clamp(thisWalker.pos.y, 1, gridSizeY-2);
             walkers[i] = thisWalker;
         }
         if ((float)NumberOfFloors() / (float)gridTiles.Length > gridPercToFill) {
             break;
         }
         iterations++;
     }while(iterations < 9999);
 }
示例#8
0
        public override void EvtCreate()
        {
            cur_depth = 0;
            depth     = 500;
            width     = 1000;
            height    = 1000;
            grid_size = 16;
            Xgrids    = width / grid_size;
            Ygrids    = height / grid_size;
            walkers   = new List <walker>();

            walkerGen  = new walker();
            walkerGen2 = new walker();

            walkers.Add(walkerGen);

            walkerGen.pos = new Vector2(width / 2, height / 2);
        }
 void Setup() {
     tileDiameter = tileRadius*2;
     gridSizeX = Mathf.RoundToInt(tileGridWorldSize.x / tileDiameter);
     gridSizeY = Mathf.RoundToInt(tileGridWorldSize.y / tileDiameter);
     gridTiles = new Tile[gridSizeX, gridSizeY];
     for (int x = 0; x < gridSizeX-1; x++) {
         for (int y = 0; y < gridSizeY-1; y++) {
             gridTiles[x,y] = Tile.empty;
         }
     }
     // Setup the first walker in the middle of the grid.
     walkers = new List<walker>();
     walker newWalker = new walker();
     newWalker.dir = RandomDirection();
     Vector2 spawnPos = new Vector2(Mathf.RoundToInt(gridSizeX/2f), Mathf.RoundToInt(gridSizeY/2f));
     newWalker.pos = spawnPos;
     walkers.Add(newWalker);
 }
示例#10
0
    void Setup()
    {
        //find grid size
        roomHeight = Mathf.RoundToInt(roomSizeWorldUnits.x);
        roomWidth  = Mathf.RoundToInt(roomSizeWorldUnits.y);
        //create grid
        grid  = new bool[roomWidth, roomHeight];
        names = new string[roomWidth, roomHeight];

        possibleBoss = new List <Vector2>();
        possibleInit = new List <Vector2>();
        //set grid's default state
        for (int x = 0; x < roomWidth - 1; x++)
        {
            for (int y = 0; y < roomHeight - 1; y++)
            {
                grid[x, y]  = false;
                names[x, y] = "";
            }
        }

        roomScript = GetComponent <RoomCreator>();

        //set first walker
        //init list
        walkers = new List <walker>();
        //create a walker
        walker newWalker = new walker();

        newWalker.dir = RandomDirection();
        //find center of grid
        Vector2 spawnPos = new Vector2(Mathf.RoundToInt(roomWidth / 2.0f),
                                       Mathf.RoundToInt(roomHeight / 2.0f));

        newWalker.pos = spawnPos;
        //add walker to list
        walkers.Add(newWalker);
    }
    private void CreateFloors()
    {
        int iteration = 0;

        do
        {
            // Create floor at position of every walker
            foreach (walker myWalker in walkers)
            {
                grid[(int)myWalker.pos.x, (int)myWalker.pos.y] = gridSpace.floor;
            }

            // Chance: destroy walker
            int numberChecks = walkers.Count;
            for (int i = 0; i < numberChecks; i++)
            {
                if (UnityEngine.Random.value < level.chanceWalkerDestroy && walkers.Count > 1)
                {
                    walkers.RemoveAt(i);
                    break;
                }
            }

            // Chance: walker pick new direction
            for (int i = 0; i < walkers.Count; i++)
            {
                if (UnityEngine.Random.value < level.chanceWalkerChangeDir)
                {
                    walker thisWalker = walkers[i];
                    thisWalker.dir = RandomDirection();
                    walkers[i]     = thisWalker;
                }
            }

            // Chance: spawn new walker
            numberChecks = walkers.Count;
            for (int i = 0; i < numberChecks; i++)
            {
                if (UnityEngine.Random.value < level.chanceWalkerSpawn && walkers.Count < level.maxWalkers)
                {
                    walker newWalker = new walker();
                    newWalker.dir = RandomDirection();
                    newWalker.pos = walkers[i].pos;
                    walkers.Add(newWalker);
                }
            }

            // Move walkers
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                thisWalker.pos += thisWalker.dir;
                walkers[i]      = thisWalker;
            }

            // Avoid boarder of grid
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                thisWalker.pos.x = Mathf.Clamp(thisWalker.pos.x, 1, roomWidth - 2);
                thisWalker.pos.y = Mathf.Clamp(thisWalker.pos.y, 1, roomHeight - 2);
                walkers[i]       = thisWalker;
            }

            // Check to exit loop
            if ((float)NumberOfFloors() / (float)grid.Length > level.percentToFill)
            {
                break;
            }
            iteration++;
        } while (iteration < 100000);
    }
示例#12
0
    void CreateFloors()
    {
        int iterations = 0;

        do
        {
            foreach (walker myWalker in walkers)
            {
                grid[(int)myWalker.pos.x, (int)myWalker.pos.y] = gridSpace.floor;
            }

            int numberChecks = walkers.Count;
            for (int i = 0; i < numberChecks; i++)
            {
                if (Random.value < walkerDestroyChance && walkers.Count > 1)
                {
                    walkers.RemoveAt(i);
                    break;
                }
            }

            for (int i = 0; i < walkers.Count; i++)
            {
                if (Random.value < walkerDirChangeChance)
                {
                    walker thisWalker = walkers[i];
                    thisWalker.dir = RandomDirection();
                    walkers[i]     = thisWalker;
                }
            }

            numberChecks = walkers.Count;
            for (int i = 0; i < numberChecks; i++)
            {
                if (Random.value < walkerSpawnChance && walkers.Count < maxWalkers)
                {
                    walker newWalker = new walker();
                    newWalker.dir = RandomDirection();
                    newWalker.pos = walkers[i].pos;
                    walkers.Add(newWalker);
                }
            }

            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                thisWalker.pos += thisWalker.dir;
                walkers[i]      = thisWalker;
            }

            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                thisWalker.pos.x = Mathf.Clamp(thisWalker.pos.x, 1, roomWidth - 2);
                thisWalker.pos.y = Mathf.Clamp(thisWalker.pos.y, 1, roomHeight - 2);
                walkers[i]       = thisWalker;
            }

            if ((float)NumberOfFloors() / (float)grid.Length > percentToFill)
            {
                break;
            }
            iterations++;
        } while (iterations < 100000);
    }
    IEnumerator CreateFloors()
    {
        int iterations = 0;        //loop tidak akan bekerja untuk selamanya

        do
        {
            bool spawned = false;
            //membuat template lantai pada setiap posisi walker yang disimpan dari walker list
            foreach (walker myWalker in walkers)
            {
                if (grid[(int)myWalker.pos.x, (int)myWalker.pos.y] != gridSpace.floor)
                {
                    Spawn(myWalker.pos.x, myWalker.pos.y, floorObj);                   //update visuals
                    spawned = true;
                }
                grid[(int)myWalker.pos.x, (int)myWalker.pos.y] = gridSpace.floor;
            }
            //Kemungkinan untuk menghapus suatu walker
            int numberChecks = walkers.Count;
            for (int i = 0; i < numberChecks; i++)
            {
                //apabila Counter Walker dimulai lebih dari 1
                //dan memiliki kemungkinan lebih rendah untuk dihancurkan
                if (Random.value < chanceWalkerDestoy && walkers.Count > 1)
                {
                    walkers.RemoveAt(i);
                    Debug.Log(walkers.Count);
                    break;
                }
            }
            //Kemungkinan untuk walker mengambil arah baru dari list
            for (int i = 0; i < walkers.Count; i++)
            {
                //apabila random value yang didapat lebih kecil dari kemungkinan mengambil arah baru
                if (Random.value < chanceWalkerChangeDir)
                {
                    walker thisWalker = walkers[i];
                    thisWalker.dir = RandomDirection();
                    walkers[i]     = thisWalker;
                }
            }
            //Kemungkinan untuk menciptakan walker yang baru
            numberChecks = walkers.Count;
            for (int i = 0; i < numberChecks; i++)
            {
                //apabila random value yang didapat lebih kecil dari kemungkinan menciptakan walker baru
                //dan cap jumlah walker agar tidak melebihi walker yang dibuat
                if (Random.value < chanceWalkerSpawn && walkers.Count < maxWalkers)
                {
                    walker newWalker = new walker();
                    newWalker.dir = RandomDirection();
                    newWalker.pos = walkers[i].pos;
                    walkers.Add(newWalker);
                }
            }
            //Menggerakkan walker
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                thisWalker.pos += thisWalker.dir;
                walkers[i]      = thisWalker;
            }
            //membatasi walker agar tidak keluar dari grid
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                //membuat ruang untuk dinding
                thisWalker.pos.x = Mathf.Clamp(thisWalker.pos.x, 1, roomWidth - 2);
                thisWalker.pos.y = Mathf.Clamp(thisWalker.pos.y, 1, roomHeight - 2);
                walkers[i]       = thisWalker;
            }
            //mengecek iterasi
            if ((float)NumberOfFloors() / (float)grid.Length > percentToFill)
            {
                break;
            }
            iterations++;
            if (spawned)
            {
                yield return(new WaitForSeconds(timeBetweenLoops));               //make it wait
            }
        }while(iterations < 100000);
        StartCoroutine(CreateWalls());
    }
示例#14
0
    void CreateFloors()
    {
        int iterations = 0;//loop will not run forever

        do
        {
            //create floor at position of every walker
            foreach (walker myWalker in walkers)
            {
                grid[(int)myWalker.pos.x, (int)myWalker.pos.y] = gridSpace.floor;
            }
            //chance: destroy walker
            int numberChecks = walkers.Count; //might modify count while in this loop
            for (int i = 0; i < numberChecks; i++)
            {
                //only if its not the only one, and at a low chance
                if (Random.value < chanceWalkerDestoy && walkers.Count > 1)
                {
                    walkers.RemoveAt(i);
                    break; //only destroy one per iteration
                }
            }
            //chance: walker pick new direction
            for (int i = 0; i < walkers.Count; i++)
            {
                if (Random.value < chanceWalkerChangeDir)
                {
                    walker thisWalker = walkers[i];
                    thisWalker.dir = RandomDirection();
                    walkers[i]     = thisWalker;
                }
            }
            //chance: spawn new walker
            numberChecks = walkers.Count; //might modify count while in this loop
            for (int i = 0; i < numberChecks; i++)
            {
                //only if # of walkers < max, and at a low chance
                if (Random.value < chanceWalkerSpawn && walkers.Count < maxWalkers)
                {
                    //create a walker
                    walker newWalker = new walker();
                    newWalker.dir = RandomDirection();
                    newWalker.pos = walkers[i].pos;
                    walkers.Add(newWalker);
                }
            }
            //move walkers
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                thisWalker.pos += thisWalker.dir;
                walkers[i]      = thisWalker;
            }
            //avoid boarder of grid
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                //clamp x,y to leave a 1 space boarder: leave room for walls
                thisWalker.pos.x = Mathf.Clamp(thisWalker.pos.x, 1, roomWidth - 2);
                thisWalker.pos.y = Mathf.Clamp(thisWalker.pos.y, 1, roomHeight - 2);
                walkers[i]       = thisWalker;
            }
            //check to exit loop
            if ((float)NumberOfFloors() / (float)grid.Length > percentToFill)
            {
                break;
            }
            iterations++;
        } while (iterations < 100000);
    }
示例#15
0
    void CreateFloors()
    {
        int iterations = 0;

        do
        {
            //poner piso en la pos de cada walker
            for (int i = 0; i < walkers.Count; i++)
            {
                grid[(int)walkers[i].pos.x, (int)walkers[i].pos.y] = gridSpace.floor;
            }

            //chance: destruir walker
            int numberChecks = walkers.Count;
            for (int i = 0; i < numberChecks; i++)
            {
                if (Random.value < chanceWalkerDestroy && walkers.Count > 1)
                {
                    walkers.RemoveAt(i);
                    break; //destruye 1 por iteración
                }
            }

            //chance: walker elige nueva dir
            for (int i = 0; i < walkers.Count; i++)
            {
                if (Random.value < chanceWalkerChangeDir)
                {
                    walker thisWalker = walkers[i];
                    thisWalker.dir = RandomDirection();
                    walkers[i]     = thisWalker;
                }
            }

            //chance:spawn new walker
            numberChecks = walkers.Count;
            for (int i = 0; i < numberChecks; i++)
            {
                if (Random.value < chanceWalkerSpawn && walkers.Count < maxWalkers)
                {
                    walker newWalker = new walker();
                    newWalker.dir = RandomDirection();
                    newWalker.pos = walkers[i].pos;
                    walkers.Add(newWalker);
                }
            }

            //mover walkers
            for (int i = 0; i < walkers.Count; i++)
            {
                walker  thisWalker = walkers[i];
                Vector3 walkerDir  = thisWalker.dir;
                thisWalker.pos += walkerDir;
                walkers[i]      = thisWalker;
            }

            //evitar borde
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                thisWalker.pos.x = Mathf.Clamp(thisWalker.pos.x, 1, roomWidth - 2);
                thisWalker.pos.y = Mathf.Clamp(thisWalker.pos.y, 1, roomHeight - 2);
                walkers[i]       = thisWalker;
            }

            //romper loop
            if ((float)NumberOfFloors() / (float)grid.Length > percentToFill)
            {
                break;
            }
            iterations++;
        } while (iterations < 100000);
        grid[(int)spawnPos.x, (int)spawnPos.y] = gridSpace.spawn;
    }
示例#16
0
    void CreateFloors()
    {
        int iterations = 0;//sentinel value for loop

        do
        {
            foreach (walker myWalker in walkers)
            {
                grid[(int)myWalker.pos.x, (int)myWalker.pos.y] = gridSpace.floor;
            }

            //chance:: to destroy walker
            int numberChecks = walkers.Count; //might modify count while in this loop
            for (int i = 0; i < numberChecks; i++)
            {
                if (Random.value < chanceWalkerDestroy && walkers.Count > 1)
                {
                    walkers.RemoveAt(i);
                    break; // ensures you only destroy one per interation
                }
            }

            //chance:: to change direction
            for (int i = 0; i < walkers.Count; i++)
            {
                if (Random.value < chanceWalkerChangeDir)
                {
                    walker thisWalker = walkers[i];
                    thisWalker.dir = RandomDirection();
                    walkers[i]     = thisWalker;
                }
            }

            //chance:: spawn new walker
            numberChecks = walkers.Count;// Might modify count while in this loop
            for (int i = 0; i < numberChecks; i++)
            {
                //only if# of walkers < max, and at a low chance
                if (Random.value < chanceWalkerCreate && walkers.Count < MAX_WALKERS)
                {
                    walker newWalker = new walker();
                    newWalker.dir = RandomDirection();
                    newWalker.pos = walkers[i].pos;
                    walkers.Add(newWalker);
                }
            }

            //move the walkers
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                thisWalker.pos += thisWalker.dir; // uses the random direction function
                walkers[i]      = thisWalker;
            }

            //avoid end of map
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                //clamp x,y to leave 1 space available for walls
                thisWalker.pos.x = Mathf.Clamp(thisWalker.pos.x, 1, roomWidth - 2);
                thisWalker.pos.y = Mathf.Clamp(thisWalker.pos.y, 1, roomHeight - 2);
                walkers[i]       = thisWalker;
            }

            //check to exit the loop
            if ((float)NumberOfFloors() / (float)grid.Length > percentToFill)
            {
                break;
            }
            iterations++;
        } while (iterations < 100000);
    }
    IEnumerator FloorLoop()
    {
        int iterations = 0;        //loop will not run forever

        do
        {
            bool spawned = false;
            //create floor at position of every walker
            foreach (walker myWalker in walkers)
            {
                if (grid[(int)myWalker.pos.x, (int)myWalker.pos.y] != gridSpace.floor)
                {
                    Spawn(myWalker.pos.x, myWalker.pos.y, floorObj);                   //update visuals
                    spawned = true;
                }
                grid[(int)myWalker.pos.x, (int)myWalker.pos.y] = gridSpace.floor;
            }
            //chance: destroy walker
            int numberChecks = walkers.Count;             //might modify count while in this loop
            for (int i = 0; i < numberChecks; i++)
            {
                //only if its not the only one, and at a low chance
                if (Random.value < chanceWalkerDestoy && walkers.Count > 1)
                {
                    walkers.RemoveAt(i);
                    break;                     //only destroy one per iteration
                }
            }
            //chance: walker pick new direction
            for (int i = 0; i < walkers.Count; i++)
            {
                if (Random.value < chanceWalkerChangeDir)
                {
                    walker thisWalker = walkers[i];
                    thisWalker.dir = RandomDirection();
                    walkers[i]     = thisWalker;
                }
            }
            //chance: spawn new walker
            numberChecks = walkers.Count;             //might modify count while in this loop
            for (int i = 0; i < numberChecks; i++)
            {
                //only if # of walkers < max, and at a low chance
                if (Random.value < chanceWalkerSpawn && walkers.Count < maxWalkers)
                {
                    //create a walker
                    walker newWalker = new walker();
                    newWalker.dir = RandomDirection();
                    newWalker.pos = walkers[i].pos;
                    walkers.Add(newWalker);
                }
            }
            //move walkers
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                thisWalker.pos += thisWalker.dir;
                walkers[i]      = thisWalker;
            }
            //avoid boarder of grid
            for (int i = 0; i < walkers.Count; i++)
            {
                walker thisWalker = walkers[i];
                //clamp x,y to leave a 1 space boarder: leave room for walls
                thisWalker.pos.x = Mathf.Clamp(thisWalker.pos.x, 1, roomWidth - 2);
                thisWalker.pos.y = Mathf.Clamp(thisWalker.pos.y, 1, roomHeight - 2);
                walkers[i]       = thisWalker;
            }
            //check to exit loop
            if ((float)NumberOfFloors() / (float)grid.Length > percentToFill)
            {
                break;
            }
            iterations++;
            if (spawned)
            {
                yield return(new WaitForSeconds(timeBetweenLoops));               //make it wait
            }
        }while(iterations < 100000);
        StartCoroutine(CreateWalls());        //move to next step
    }
示例#18
0
    // Start is called before the first frame update
    void Start()
    {
        GameObject walkerGameObject = new GameObject();

        walker = walkerGameObject.AddComponent <walker>();
    }
示例#19
0
    /// <summary>
    /// Use walkers to create walkable areas
    /// </summary>
    private void CreateFloors()
    {
        UnityEngine.Profiling.Profiler.BeginSample("Create Floors");
        int iterations     = 0; // Just want to keep track of how many times we've looped so we don't get an infinite loop. This is just in case
        int numberOfFloors = 0;

        GridHandler.gridSpace floorTile = GridHandler.gridSpace.floor;
        do
        {
            //create floor at position of every walker
            foreach (walker myWalker in _walkers)
            {
                _newGrid.SetTile((int)myWalker.pos.x, (int)myWalker.pos.y, floorTile);
                numberOfFloors++;
                //Make the path 2 tiles thick:
                //If we're moving up or down, also create the tile to the right of the path
                if ((int)myWalker.dir.y != 0)
                {
                    _newGrid.SetTile((int)myWalker.pos.x + 1, (int)myWalker.pos.y, floorTile);
                    numberOfFloors++;
                }
                //If we're moving left or right, also create the tile to above the path
                if ((int)myWalker.dir.x != 0)
                {
                    _newGrid.SetTile((int)myWalker.pos.x, (int)myWalker.pos.y + 1, floorTile);
                    numberOfFloors++;
                }
            }
            //chance: destroy walker
            int numberChecks = _walkers.Count; //see how many walkers we have
            for (int i = 0; i < numberChecks; i++)
            {
                //only if it's not the only one, and only rarely
                if (Random.value < ChanceWalkerDestroy && _walkers.Count > 1)
                {
                    _walkers.RemoveAt(i);
                    break; //only want to destroy one per iteration
                }
            }
            //chance: walker picks new direction
            for (int i = 0; i < _walkers.Count; i++)
            {
                if (Random.value < ChanceWalkerChangeDir)
                {
                    walker thisWalker = _walkers[i];
                    thisWalker.dir = RandomDirection();
                    _walkers[i]    = thisWalker;
                }
            }
            //chance: spawn new walker
            numberChecks = _walkers.Count; //update how many walkers since we may have destroyed one
            for (int i = 0; i < numberChecks; i++)
            {
                //only if we don't have too many walkers, and only rarely
                if (Random.value < ChanceWalkerSpawn && _walkers.Count < MaxWalkers)
                {
                    //create a walker and initialize it
                    walker newWalker = new walker();
                    newWalker.dir = RandomDirection();
                    newWalker.pos = _walkers[i].pos;
                    _walkers.Add(newWalker);
                }
            }
            //move walkers
            for (int i = 0; i < _walkers.Count; i++)
            {
                walker thisWalker = _walkers[i];
                thisWalker.pos += thisWalker.dir;
                _walkers[i]     = thisWalker;
            }
            //avoid grid border
            for (int i = 0; i < _walkers.Count; i++)
            {
                walker thisWalker = _walkers[i];
                //clamp x,y to leave a 10 slot space around the edges where we can put other items
                thisWalker.pos.x = Mathf.Clamp(thisWalker.pos.x, 10, _newGrid.roomWidth - 10);
                thisWalker.pos.y = Mathf.Clamp(thisWalker.pos.y, 10, _newGrid.roomHeight - 10);
                _walkers[i]      = thisWalker;
            }
            //check if we want to exit the loop
            if (numberOfFloors / _newGrid.GetGridLength() > PercentToFill)
            {
                break;
            }
            iterations++;
        } while (iterations < 100000);
        UnityEngine.Profiling.Profiler.EndSample();
    }