Advertisement
Guest User

Untitled

a guest
Jan 1st, 2017
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #pragma strict
  2.  
  3. var map: Map;
  4. var gameManager: GameManager;
  5. var magic: boolean;
  6.  
  7. private var setInit = true;
  8. private var init: float;
  9. private var biomesCount = System.Enum.GetValues(TileType).length;
  10.  
  11. function Update()
  12. {
  13.     var i: int;
  14.     var j: int;
  15.     if (magic)
  16.     {
  17.         doCrude = true;
  18.         doHeuristic = true;
  19.         magic = false;
  20.     }
  21.     if (doCrude)
  22.     {
  23.         // if (setInit)
  24.             // init = Time.realtimeSinceStartup;
  25.         for (i = 0; i < map.size; i++)
  26.             for (j = 0; j < map.size; j++)
  27.             {
  28.                 map.matrix[i,j].cleanDisabledStates();
  29.                 map.matrix[i,j].setType(WATER);
  30.             }
  31.         createCrudeMap();
  32.         doCrude = false;
  33.     }
  34.     if (doHeuristic)
  35.     {
  36.         createPonds();
  37.         makeEdges();
  38.         doMapMassage(3, 5);    
  39.         createRivers();    
  40.         doMapMassage(3, 3);    
  41.         findAllIslesAndContinent();
  42.         destroyAnomalies();                
  43.         findAllIslesAndContinent();    
  44.         connectAllIslesToBiggest();                    
  45.         findAllBiomes();   
  46.         if (hasAllBiomes() && !hasBiomesAnomalies() && specialMassageForIslesConection())
  47.         {
  48.             findWaterBorders();
  49.             // Debug.Log("End: " + (Time.realtimeSinceStartup - init));    
  50.             gameManager.onMapEndCreation();
  51.             doHeuristic = false;
  52.             setInit = true;        
  53.         }
  54.         else
  55.         {
  56.             setInit = false;
  57.             doHeuristic = true;
  58.             doCrude = true;
  59.         }      
  60.     }
  61.     if (doEdges)
  62.     {
  63.         makeEdges();
  64.         doEdges = false;
  65.     }
  66.     if (doPonds)
  67.     {
  68.         createPonds();
  69.         doPonds = false;
  70.     }
  71.     if (doSolos)
  72.     {
  73.         removeSolos(soloSensivity);
  74.         doSolos = false;
  75.     }
  76.     if (doIsles)
  77.     {
  78.         findAllIslesAndContinent();
  79.         connectAllIslesToBiggest();
  80.         doIsles = false;
  81.     }
  82.     if (doAnomalies)
  83.     {
  84.         findAllIslesAndContinent();
  85.         destroyAnomalies();
  86.         doAnomalies = false;
  87.     }
  88.     if (doRivers)
  89.     {
  90.         createRivers();
  91.         doRivers = false;
  92.     }
  93. }
  94.  
  95. @Header("Start")
  96. @Range(1,10) var recursionLevel: int; // Creates tiles using Paint's bucket tool recursive strategy.
  97. @Range(25,100) var recursionChance: int; // Chance that the 'bucket tool' will create one tile.
  98. @Range(0,100) var minimumWaterTiles: float;
  99.  
  100. @Header("Do Options")
  101. var doCrude: boolean;
  102. var doHeuristic: boolean;
  103. var doSolos: boolean;
  104. var doEdges: boolean;
  105. var doPonds: boolean;
  106. var doIsles: boolean;
  107. var doAnomalies: boolean;
  108. var doRivers: boolean;
  109.  
  110. @Header("Attributes")
  111. @Range(2,7) var biomeLevel: int; // Set biomesCount here (only numbers for Range).
  112. @Range(1,2) var typeRepetition: int;
  113. @Range(0,8) var soloSensivity: int;
  114. @Range(0,100) var edgeRefinement: int;
  115. @Range(0,15) var ponds: int;
  116. @Range(0,7) var rivers: int;
  117. @Range(0,100) var anomalyThreshold: int;
  118. var continentOnlyAnomalyCheck: boolean;
  119.  
  120. private var waterTiles: int;
  121.  
  122. function onMapStartCreation(level: MapLevel)
  123. {
  124.     if (level.level > 1)
  125.         typeRepetition = 1;
  126.     biomeLevel = level.biomeLevel;
  127. }
  128.  
  129. function createCrudeMap()
  130. {
  131.     waterTiles = map.size * map.size;
  132.     var ri: int;
  133.     var rj: int;
  134.     var type = 1;
  135.     for (var i = 0; i < map.size; i++)
  136.         for (var j = 0; j < map.size; j++)
  137.         {
  138.             // map.matrix[i,j].explored = false;
  139.             // map.matrix[i,j].removeFog();
  140.         }
  141.     while (waterTiles > minimumWaterTiles*0.01*map.size*map.size)
  142.     {
  143.         ri = Random.Range(0, map.size);
  144.         rj = Random.Range(0, map.size);
  145.         createBiome(ri, rj, recursionLevel, type, true);   
  146.         type++;
  147.         if (type == biomeLevel)
  148.             type = 1;
  149.     }  
  150. }
  151.  
  152. function removeSolos(sensivity: int)
  153. {
  154.     for (var k = 0; k < biomesCount; k++)
  155.         removeSoloType(k, sensivity);
  156. }
  157.  
  158. function removeSoloType(type: TileType, sensivity: int)
  159. {
  160.     for (var i = 0; i < map.size; i++)
  161.         for (var j = 0; j < map.size; j++)
  162.         {
  163.             var tile = map.matrix[i,j];
  164.             if (tile.type == type)
  165.                 if (getTypeNeighbourCount(tile, type) <= sensivity)
  166.                     setTypeFromRandomNeighbour(tile);
  167.         }
  168. }
  169.  
  170. function makeEdges()
  171. {
  172.     for (var k = 0; k < map.size; k++)
  173.     {
  174.         // Vertical Left.
  175.         map.matrix[k,0].setType(WATER);
  176.         if (Random.Range(0, 100) < edgeRefinement)
  177.             map.matrix[k,1].setType(WATER);
  178.         // Vertical Right.
  179.         map.matrix[k,map.size-1].setType(WATER);
  180.         if (Random.Range(0, 100) < edgeRefinement)
  181.             map.matrix[k,map.size-2].setType(WATER);
  182.         // Horizontal Top.
  183.         map.matrix[0,k].setType(WATER);
  184.         if (Random.Range(0, 100) < edgeRefinement)
  185.             map.matrix[1,k].setType(WATER);
  186.         // Horizontal Bot.
  187.         map.matrix[map.size-1,k].setType(WATER);
  188.         if (Random.Range(0, 100) < edgeRefinement)
  189.             map.matrix[map.size-2,k].setType(WATER);
  190.     }
  191. }
  192.  
  193. function createPonds()
  194. {
  195.     var k = ponds;
  196.     var ri: int;
  197.     var rj: int;
  198.     while (k > 0)
  199.     {
  200.         ri = Random.Range(0, map.size);
  201.         rj = Random.Range(0, map.size);
  202.         createBiome(ri, rj, recursionLevel-1, 0, false);   
  203.         k--;
  204.     }
  205. }
  206.  
  207. /*
  208. Method that copys Paint's bucket tool recursive algorithm.
  209. */
  210. function createBiome(i: int, j: int, level: int, type: TileType, onlyOnWater: boolean)
  211. {
  212.     if (level == 0)
  213.         return;
  214.     if (Position.isInsideMapMatrix(i, j, map.size))
  215.     {
  216.         if (onlyOnWater && map.matrix[i,j].type == WATER)
  217.         {
  218.             waterTiles--;
  219.             map.matrix[i,j].setType(type);
  220.         }
  221.         else if (!onlyOnWater)
  222.         {
  223.             if (map.matrix[i,j].type == WATER)
  224.                 waterTiles--;
  225.             map.matrix[i,j].setType(type);
  226.         }
  227.         else
  228.             return;
  229.     }
  230.     else
  231.         return;
  232.     // WEST.
  233.     if (Random.Range(0, 100) < recursionChance)
  234.         createBiome(i, j+1, level-1, type, onlyOnWater);
  235.     // NORTH.
  236.     if (Random.Range(0, 100) < recursionChance)
  237.         createBiome(i-1, j, level-1, type, onlyOnWater);
  238.     // EAST.
  239.     if (Random.Range(0, 100) < recursionChance)
  240.         createBiome(i, j-1, level-1, type, onlyOnWater);
  241.     // SOUTH.
  242.     if (Random.Range(0, 100) < recursionChance)
  243.         createBiome(i+1, j, level-1, type, onlyOnWater);
  244. }
  245.  
  246. function getTypeNeighbourCount(tile: Tile, type: TileType)
  247. {
  248.     var counter = 0;
  249.     for (n in tile.neighbourhood)
  250.         if (n.type == type)
  251.             counter++;
  252.     return counter;
  253. }
  254.  
  255. function setTypeFromRandomNeighbour(tile: Tile)
  256. {
  257.     tile.setType(tile.neighbourhood[Random.Range(0, tile.neighbourhood.Count)].type);
  258. }
  259.  
  260. class GroupOfTiles
  261. {
  262.     var tiles: List.<Tile>;
  263.  
  264.     function GroupOfTiles()
  265.     {
  266.         tiles = new List.<Tile>();
  267.     }
  268.  
  269.     function addTile(tile: Tile)
  270.     {
  271.         tiles.Add(tile);
  272.     }
  273.  
  274.     function getSize()
  275.     {
  276.         return tiles.Count;
  277.     }
  278.  
  279.     function isThisTileInside(tile: Tile)
  280.     {
  281.         for (t in tiles)
  282.             if (t == tile)
  283.                 return true;
  284.         return false;
  285.     }
  286.  
  287.     function getCenterPosition()
  288.     {
  289.         var averagePosition = new Position(0,0);       
  290.         for (var k = 0; k < getSize(); k++)
  291.             averagePosition.add(tiles[k].position);
  292.         averagePosition.i /= getSize();
  293.         averagePosition.j /= getSize();
  294.         return averagePosition;
  295.     }
  296.  
  297.     function getRandomTile()
  298.     {
  299.         return tiles[Random.Range(0, getSize())];
  300.     }
  301.  
  302.     function getRandomPosition()
  303.     {
  304.         return tiles[Random.Range(0, getSize())].position;
  305.     }
  306.  
  307.     function setAllTilesAsWater()
  308.     {
  309.         for (t in tiles)
  310.             t.setType(WATER);
  311.     }
  312.  
  313.     function isThisGroupInside(isle: GroupOfTiles)
  314.     {
  315.         var counter = 0;
  316.         for (var i = 0; i < isle.getSize(); i++)
  317.             if (isThisTileInside(isle.tiles[i]))
  318.                 counter++;
  319.         return counter == isle.getSize();
  320.     }
  321. }
  322.  
  323. class Biome extends GroupOfTiles
  324. {  
  325.     var tilesForObstacle: List.<Tile>;
  326.     var tilesForItem: List.<Tile>;
  327.     var tilesForUnit: List.<Tile>;
  328.  
  329.     function Biome()
  330.     {
  331.         tilesForObstacle = new List.<Tile>();
  332.         tilesForItem = new List.<Tile>();
  333.         tilesForUnit = new List.<Tile>();
  334.     }
  335.  
  336.     function getType() // For biome only, not isles.
  337.     {
  338.         return tiles[0].type;
  339.     }
  340.  
  341.     function refreshItemStates()
  342.     {
  343.         tilesForItem.Clear();
  344.         for (t in tiles)
  345.             if (t.canReceiveItem())
  346.                 tilesForItem.Add(t);
  347.     }
  348.  
  349.     function refreshObstacleStates()
  350.     {
  351.         tilesForObstacle.Clear();
  352.         for (t in tiles)
  353.             if (t.canReceiveObstacle())
  354.                 tilesForObstacle.Add(t);
  355.     }
  356.  
  357.     function refreshUnitStates()
  358.     {
  359.         tilesForUnit.Clear();
  360.         for (t in tiles)
  361.             if (t.canReceiveUnit())
  362.                 tilesForUnit.Add(t);
  363.     }
  364.  
  365.     function getRandomTileToReceiveObstacle(): Tile
  366.     {
  367.         if (tilesForObstacle.Count == 0)
  368.             return null;
  369.         var tile: Tile;
  370.         var randomIndex = Random.Range(0, tilesForObstacle.Count);
  371.         // Debug.Log("Biome: " + getType() + ", RI: " + randomIndex + ", Total: " + tilesForObstacle.Count);
  372.         tile = tilesForObstacle[randomIndex];
  373.         if (tile != null)
  374.         {
  375.             tilesForObstacle.RemoveAt(randomIndex);        
  376.             return tile;
  377.         }
  378.         else
  379.             return null;
  380.     }
  381.  
  382.     function getRandomTileToReceiveItem(): Tile
  383.     {
  384.         if (tilesForItem.Count == 0)
  385.             return null;
  386.         var tile: Tile;
  387.         var randomIndex = Random.Range(0, tilesForItem.Count);
  388.         // Debug.Log("Biome: " + getType() + ", RI: " + randomIndex + ", Total: " + tilesForItem.Count);
  389.         tile = tilesForItem[randomIndex];
  390.         if (tile != null)
  391.         {
  392.             tilesForItem.RemoveAt(randomIndex);        
  393.             return tile;
  394.         }
  395.         else
  396.             return null;
  397.     }
  398.  
  399.     function getRandomTileToReceiveUnit(): Tile
  400.     {
  401.         if (tilesForUnit.Count == 0)
  402.             return null;
  403.         var tile: Tile;
  404.         var randomIndex = Random.Range(0, tilesForUnit.Count);
  405.         // Debug.Log("Biome: " + getType() + ", RI: " + randomIndex + ", Total: " + tilesForUnit.Count);
  406.         tile = tilesForUnit[randomIndex];
  407.         if (tile != null)
  408.         {
  409.             tilesForUnit.RemoveAt(randomIndex);        
  410.             return tile;
  411.         }
  412.         else
  413.             return null;
  414.     }
  415. }
  416.  
  417. private var checkedTiles: boolean[ , ];
  418. var isles: List.<GroupOfTiles>;
  419. private var currentIsle: int;
  420. private var continent: GroupOfTiles;
  421.  
  422. function findAllIslesAndContinent()
  423. {
  424.     currentIsle = 0;
  425.     checkedTiles = new boolean[map.size, map.size];
  426.     isles = new List.<GroupOfTiles>();
  427.     for (var i = 0; i < map.size; i++)
  428.         for (var j = 0; j < map.size; j++)
  429.         {
  430.             if (checkedTiles[i,j] == false)
  431.             {
  432.                 if (map.matrix[i,j].type == WATER)
  433.                     checkWaterByFloodFill(i, j);
  434.                 else
  435.                 {
  436.                     isles.Add(new GroupOfTiles());                 
  437.                     checkTerrainByFloodFill(i, j);
  438.                     currentIsle++;
  439.                 }
  440.                
  441.             }
  442.         }
  443.  
  444.     var biggestSize = 0;   
  445.     for (var k = 0; k < isles.Count; k++)
  446.     {
  447.         if (isles[k].getSize() > biggestSize)
  448.         {
  449.             biggestSize = isles[k].getSize();
  450.             continent = isles[k];
  451.         }
  452.     }
  453. }
  454.  
  455. function connectAllIslesToBiggest()
  456. {
  457.     for (var k = 0; k < isles.Count; k++)
  458.     {
  459.         if (isles[k] != continent)
  460.             connecIsles(isles[k], continent);
  461.     }
  462. }  
  463.  
  464. function checkWaterByFloodFill(i: int, j: int)
  465. {
  466.     if (Position.isInsideMapMatrix(i, j, map.size))
  467.     {
  468.         if (map.matrix[i,j].type == WATER && checkedTiles[i,j] == false)
  469.         {
  470.             checkedTiles[i,j] = true;  
  471.             // WEST.
  472.             checkWaterByFloodFill(i, j+1);
  473.             // NORTH.
  474.             checkWaterByFloodFill(i-1, j);
  475.             // EAST.
  476.             checkWaterByFloodFill(i, j-1); 
  477.             // SOUTH.
  478.             checkWaterByFloodFill(i+1, j);
  479.         }
  480.         else
  481.             return;
  482.     }
  483.     else
  484.         return;
  485. }
  486.  
  487. function checkTerrainByFloodFill(i: int, j: int)
  488. {
  489.     if (Position.isInsideMapMatrix(i, j, map.size))
  490.     {
  491.         if (map.matrix[i,j].type != WATER && checkedTiles[i,j] == false)
  492.         {
  493.             isles[currentIsle].addTile(map.matrix[i,j]);
  494.             checkedTiles[i,j] = true;  
  495.             // WEST.
  496.             checkTerrainByFloodFill(i, j+1);
  497.             // NORTH.
  498.             checkTerrainByFloodFill(i-1, j);
  499.             // EAST.
  500.             checkTerrainByFloodFill(i, j-1);   
  501.             // SOUTH.
  502.             checkTerrainByFloodFill(i+1, j);
  503.         }
  504.         else
  505.             return;
  506.     }
  507.     else
  508.         return;
  509. }
  510.  
  511. function connecIsles(smaller: GroupOfTiles, bigger: GroupOfTiles)
  512. {
  513.     var movingPosition = new Position(smaller.getRandomPosition());
  514.     var lastTile: Tile;        
  515.     var findTerrain = false;
  516.     var targetPosition = new Position(bigger.getRandomPosition());
  517.     var currentTile: Tile;
  518.     while (movingPosition.isInsideMapMatrix(map.size) && movingPosition.getDistanceTo(targetPosition) > 0)
  519.     {
  520.         if (!findTerrain)
  521.             lastTile = map.matrix[movingPosition.i, movingPosition.j];     
  522.         movingPosition.moveOneStepTowards(targetPosition);
  523.         currentTile = map.matrix[movingPosition.i, movingPosition.j];      
  524.         if (findTerrain)
  525.         {
  526.             if (currentTile.type != WATER)
  527.             {
  528.                 if (!smaller.isThisTileInside(currentTile))
  529.                     lastTile = currentTile; // Update tile type when finding another terrain that is not continent.
  530.                 if (bigger.isThisTileInside(currentTile))
  531.                 {
  532.                     currentTile.disableObstacleAndItemReceiveForMeAndNeighbourhood();
  533.                     return; // Connected!
  534.                 }
  535.             }
  536.             else
  537.             {
  538.                 currentTile.setType(lastTile.type);
  539.                 currentTile.disableObstacleAndItemReceiveForMeAndNeighbourhood();
  540.             }
  541.         }
  542.         else if (currentTile.type == WATER)
  543.         {
  544.             // Found water.
  545.             findTerrain = true;                    
  546.             currentTile.setType(lastTile.type);
  547.             currentTile.disableObstacleAndItemReceiveForMeAndNeighbourhood();
  548.         }      
  549.     }
  550. }
  551.  
  552. var biomes: List.<Biome>;
  553.  
  554. function destroyAnomalies()
  555. {
  556.     findAllBiomes();
  557.     for (var k = 0; k < biomes.Count; k++)
  558.     {
  559.         if (biomes[k].getSize() < anomalyThreshold)
  560.         {
  561.             if (continentOnlyAnomalyCheck)
  562.             {
  563.                 if (continent.isThisGroupInside(biomes[k]))
  564.                 {
  565.                     biomes[k].setAllTilesAsWater();
  566.                     biomes.RemoveAt(k);
  567.                     k--;
  568.                 }
  569.             }
  570.             else
  571.             {
  572.                 biomes[k].setAllTilesAsWater();
  573.                 biomes.RemoveAt(k);
  574.                 k--;
  575.             }
  576.         }
  577.     }
  578. }
  579.  
  580. function checkEqualTerrainsByFloodFill(i: int, j: int, type: TileType)
  581. {
  582.     if (Position.isInsideMapMatrix(i, j, map.size))
  583.     {
  584.         if (map.matrix[i,j].type == type && checkedTiles[i,j] == false)
  585.         {
  586.             map.matrix[i,j].biome = biomes[currentIsle];           
  587.             biomes[currentIsle].addTile(map.matrix[i,j]);
  588.             checkedTiles[i,j] = true;  
  589.             // WEST.
  590.             checkEqualTerrainsByFloodFill(i, j+1, type);
  591.             // NORTH.
  592.             checkEqualTerrainsByFloodFill(i-1, j, type);
  593.             // EAST.
  594.             checkEqualTerrainsByFloodFill(i, j-1, type);   
  595.             // SOUTH.
  596.             checkEqualTerrainsByFloodFill(i+1, j, type);
  597.         }
  598.         else
  599.             return;
  600.     }
  601.     else
  602.         return;
  603. }
  604.  
  605. function hasAllBiomes()
  606. {
  607.     var counterPerType = new int[biomeLevel-1];
  608.     for (var type = 1; type < biomeLevel; type++)  
  609.         for (var i = 0; i < biomes.Count; i++)
  610.             if (biomes[i].getType() == type)
  611.             {
  612.                 counterPerType[type-1] += 1;               
  613.             }
  614.     var satisfieds = 0;
  615.     for (var j = 0; j < biomeLevel-1; j++)
  616.         // Usar == vira exatamente a quantidade, usar >= vira 'NO MÍNIMO typeRepetition DE CADA'.
  617.         if (counterPerType[j] >= typeRepetition)
  618.             satisfieds++;
  619.     return satisfieds == biomeLevel-1; // Except water.
  620. }
  621.  
  622. var sides: boolean[];
  623.  
  624. function createRivers()
  625. {
  626.     for (var i = 0; i < rivers; i++)
  627.         createOneRiver();
  628. }
  629.  
  630. function createOneRiver()
  631. {
  632.     sides = new boolean[4];
  633.     for (s in sides)
  634.         s = true;
  635.  
  636.     var initialTile = getRandomTileSide();
  637.     while (initialTile == null)
  638.         initialTile = getRandomTileSide();
  639.  
  640.     var targetTile = getRandomTileSide();
  641.     while (targetTile == null)
  642.         targetTile = getRandomTileSide();
  643.  
  644.     var movingPosition = new Position(initialTile.position);   
  645.     var targetPosition = new Position(targetTile.position);
  646.     map.matrix[movingPosition.i, movingPosition.j].setType(WATER);
  647.     while (movingPosition.isInsideMapMatrix(map.size) && movingPosition.getDistanceTo(targetPosition) > 0)
  648.     {
  649.         movingPosition.moveOneStepTowards(targetPosition);
  650.         map.matrix[movingPosition.i, movingPosition.j].setMeAndAllNeighboursType(WATER);
  651.     }
  652. }
  653.  
  654. function getRandomTileSide(): Tile
  655. {
  656.     var random = Random.Range(0, 4);   
  657.     var tile: Tile = null;
  658.     if (random == 0 && sides[random] == true)
  659.         tile = map.matrix[Random.Range(0, map.size),map.size-1];       
  660.     if (random == 1 && sides[random] == true)
  661.         tile = map.matrix[0,Random.Range(0, map.size)];    
  662.     if (random == 2 && sides[random] == true)
  663.         tile = map.matrix[Random.Range(0, map.size), 0];       
  664.     if (random == 3 && sides[random] == true)
  665.         tile = map.matrix[map.size-1,Random.Range(0, map.size)];       
  666.     sides[random] = false;
  667.     return tile;
  668. }
  669.  
  670. // Massage means smoothing the map.
  671. function doMapMassage(startSensivity: int, repetitions: int)
  672. {
  673.     for (var i = startSensivity; i >= 0; i--)
  674.         for (var j = 0; j < repetitions; j++)
  675.             removeSolos(i);
  676. }
  677.  
  678. function findAllBiomes()
  679. {
  680.     currentIsle = 0;
  681.     checkedTiles = new boolean[map.size, map.size];
  682.     biomes = new List.<Biome>();
  683.     biomes.Clear();
  684.     for (var i = 0; i < map.size; i++)
  685.         for (var j = 0; j < map.size; j++)
  686.         {
  687.             if (checkedTiles[i,j] == false)
  688.             {
  689.                 if (map.matrix[i,j].type == WATER)
  690.                     checkWaterByFloodFill(i, j);
  691.                 else
  692.                 {
  693.                     biomes.Add(new Biome());                   
  694.                     checkEqualTerrainsByFloodFill(i, j, map.matrix[i,j].type);
  695.                     currentIsle++;
  696.                 }              
  697.             }
  698.         }
  699. }
  700.  
  701. function hasBiomesAnomalies()
  702. {
  703.     for (b in biomes)
  704.         if (b.getSize() < anomalyThreshold)
  705.         {
  706.             Debug.Log(b.getType() + ": Anomaly after map creation!");
  707.  
  708.             return true;
  709.         }
  710.     return false;
  711. }
  712.  
  713. function getBiomes()
  714. {
  715.     return biomes;
  716. }
  717.  
  718. var waterBorders: List.<Tile>;
  719.  
  720. function findWaterBorders()
  721. {
  722.     waterBorders = new List.<Tile>();
  723.     var water: Tile;
  724.     for (var i = 0; i < map.size; i++)
  725.         for (var j = 0; j < map.size; j++)
  726.         {
  727.             water = map.matrix[i,j].hasOneWaterNeighbour();
  728.             if (water)
  729.                 waterBorders.Add(water);
  730.         }
  731. }
  732.  
  733. function specialMassageForIslesConection()
  734. {
  735.     for (var type = 0; type < biomeLevel; type++)
  736.         for (var i = 0; i < map.size; i++)
  737.             for (var j = 0; j < map.size; j++)
  738.             {
  739.                 var tile = map.matrix[i,j];
  740.                 if (tile.type == type)
  741.                     if (getTypeNeighbourCount(tile, type) <= 1)
  742.                     {
  743.                         setTypeFromRandomNeighbour(tile);
  744.                         var trys = 10;
  745.                         while (tile.type == WATER && trys > 0)
  746.                         {
  747.                             setTypeFromRandomNeighbour(tile);
  748.                             trys--;
  749.                         }
  750.                         if (trys == 0)
  751.                         {
  752.                             Debug.Log("Bug for special massage: Could not set tile to other type than WATER.");
  753.                             return false;
  754.                         }
  755.                     }
  756.             }
  757.     return true;
  758. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement