コード例 #1
0
ファイル: GridCell.cs プロジェクト: dqchess/Tap-Match
        public static void ExplodeCell(GridCell gCell, float delay, bool showPrefab, bool fly, bool hitProtection, Action completeCallBack)
        {
            if (gCell.GetBomb() && !gCell.MatchProtected)
            {
                gCell.ExplodeBomb(delay, true, true, true, false, completeCallBack);
                return;
            }

            if (gCell.Overlay && gCell.Overlay.BlockMatch)
            {
                delayAction(gCell.gameObject, delay, () => { gCell.DirectHitOverlay(null); completeCallBack?.Invoke(); });
                return;
            }

            if (gCell.DynamicBlocker)
            {
                delayAction(gCell.gameObject, delay, () =>
                {
                    gCell.DirectHitBlocker(null);
                    if (gCell.Overlay)
                    {
                        gCell.DirectHitOverlay(null);
                    }
                    completeCallBack?.Invoke();
                });
                return;
            }

            if (gCell.StaticBlocker)
            {
                delayAction(gCell.gameObject, delay, () =>
                {
                    gCell.DirectHitBlocker(null);
                    if (gCell.Overlay)
                    {
                        gCell.DirectHitOverlay(null);
                    }
                    completeCallBack?.Invoke();
                });
                return;
            }

            if (gCell.Match && gCell.IsMatchable)
            {
                gCell.Match.Explode(gCell, showPrefab, fly, hitProtection, hitProtection, delay, completeCallBack);
                return;
            }

            if (gCell.Underlay)
            {
                delayAction(gCell.gameObject, delay, () => { gCell.DirectHitUnderlay(null); completeCallBack?.Invoke(); });
                return;
            }

            completeCallBack?.Invoke();
        }
