Exemple #1
0
    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);
    }