private void computeOxyLevel() { int deriver = 1; float value = o2Level; if (TileEdge.IsPassable(down) && downNeighbour != null && TileEdge.IsPassable(downNeighbour.up)) { deriver++; value += downNeighbour.o2Level; } if (TileEdge.IsPassable(up) && upNeighbour != null && TileEdge.IsPassable(upNeighbour.down)) { deriver++; value += upNeighbour.o2Level; } if (TileEdge.IsPassable(left) && leftNeighbour != null && TileEdge.IsPassable(leftNeighbour.right)) { deriver++; value += leftNeighbour.o2Level; } if (TileEdge.IsPassable(right) && rightNeighbour != null && TileEdge.IsPassable(rightNeighbour.left)) { deriver++; value += rightNeighbour.o2Level; } o2Level = value / deriver; }
void GenerateVoidScent() { Queue <Tile> queue = new Queue <Tile> (); HashSet <Tile> visitedTiles = new HashSet <Tile> (); foreach (Tile tile in tiles) { if (tile.isVoidGenerator) { queue.Enqueue(tile); } tile.voidScent = false; } while (queue.Count > 0) { Tile tile = queue.Dequeue(); tile.voidScent = true; visitedTiles.Add(tile); if (tile.upNeighbour && !visitedTiles.Contains(tile.upNeighbour) && TileEdge.IsPassable(tile.up) && TileEdge.IsPassable(tile.upNeighbour.down)) { tile.upNeighbour.voidScent = true; queue.Enqueue(tile.upNeighbour); } if (tile.downNeighbour && !visitedTiles.Contains(tile.downNeighbour) && TileEdge.IsPassable(tile.down) && TileEdge.IsPassable(tile.downNeighbour.up)) { tile.downNeighbour.voidScent = true; queue.Enqueue(tile.downNeighbour); } if (tile.leftNeighbour && !visitedTiles.Contains(tile.leftNeighbour) && TileEdge.IsPassable(tile.left) && TileEdge.IsPassable(tile.leftNeighbour.right)) { tile.leftNeighbour.voidScent = true; queue.Enqueue(tile.leftNeighbour); } if (tile.rightNeighbour && !visitedTiles.Contains(tile.rightNeighbour) && TileEdge.IsPassable(tile.right) && TileEdge.IsPassable(tile.rightNeighbour.left)) { tile.rightNeighbour.voidScent = true; queue.Enqueue(tile.rightNeighbour); } } }
void Propagate() { int firesStarted = 0; int contagiousness = Config.me.FireContagiousness; if (tile.system != null) { tile.system.GetComponent <TileSystem>().isBroken = true; } if (firesStarted < contagiousness && tile.downNeighbour != null && (TileEdge.IsPassable(tile.down)) && TileEdge.IsPassable(tile.downNeighbour.up)) { if (tile.downNeighbour.StartFire()) { firesStarted++; } } if (firesStarted < contagiousness && tile.upNeighbour != null && TileEdge.IsPassable(tile.up) && TileEdge.IsPassable(tile.upNeighbour.down)) { if (tile.upNeighbour.StartFire()) { firesStarted++; } } if (firesStarted < contagiousness && tile.leftNeighbour != null && TileEdge.IsPassable(tile.left) && TileEdge.IsPassable(tile.leftNeighbour.right)) { if (tile.leftNeighbour.StartFire()) { firesStarted++; } } if (firesStarted < contagiousness && tile.rightNeighbour != null && TileEdge.IsPassable(tile.right) && TileEdge.IsPassable(tile.rightNeighbour.left)) { if (tile.rightNeighbour.StartFire()) { firesStarted++; } } level = 0; }
Boolean checkIfCanMove(InGamePosition pos, bool up, bool down, bool left, bool right) { Ship ship = GameObject.FindGameObjectWithTag("ship").GetComponent <Ship>(); Tile tile = ship.GetTileOnPosition(pos); if (left && TileEdge.IsPassable(tile.down) && tile.downNeighbour != null && TileEdge.IsPassable(tile.downNeighbour.up)) { return(true); } if (right && TileEdge.IsPassable(tile.up) && tile.upNeighbour != null && TileEdge.IsPassable(tile.upNeighbour.down)) { return(true); } if (down && TileEdge.IsPassable(tile.left) && tile.leftNeighbour != null && TileEdge.IsPassable(tile.leftNeighbour.right)) { return(true); } if (up && TileEdge.IsPassable(tile.right) && tile.rightNeighbour != null && TileEdge.IsPassable(tile.rightNeighbour.left)) { return(true); } return(false); }
void PrepareRooms(bool fakeData) { rooms = new List <Room>(); List <Tile> noScentTiles = new List <Tile>(); foreach (Tile tile in tiles) { if (tile.voidScent == false) { noScentTiles.Add(tile); } } List <Tile> tmp = new List <Tile> (); HashSet <Tile> visited = new HashSet <Tile> (); Tile currentTile; int counter = 0; while (noScentTiles.Count > 0) { Room room = new Room(fakeData ? 0.1f * (float)(counter++ % 10) : 1.0f); tmp.Add(noScentTiles[0]); room.AddTile(noScentTiles[0]); noScentTiles.Remove(noScentTiles[0]); while (tmp.Count > 0) { currentTile = tmp[0]; tmp.RemoveAt(0); visited.Add(currentTile); if (currentTile.upNeighbour && !visited.Contains(currentTile.upNeighbour) && TileEdge.IsPassable(currentTile.up) && TileEdge.IsPassable(currentTile.upNeighbour.down)) { room.AddTile(currentTile.upNeighbour); tmp.Add(currentTile.upNeighbour); noScentTiles.Remove(currentTile.upNeighbour); } if (currentTile.downNeighbour && !visited.Contains(currentTile.downNeighbour) && TileEdge.IsPassable(currentTile.down) && TileEdge.IsPassable(currentTile.downNeighbour.up)) { room.AddTile(currentTile.downNeighbour); tmp.Add(currentTile.downNeighbour); noScentTiles.Remove(currentTile.downNeighbour); } if (currentTile.leftNeighbour && !visited.Contains(currentTile.leftNeighbour) && TileEdge.IsPassable(currentTile.left) && TileEdge.IsPassable(currentTile.leftNeighbour.right)) { room.AddTile(currentTile.leftNeighbour); tmp.Add(currentTile.leftNeighbour); noScentTiles.Remove(currentTile.leftNeighbour); } if (currentTile.rightNeighbour && !visited.Contains(currentTile.rightNeighbour) && TileEdge.IsPassable(currentTile.right) && TileEdge.IsPassable(currentTile.rightNeighbour.left)) { room.AddTile(currentTile.rightNeighbour); tmp.Add(currentTile.rightNeighbour); noScentTiles.Remove(currentTile.rightNeighbour); } } rooms.Add(room); } }