public void createWaterColumns() { List <Bubble> bubbles = new List <Bubble>(); List <Block> blocks = new List <Block>(); PreWaterNode[,] vector = new PreWaterNode[GameConst.height, GameConst.width]; PreWaterNode node = new PreWaterNode(); node.row = row; node.col = col; node.type = WaterColumn.WaterType.Center; node.isObstacle = false; node.isBubble = true; vector[row, col] = node; find(ref vector); for (int i = 0; i < GameConst.height; i++) { for (int k = 0; k < GameConst.width; k++) { if (vector[i, k] != null) { PreWaterNode node_ = vector[i, k]; if (node_.isObstacle) { Block block = GameConst.sceneObstacles[i, k].GetComponent <Block>(); if (block != null) { blocks.Add(block); } } else if (node_.isBubble) { Bubble bubble = GameConst.bubbles[i, k]; bubble.trigger = true; bubbles.Add(GameConst.bubbles[i, k]); CreateWaterColumn(i, k, WaterColumn.WaterType.Center); } else { CreateWaterColumn(i, k, node_.type); } } } } foreach (Block block in blocks) { block.BeDestory(); } foreach (Bubble bubble in bubbles) { bubble.BeDestory(); } }
public void FindLoop(ref PreWaterNode[,] vector, int row, int col, WaterColumn.WaterType type1, WaterColumn.WaterType type2, int type) { int index = 0; int col_ = col; int row_ = row; while (index < power) { if (type == 0) { row_ -= 1; if (row_ < 0) { break; } } else if (type == 1) { col_ += 1; if (col_ >= GameConst.width) { break; } } else if (type == 2) { row_ += 1; if (row_ >= GameConst.height) { break; } } else { col_ -= 1; if (col_ < 0) { break; } } PreWaterNode node = vector[row_, col_]; if (node == null) { node = new PreWaterNode(); node.row = row_; node.col = col_; //mid if (index < power - 1) { node.type = type1; } //end else { node.type = type2; } vector[row_, col_] = node; if (GameConst.sceneObstacles[row_, col_] != null) { node.isObstacle = true; node.isBubble = false; } else if (GameConst.bubbles[row_, col_] != null) { node.isObstacle = false; node.isBubble = true; Bubble bubble = GameConst.bubbles[row_, col_]; node.type = WaterColumn.WaterType.Center; bubble.find(ref vector); } else { node.isObstacle = false; node.isBubble = false; } } else { if (index < power - 1) { node.type = type1; } } if (GameConst.sceneObstacles[row_, col_] != null) { Block block = GameConst.sceneObstacles[row_, col_].GetComponent <Block>(); if (block == null) { break; } else if (!canWall) { break; } } index++; } }