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); } } }
private void SwapBlocks(EnergyBlock blockToMove, EnergyBlock swapBlock) { isBusy = true; blockGrid[blockToMove.GetCoordinates().x, blockToMove.GetCoordinates().y] = swapBlock; blockGrid[swapBlock.GetCoordinates().x, swapBlock.GetCoordinates().y] = blockToMove; Vector3 tempPosition = blockToMove.transform.position; MoveBlockToPosition(blockToMove, swapBlock.transform.position); MoveBlockToPosition(swapBlock, tempPosition); Vector2Int tempCoordinates = blockToMove.GetCoordinates(); blockToMove.SetCoordinates(swapBlock.GetCoordinates()); swapBlock.SetCoordinates(tempCoordinates); }
private EnergyBlock GetBlockAtPosition(Vector2Int position) { if (position.x >= 0 && position.y >= 0) { foreach (EnergyBlock block in blocks) { if (block.GetCoordinates() == position) { return(block); } } if (endBlock.GetCoordinates() == position) { return(endBlock); } } return(null); }