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); } }
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); } } } }
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()); }
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); }
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]); }
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); } } } } }
public void Test_SoilTile() { var testSoilTile = new SoilTile(0, 1); Assert.AreEqual('.', testSoilTile.GetSymbol()); }