Esempio n. 1
0
 private void CheckBlockValid(EnergyBlock block, int[] validConnections)
 {
     if (block != null &&
         !block.IsConnected &&
         block.IsActive &&
         CollectionContains(validConnections, block.BlockType))
     {
         block.Connect();
         UpdateConnections(block);
     }
 }
Esempio n. 2
0
    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);
            }
        }
    }
Esempio n. 3
0
    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);
    }