コード例 #2
0
ファイル: BombCombiner.cs プロジェクト: dqchess/Tap-Match
        private DynamicClickBombObjectData sourceColorBombData; // need only for color bomb

        public void CombineAndExplode(GridCell gCell, DynamicClickBombObject bomb, Action completeCallBack)
        {
            if (!gCell || !bomb)
            {
                completeCallBack?.Invoke();
                return;
            }

            NeighBors   nG  = gCell.Neighbors;
            BombDir     bd1 = bomb.GetBombDir();
            BombCombine bC  = BombCombine.None;
            List <DynamicClickBombObject> nBs = GetNeighBombs(gCell);

            if (bomb.GetBombDir() == BombDir.Color)
            {
                sourceColorBombData = bomb.OData;
            }

            foreach (var item in nBs) // search color bomb
            {
                BombDir bd2 = item.GetBombDir();
                if (bd2 == BombDir.Color)
                {
                    if (sourceColorBombData == null)
                    {
                        sourceColorBombData = item.OData;
                    }
                    bC = GetCombineType(bd1, bd2);
                    break;
                }
            }

            if (bC == BombCombine.None) // search radial bomb
            {
                foreach (var item in nBs)
                {
                    BombDir bd2 = item.GetBombDir();
                    if (bd2 == BombDir.Radial)
                    {
                        bC = GetCombineType(bd1, bd2);
                        break;
                    }
                }
            }

            if (bC == BombCombine.None) // search hor or vert bomb
            {
                foreach (var item in nBs)
                {
                    BombDir bd2 = item.GetBombDir();
                    if (bd2 == BombDir.Horizontal || bd2 == BombDir.Vertical)
                    {
                        bC = GetCombineType(bd1, bd2);
                        break;
                    }
                }
            }

            switch (bC)
            {
            case BombCombine.ColorBombAndColorBomb:         // clean full board
                collectTween = new ParallelTween();
                nBs.Add(bomb);
                foreach (var item in nBs)
                {
                    item.transform.parent = null;
                    item.SetToFront(true);
                    Creator.CreateSprite(item.transform, glow, item.transform.position, SortingOrder.BombCreator - 1);
                    collectTween.Add((callBack) =>
                    {
                        item.MoveToBomb(gCell, 0, () => { Destroy(item.gameObject); callBack(); });
                    });
                }
                collectTween.Start(() =>
                {
                    MSound.SoundPlayMakeBomb(0.05f, null);
                    CombinedColorBombAndColorBomb bigBomb = Instantiate(colorBombAndColorBombPrefab);
                    bigBomb.transform.localScale          = gCell.transform.lossyScale;
                    bigBomb.transform.position            = gCell.transform.position;
                    bigBomb.ApplyToGrid(gCell, 0.2f, completeCallBack);
                });

                break;

            case BombCombine.BombAndBomb:                   // big bomb explode
                collectTween = new ParallelTween();
                nBs.Add(bomb);
                foreach (var item in nBs)
                {
                    item.transform.parent = null;
                    item.SetToFront(true);
                    Creator.CreateSprite(item.transform, glow, item.transform.position, SortingOrder.BombCreator - 1);
                    collectTween.Add((callBack) =>
                    {
                        item.MoveToBomb(gCell, 0, () => { Destroy(item.gameObject); callBack(); });
                    });
                }
                collectTween.Start(() =>
                {
                    MSound.SoundPlayMakeBomb(0.05f, null);
                    CombinedBombAndBomb bigBomb  = Instantiate(bombAndBombPrefab);
                    bigBomb.transform.localScale = gCell.transform.lossyScale;
                    bigBomb.transform.position   = gCell.transform.position;
                    bigBomb.ApplyToGrid(gCell, 0.2f, completeCallBack);
                });
                break;

            case BombCombine.RocketAndRocket:               // 2 rows or 2 columns
                collectTween = new ParallelTween();
                nBs.Add(bomb);
                foreach (var item in nBs)
                {
                    item.transform.parent = null;
                    item.SetToFront(true);
                    Creator.CreateSprite(item.transform, glow, item.transform.position, SortingOrder.BombCreator - 1);
                    collectTween.Add((callBack) =>
                    {
                        item.MoveToBomb(gCell, 0, () => { Destroy(item.gameObject, 0.2f); callBack(); });
                    });
                }
                collectTween.Start(() =>
                {
                    MSound.SoundPlayMakeBomb(0.05f, null);
                    CombinedRocketAndRocket bigBomb = Instantiate(rocketAndRocketPrefab);
                    bigBomb.transform.localScale    = gCell.transform.lossyScale;
                    bigBomb.transform.position      = gCell.transform.position;
                    bigBomb.ApplyToGrid(gCell, 0.2f, completeCallBack);
                });
                break;

            case BombCombine.ColorBombAndBomb:              // replace color match with bomb
                collectTween = new ParallelTween();
                nBs.Add(bomb);

                foreach (var item in nBs)
                {
                    item.transform.parent = null;
                    item.SetToFront(true);
                    Creator.CreateSprite(item.transform, glow, item.transform.position, SortingOrder.BombCreator - 1);
                    collectTween.Add((callBack) =>
                    {
                        item.MoveToBomb(gCell, 0, () => { Destroy(item.gameObject); callBack(); });
                    });
                }
                collectTween.Start(() =>
                {
                    MSound.SoundPlayMakeBomb(0.05f, null);
                    CombinedColorBombAndBomb colorBombAndBomb = Instantiate(colorBombAndBombPrefab);
                    colorBombAndBomb.transform.localScale     = gCell.transform.lossyScale;
                    colorBombAndBomb.transform.position       = gCell.transform.position;
                    colorBombAndBomb.OData = sourceColorBombData;
                    colorBombAndBomb.ApplyToGrid(gCell, 0.2f, completeCallBack);
                    colorBombAndBomb.GetComponent <SpriteRenderer>().sprite = sourceColorBombData.ObjectImage;
                });

                break;

            case BombCombine.BombAndRocket:                 // 3 rows and 3 columns
                collectTween = new ParallelTween();
                nBs.Add(bomb);
                foreach (var item in nBs)
                {
                    item.transform.parent = null;
                    item.SetToFront(true);
                    Creator.CreateSprite(item.transform, glow, item.transform.position, SortingOrder.BombCreator - 1);
                    collectTween.Add((callBack) =>
                    {
                        item.MoveToBomb(gCell, 0, () => { Destroy(item.gameObject); callBack(); });
                    });
                }
                collectTween.Start(() =>
                {
                    MSound.SoundPlayMakeBomb(0.05f, null);
                    CombinedBombAndRocket bombAndRocket = Instantiate(bombAndRocketPrefab);
                    bombAndRocket.transform.localScale  = gCell.transform.lossyScale;
                    bombAndRocket.transform.position    = gCell.transform.position;
                    bombAndRocket.ApplyToGrid(gCell, 0.2f, completeCallBack);
                });
                break;

            case BombCombine.ColorBombAndRocket:            // replace color bomb with rockets
                collectTween = new ParallelTween();
                nBs.Add(bomb);

                foreach (var item in nBs)
                {
                    item.transform.parent = null;
                    item.SetToFront(true);
                    Creator.CreateSprite(item.transform, glow, item.transform.position, SortingOrder.BombCreator - 1);
                    collectTween.Add((callBack) =>
                    {
                        item.MoveToBomb(gCell, 0, () => { Destroy(item.gameObject); callBack(); });
                    });
                }
                collectTween.Start(() =>
                {
                    MSound.SoundPlayMakeBomb(0.05f, null);
                    CombinedColorBombAndRocket colorBombAndRocket = Instantiate(colorBombAndRocketPrefab);
                    colorBombAndRocket.transform.localScale       = gCell.transform.lossyScale;
                    colorBombAndRocket.transform.position         = gCell.transform.position;
                    colorBombAndRocket.OData = sourceColorBombData;
                    colorBombAndRocket.ApplyToGrid(gCell, 0.2f, completeCallBack);
                    colorBombAndRocket.GetComponent <SpriteRenderer>().sprite = sourceColorBombData.ObjectImage;
                });
                break;

            case BombCombine.None:                          // simple explode
                gCell.ExplodeBomb(0.0f, true, true, bd1 == BombDir.Color, false, () =>
                {
                    completeCallBack?.Invoke();
                });
                break;

            default:
                completeCallBack?.Invoke();
                break;
            }
        }