Exemplo n.º 1
0
        public void SwapTile(Tile tile, double avgDepth, int depthSeed)
        {
            int i         = tile.GetX();
            int j         = tile.GetY();
            int tileDepth = tile.Depth;
            var rng       = new Random();

            if (tile.GetGroundType() == "water" && tileDepth > avgDepth)
            {//if tile is higher than average tiles and water, "flow" water away from tile
                if (depthSeed < 33)
                {
                    Tiles[i, j] = new SoilTile(i, j);
                }
                else if (depthSeed < 66)
                {
                    Tiles[i, j] = new GrassTile(i, j);
                }
                else
                {
                    Tiles[i, j] = new TreeTile(i, j);
                }

                //"flow" only goes in cardinal direction currently
                var flowSeed = rng.Next(1, 100);

                Pour(i, j, flowSeed, tileDepth);
            }
        }
Exemplo n.º 2
0
        public void AssignTiles()
        {//initial tile generation
            var rng = new Random();

            for (var i = 0; i < Height; i++)
            {
                for (var j = 0; j < Length; j++)
                {
                    var tileSeed = rng.Next(1, 100);
                    if (tileSeed < 25)
                    {
                        Tiles[i, j] = new WaterTile(i, j);
                    }
                    else if (tileSeed < 50)
                    {
                        Tiles[i, j] = new SoilTile(i, j);
                    }
                    else if (tileSeed < 75)
                    {
                        Tiles[i, j] = new GrassTile(i, j);
                    }
                    else if (tileSeed < 100)
                    {
                        Tiles[i, j] = new TreeTile(i, j);
                    }
                }
            }
        }
Exemplo n.º 3
0
            public void Test_SwapTile_Under33()
            {
                var controlGroup = new SoilTile(1, 1)
                {
                    Depth = 5
                };

                TestWorld.AssignTiles();
                TestWorld.AssignDepth();
                TestWorld.Tiles[1, 1] = new WaterTile(1, 1)
                {
                    Depth = 5
                };

                TestWorld.SwapTile(TestWorld.Tiles[1, 1], TestAvgDepth, SoilDepthSeed);
                Assert.AreEqual(controlGroup.GetGroundType(), TestWorld.Tiles[1, 1].GetGroundType());
            }
Exemplo n.º 4
0
 void UpdateAdjacentSoil()
 {
     for (int i = -1; i < 2; i++)
     {
         for (int j = -1; j < 2; j++)
         {
             if (i != 0 || j != 0)
             {
                 TileBase tile     = map.GetTile(new Vector3Int(CellPos.x + i, CellPos.y + j, 0));
                 SoilTile soilTile = tile as SoilTile;
                 if (soilTile)
                 {
                     AdjacentSoil.Add(soilTile);
                 }
             }
         }
     }
     Debug.Log(AdjacentSoil.Count);
 }
Exemplo n.º 5
0
        public void Test_AddValues()
        {
            var testTile       = new SoilTile(1, 1);
            var testWaterTile  = new WaterTile(0, 0);
            var testSoilTile   = new SoilTile(0, 1);
            var testGrassTile  = new GrassTile(0, 2);
            var testTreeTile   = new TreeTile(1, 0);
            var testForestTile = new ForestTile(2, 0);
            var testValues     = testTile.GetAdjacentValues();

            testTile.AddTileValue(testWaterTile);
            testTile.AddTileValue(testSoilTile);
            testTile.AddTileValue(testGrassTile);
            testTile.AddTileValue(testTreeTile);
            testTile.AddTileValue(testForestTile);

            Assert.AreEqual(1, testValues[0]);
            Assert.AreEqual(1, testValues[1]);
            Assert.AreEqual(1, testValues[2]);
            Assert.AreEqual(1, testValues[3]);
            Assert.AreEqual(1, testValues[4]);
        }
Exemplo n.º 6
0
        public void Refine()
        {//refinement (using Conway's Game of Life)
            var rng = new Random();

            UpdateStats();

            for (var i = 0; i < Height; i++)
            {
                for (var j = 0; j < Length; j++)
                {
                    var tile = Tiles[i, j];

                    //need to reset the Adjacent Tile value
                    Array.Clear(tile.AdjacentTiles, 0, tile.AdjacentTiles.Length);

                    var adjacent    = GetAdjacentTiles(tile);
                    var waterValue  = adjacent[0];
                    var treeValue   = adjacent[3];
                    var forestValue = adjacent[4];
                    var refineSeed  = rng.Next(1, 100);

                    if (tile.GetGroundType() == "water")
                    {
                        /*
                         * make it so water is more grouped together
                         * less small creeks/streams etc.
                         */
                        if (waterValue == 0 || (waterValue <= 3 && refineSeed < 40))
                        {
                            Tiles[i, j] = new SoilTile(i, j);
                        }
                    }
                    //else if (tile.GetGroundType() == "soil")
                    //{
                    //    /*
                    //     soil could spontaneously become another tile type
                    //     depending on conditions
                    //     */
                    //    if (refineSeed < 10)
                    //    {
                    //        Tiles[i,j] = new WaterTile(i,j);
                    //    }
                    //    else if (refineSeed < 15)
                    //    {
                    //        Tiles[i,j] = new GrassTile(i,j);
                    //        continue;
                    //    }
                    //    else if (refineSeed < 20)
                    //    {
                    //        Tiles[i,j] = new TreeTile(i,j);
                    //    }
                    //}
                    else
                    {
                        /*
                         * chance for tile surrounded by water to become water
                         * water eventually overruns the world if refined enough times
                         * need to find a way for it to stagnate
                         */
                        if (waterValue == 8 || (waterValue >= 3 && refineSeed < 35) || (waterValue >= 3 && tile.Depth == 0 && refineSeed < 50))
                        {
                            Tiles[i, j] = new WaterTile(i, j);
                        }
                    }

                    if (tile.GetGroundType() == "tree")
                    {
                        //chance for surrounded trees to become forests (if no forests adjacent and if there aren't too many already)
                        if (treeValue >= 4 && forestValue < 1 && refineSeed < 5 && TileStats[4] < (Length * Height * 4))
                        {
                            GrowForest(i, j);
                        }
                    }
                }
            }
        }
Exemplo n.º 7
0
        public void Test_SoilTile()
        {
            var testSoilTile = new SoilTile(0, 1);

            Assert.AreEqual('.', testSoilTile.GetSymbol());
        }