public void OnTileTapped(AbstractTile tile) { BoardCoord targetCoord = tile.BoardPiece.BoardPosition; if (selectedTile == typeof(BombTile)) { GameObject.Destroy(tile.gameObject); BombTile newTile = Match3BoardRenderer.Instance.SpawnSpecificTileAt(targetCoord, selectedTile, TileColorType.None) as BombTile; newTile.TileColor = RuleEntry.genericColors[Random.Range(0, Match3BoardRenderer.maxNumBoardColors)]; newTile.UpdateMaterial(); } else if (selectedTile == typeof(DirectionalDestroyTile)) { GameObject.Destroy(tile.gameObject); DirectionalDestroyTile newTile = null; if (Random.value > 0.5f) { newTile = Match3BoardRenderer.Instance.SpawnSpecificTileAt(targetCoord, typeof(RowDestroyTile), TileColorType.None) as DirectionalDestroyTile; } else { newTile = Match3BoardRenderer.Instance.SpawnSpecificTileAt(targetCoord, typeof(ColumnDestroyTile), TileColorType.None) as DirectionalDestroyTile; } newTile.TileColor = RuleEntry.genericColors[Random.Range(0, Match3BoardRenderer.maxNumBoardColors)]; newTile.UpdateMaterial(); } else if (selectedTile == typeof(ColorBombTile)) { GameObject.Destroy(tile.gameObject); ColorBombTile newTile = Match3BoardRenderer.Instance.SpawnSpecificTileAt(targetCoord, selectedTile, TileColorType.None) as ColorBombTile; } }
Match3Tile SpawnTimeBomb() { BombTile bombTile = (BoardRenderer as Match3BoardRenderer).SpawnSpecificTileAt(BoardPiece.BoardPosition, typeof(TimeBombTile), TileColorType.None) as BombTile; if (useBigTimeBomb) { bombTile.prefabDestroyEffect = bombTile.prefabDoubleDestroyEffect; } bombTile.TileColor = TileColor; bombTile.UpdateMaterial(); BoardPiece.Tile = bombTile; return(bombTile); }
/// <summary> /// TODO: temporary method used by "CombineWithBombDestroy" method until we decide which effect for this combo remains final. /// Converts the tiles from "tilesToDestroy" into bomb tiles. /// </summary> /// <returns> /// The tiles to bomb tiles. /// </returns> protected IEnumerator ConvertTilesToBombTiles() { // Debug.LogWarning("[ConvertTilesToBombTiles] Found: " + tilesToDestroy.Count + " elements."); Match3Tile cachedIterator; //Start the ICE TRAIL effect towards all the tiles soon to be converted. for (int i = 0; i < tilesToDestroy.Count; i++) { cachedIterator = tilesToDestroy[i]; cachedIterator.DisableTileLogic(); if (cachedIterator is BombTile) { continue; } //TODO: Get rid of the reduntand code Transform effectInstance = (Instantiate(iceTrailEffect) as GameObject).transform; effectInstance.position = WorldPosition; // + new Vector3(0f, 0f, -5f); effectInstance.parent = cachedTransform.parent; effectInstance.LookAt(cachedTransform); StartCoroutine(MoveTargetTo(effectInstance, cachedIterator.cachedTransform, iceTrailTravelTime)); GameObject.Destroy(effectInstance.gameObject, iceTrailTravelTime * 1.5f); } yield return(new WaitForSeconds(iceTrailTravelTime)); for (int i = 0; i < tilesToDestroy.Count; i++) { cachedIterator = tilesToDestroy[i]; if (cachedIterator is BombTile) { continue; } //TODO: Get rid of the reduntand code //instantiate and fire the conversion effect Transform effectInstance = (Instantiate(switchToDirectionalEffect) as GameObject).transform; effectInstance.position = cachedIterator.WorldPosition; // + new Vector3(0f, 0f, -5f); effectInstance.parent = cachedIterator.cachedTransform.parent; effectInstance.LookAt(cachedIterator.cachedTransform); effectInstance.animation.Play(); GameObject.Destroy(effectInstance.gameObject, effectInstance.animation.clip.length); BombTile newBombTile = match3BoardRenderer.SpawnSpecificTileAt(cachedIterator.BoardPiece.BoardPosition.row, cachedIterator.BoardPiece.BoardPosition.col, typeof(BombTile), TileColorType.None ) as BombTile; newBombTile.TileColor = cachedIterator.TileColor; newBombTile.UpdateMaterial(); newBombTile.spawnTimeBomb = false; tilesToDestroy[i] = newBombTile; GameObject.Destroy(cachedIterator.gameObject); } yield return(new WaitForSeconds(switchToDirectionalEffect.animation.clip.length)); }
/// <summary> /// Spawns the new tile. /// </summary> /// <param name='targetPiece'> /// Target piece. /// </param> public Match3Tile SpawnNewTile(bool isBoardSetup = false) { Match3Tile tileResult = null; // Early out if rule if (ruleEntries == null || ruleEntries.Count == 0) { return(tileResult); } if (numberOfExecutions == 0) { EndSpawnRule(); return(tileResult); } //Select random rule entry and acquire its info spawnedEntry = ruleEntries[Random.Range(0, ruleEntries.Count)]; spawnedType = spawnedEntry.RuleTileType; spawnedColor = spawnedEntry.RuleTileColor; if (ownerList != null && ownerList.Count > 0) { numberOfExecutions--; } // bool offBoard = false; // // if(ownerList != null) // { // if (ownerList.Count == 0) // { // offBoard = false; // } // else // { // offBoard = true; // numberOfExecutions--; // } // } //Spawn tile as described by the spawn rule // Debug.LogWarning("[SpawnRule] Spawning [" + spawnedType.ToString() + "] [" + spawnedColor.ToString() + "] [offboard:" + offBoard + "]"); if (typeof(BombTile) == spawnedType) { BombTile spawnedTile = Match3BoardRenderer.Instance.SpawnSpecificTile(spawnedType, TileColorType.None, isBoardSetup) as BombTile; // BombTile spawnedTile = Match3BoardRenderer.Instance.SpawnSpecificTileAt(targetPiece.BoardPosition, spawnedType, TileColorType.None, offBoard, isBoardSetup) as BombTile; spawnedTile.TileColor = spawnedColor; spawnedTile.UpdateMaterial(); tileResult = spawnedTile; } else if (typeof(DirectionalDestroyTile).IsAssignableFrom(spawnedType)) { DirectionalDestroyTile spawnedTile = Match3BoardRenderer.Instance.SpawnSpecificTile(spawnedType, TileColorType.None, isBoardSetup) as DirectionalDestroyTile; // DirectionalDestroyTile spawnedTile = Match3BoardRenderer.Instance.SpawnSpecificTileAt(targetPiece.BoardPosition, spawnedType, TileColorType.None, offBoard, isBoardSetup) as DirectionalDestroyTile; spawnedTile.TileColor = spawnedColor; spawnedTile.UpdateMaterial(); tileResult = spawnedTile; } else { // tileResult = Match3BoardRenderer.Instance.SpawnSpecificTileAt(targetPiece.BoardPosition, spawnedType, spawnedColor, offBoard, isBoardSetup); tileResult = Match3BoardRenderer.Instance.SpawnSpecificTile(spawnedType, spawnedColor, isBoardSetup); } if (tileResult != null) { tileResult.IsTileIgnoredByAntiMatchSystems = isTileIgnoredByAntiMatchSystems; } return(tileResult); }