private void CheckBlockValid(EnergyBlock block, int[] validConnections) { if (block != null && !block.IsConnected && block.IsActive && CollectionContains(validConnections, block.BlockType)) { block.Connect(); UpdateConnections(block); } }
private void UpdateConnections(EnergyBlock block) { if (block == startBlock) { EnergyBlock rightBlock = GetBlockAtPosition(Vector2Int.zero); if (rightBlock != null && CollectionContains(startBlock.ValidConnectionsRight, rightBlock.BlockType)) { rightBlock.Connect(); UpdateConnections(rightBlock); } } else { EnergyBlock leftBlock = GetBlockAtPosition(block.GetCoordinates() + Vector2Int.left); EnergyBlock upBlock = GetBlockAtPosition(block.GetCoordinates() + Vector2Int.down); EnergyBlock rightBlock = GetBlockAtPosition(block.GetCoordinates() + Vector2Int.right); EnergyBlock downBlock = GetBlockAtPosition(block.GetCoordinates() + Vector2Int.up); if (block.BlockType == 1) { CheckBlockValid(leftBlock, block.ValidConnectionsLeft); CheckBlockValid(rightBlock, block.ValidConnectionsRight); } else if (block.BlockType == 2) { CheckBlockValid(upBlock, block.ValidConnectionsUp); CheckBlockValid(downBlock, block.ValidConnectionsDown); } else if (block.BlockType == 3) { CheckBlockValid(leftBlock, block.ValidConnectionsLeft); CheckBlockValid(upBlock, block.ValidConnectionsUp); } else if (block.BlockType == 4) { CheckBlockValid(upBlock, block.ValidConnectionsUp); CheckBlockValid(rightBlock, block.ValidConnectionsRight); } else if (block.BlockType == 5) { CheckBlockValid(rightBlock, block.ValidConnectionsRight); CheckBlockValid(downBlock, block.ValidConnectionsDown); } else if (block.BlockType == 6) { CheckBlockValid(leftBlock, block.ValidConnectionsLeft); CheckBlockValid(downBlock, block.ValidConnectionsDown); } } }
public override void Init(PuzzleController controller, string puzzleId) { base.Init(controller, puzzleId); blocks = new EnergyBlock[components.Length]; for (int i = 0; i < components.Length; ++i) { blocks[i] = components[i] as EnergyBlock; if (!blocks[i].IsActive) { blocks[i].gameObject.SetActive(false); } } blockGrid = new EnergyBlock[gridSizeX, gridSizeY]; int temp = 0; for (int col = 0; col < gridSizeY; ++col) { for (int row = 0; row < gridSizeX; ++row) { blocks[temp].SetCoordinates(new Vector2Int(row, col)); blockGrid[row, col] = blocks[temp]; ++temp; } } startBlock.Connect(); endBlock.Disconnect(); startBlock.SetCoordinates(new Vector2Int(-1, 0)); endBlock.SetCoordinates(new Vector2Int(3, 1)); ResetConnections(); UpdateConnections(startBlock); }