Esempio n. 1
0
    /// <summary>
    /// Selects the tile.
    /// </summary>
    /// <param name="node">Node.</param>
    public void SelectTile(TileNode node)
    {
        switch (currentMode)
        {
        case Mode.Add:

            // create new tower
            if (node.tower == null)
            {
                CreateTower(selectedColour, selectedDirection, selectedRange, node);
            }
            else if (node.tower.pieces.Count < 6)
            {
                // special case for hook
                if (selectedColour == Player.PlayerColour.Hook)
                {
                    // one hook per tower
                    if (node.tower.GetHook() == null)
                    {
                        PieceData piece = new HookPieceData(selectedDirection, Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/GameObject/HexagonPiece")));
                        piece.SetupTextures();
                        node.tower.AddPiece(piece);
                        node.tower.updatePosition();
                        node.tower.owningPlayer.updateScore();
                    }
                }
                else         // non hooks
                {
                    PieceData piece = CreatePiece(selectedColour, selectedDirection, selectedRange);
                    piece.SetupTextures();
                    node.tower.AddPiece(piece);
                    node.tower.updatePosition();
                    node.tower.owningPlayer.updateScore();
                }
            }
            break;

        case Mode.Delete:
            if (node.tower != null)
            {
                // unhighlight
                foreach (TileNode tn in node.tower.GetMoves().Destinations)
                {
                    tn.unhighlight();
                }

                foreach (PieceData pd in node.tower.pieces)
                {
                    Destroy(pd.getObj());
                }

                Player p = node.tower.owningPlayer;

                node.tower.Die();

                p.updateScore();
            }
            break;

        case Mode.Edit:
            break;
        }
    }
Esempio n. 2
0
    /// <summary>
    /// Creates special tiles nodes for the taoex board
    /// </summary>
    void CreateSpecialTile()
    {
        int hookDir = new System.Random().Next(6);

        hookPlayer        = new LocalHumanPlayer();
        hookPlayer.colour = Player.PlayerColour.Hook;

        // block tiles and way tiles
        for (int i = 0; i < 6; i++)
        {
            int x = blockPos[i, 0];
            int z = blockPos[i, 1];

            // block tile
            GameObject tileObject = Instantiate(blockTileObj);
            tiles[x, z] = tileObject.GetComponent <TileNode>();
            tiles[x, z].Init(x, z, TileNode.Type.Block);

            // disable block tile
            tiles[x, z].gameObject.SetActive(false);

            #region generate way tiles
            for (int wayNum = 1; wayNum <= 17; wayNum++)
            {
                //yield return new WaitForSeconds(secPerTile);
                if (x % 2 == 0)
                {
                    x += HexDir.even[(i + 2) % 6].x;
                    z += HexDir.even[(i + 2) % 6].z;
                }
                else
                {
                    x += HexDir.odd[(i + 2) % 6].x;
                    z += HexDir.odd[(i + 2) % 6].z;
                }

                if (tiles[x, z] == null && wayNum != 12)
                {
                    if (wayNum == 6)   // way cross location
                    //tiles[x, z] = new TileNode(x, z, Instantiate(wayTileObj), TileNode.Type.WayCross);
                    {
                        GameObject wayTileObject = Instantiate(wayTileObj);
                        tiles[x, z] = wayTileObject.GetComponent <TileNode>();
                        tiles[x, z].Init(x, z, TileNode.Type.WayCross);

                        wayCrossTiles[i] = tiles[x, z];

                        PieceData hook = new HookPieceData(hookDir, Instantiate(baseHookObj));
                        new PieceTower(hookPlayer, hook, tiles[x, z]);
                        hookDir = (hookDir + 1) % 6;
                    }
                    else
                    {
                        //tiles[x, z] = new TileNode(x, z, Instantiate(wayTileObj), TileNode.Type.Way);
                        GameObject wayTileObject = Instantiate(wayTileObj);
                        tiles[x, z] = wayTileObject.GetComponent <TileNode>();
                        tiles[x, z].Init(x, z, TileNode.Type.Way);
                    }

                    // set wayline ID
                    tiles[x, z].wayLine = i;
                }
            }
            #endregion
        }

        // edge tiles
        #region generate edge tiles
        for (int i = 0; i < edgePos.Length; i++)
        {
            int x = edgePos[i];

            if (i < 6)
            {
//                TileNode topNode = new TileNode(x, shapeTop[i] - 1, Instantiate(edgeTileObj), TileNode.Type.Edge);
//                tiles[x, shapeTop[i] - 1] = topNode;
//                topNode.obj.GetComponent<TileNodeHolder>().node = topNode;
//                edgeTiles[5, i] = topNode;
//                topNode.edgeId = 5;

                int        z             = shapeTop[i] - 1;
                GameObject topTileObject = Instantiate(edgeTileObj);
                tiles[x, z] = topTileObject.GetComponent <TileNode>();
                tiles[x, z].Init(x, z, TileNode.Type.Edge);
                edgeTiles[5, i]    = tiles[x, z];
                tiles[x, z].edgeId = 5;

//                TileNode bottomNode = new TileNode(x, shapeBottom[i], Instantiate(edgeTileObj), TileNode.Type.Edge);
//                tiles[x, shapeBottom[i]] = bottomNode;
//                bottomNode.obj.GetComponent<TileNodeHolder>().node = bottomNode;
//                edgeTiles[4, 5 - i] = bottomNode;
//                bottomNode.edgeId = 4;

                z = shapeBottom[i];
                GameObject bottomTileObject = Instantiate(edgeTileObj);
                tiles[x, z] = bottomTileObject.GetComponent <TileNode>();
                tiles[x, z].Init(x, z, TileNode.Type.Edge);
                edgeTiles[4, 5 - i] = tiles[x, z];
                tiles[x, z].edgeId  = 4;
            }
            else if (i > 11)
            {
//                TileNode topNode = new TileNode(x, shapeTop[edgePos.Length - i - 1] - 1, Instantiate(edgeTileObj), TileNode.Type.Edge);
//                tiles[x, shapeTop[edgePos.Length - i - 1] - 1] = topNode;
//                topNode.obj.GetComponent<TileNodeHolder>().node = topNode;
//                edgeTiles[1, i - 12] = topNode;
//                topNode.edgeId = 1;

                int        z             = shapeTop[edgePos.Length - i - 1] - 1;
                GameObject topTileObject = Instantiate(edgeTileObj);
                tiles[x, z] = topTileObject.GetComponent <TileNode>();
                tiles[x, z].Init(x, z, TileNode.Type.Edge);
                edgeTiles[1, i - 12] = tiles[x, z];
                tiles[x, z].edgeId   = 1;

//                TileNode bottomNode = new TileNode(x, shapeBottom[edgePos.Length - i - 1], Instantiate(edgeTileObj), TileNode.Type.Edge);
//                tiles[x, shapeBottom[edgePos.Length - i - 1]] = bottomNode;
//                bottomNode.obj.GetComponent<TileNodeHolder>().node = bottomNode;
//                edgeTiles[2, 5 - (i - 12)] = bottomNode;
//                bottomNode.edgeId = 2;

                z = shapeBottom[edgePos.Length - i - 1];
                GameObject bottomTileObject = Instantiate(edgeTileObj);
                tiles[x, z] = bottomTileObject.GetComponent <TileNode>();
                tiles[x, z].Init(x, z, TileNode.Type.Edge);
                edgeTiles[2, 5 - (i - 12)] = tiles[x, z];
                tiles[x, z].edgeId         = 2;
            }
            else
            {
//                TileNode topNode = new TileNode(x, boardZ - 1, Instantiate(edgeTileObj), TileNode.Type.Edge);
//                tiles[x, boardZ - 1] = topNode;
//                topNode.obj.GetComponent<TileNodeHolder>().node = topNode;
//                edgeTiles[0, i - 6] = topNode;
//                topNode.edgeId = 0;

                int        z             = boardZ - 1;
                GameObject topTileObject = Instantiate(edgeTileObj);
                tiles[x, z] = topTileObject.GetComponent <TileNode>();
                tiles[x, z].Init(x, z, TileNode.Type.Edge);
                edgeTiles[0, i - 6] = tiles[x, z];
                tiles[x, z].edgeId  = 0;

//                TileNode bottomNode = new TileNode(x, 0, Instantiate(edgeTileObj), TileNode.Type.Edge);
//                tiles[x, 0] = bottomNode;
//                bottomNode.obj.GetComponent<TileNodeHolder>().node = bottomNode;
//                edgeTiles[3, 5 - (i - 6)] = bottomNode;
//                bottomNode.edgeId = 3;

                z = 0;
                GameObject bottomTileObject = Instantiate(edgeTileObj);
                tiles[x, z] = bottomTileObject.GetComponent <TileNode>();
                tiles[x, z].Init(x, z, TileNode.Type.Edge);
                edgeTiles[3, 5 - (i - 6)] = tiles[x, z];
                tiles[x, z].edgeId        = 3;
            }
        }
        #endregion

        doneSpecialTiles = true;
    }