/// <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; } }
/// <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; }