Ejemplo n.º 1
0
    static void CollapseFieldInstant(Directions dir)
    {
        bool[,] matched;

        while (true)
        {
            matched = GameManager.Instance.Grid.CheckMatches();
            if (matched != null)
            {
                Vector2i pos;
                for (pos.x = 0; pos.x < Constants.FIELD_SIZE_X; pos.x++)
                {
                    for (pos.y = 0; pos.y < Constants.FIELD_SIZE_Y; pos.y++)
                    {
                        if (matched[pos.x, pos.y])
                        {
                            Gem gem = GameManager.Instance.Grid.Get(pos);
                            if (GameManager.Instance.LevelData.GetGemTypeInfo(gem.GetGemType())._effectType != LevelData.GemEffectType.ET_HERO)
                            {
                                gem.Die();
                            }
                        }
                    }
                }
                GameManager.Instance.Grid.Collapse(matched, 0, dir);
            }
            else
            {
                break;
            }
        }
        GameManager.Instance.Grid.Log();
    }
Ejemplo n.º 2
0
    static void Collect(Vector2i gridPos, int multiplier)
    {
        Gem     gem          = GameManager.Instance.Grid.Get(gridPos);
        int     type         = gem.GetGemType();
        int     data         = GameManager.Instance.LevelData.GetGemTypeInfo(type)._effectData;
        Vector3 destPosition = Vector3.zero;

        LevelData.GemEffectType et = GameManager.Instance.LevelData.GetGemTypeInfo(type)._effectType;
        switch (et)
        {
        case LevelData.GemEffectType.ET_GEM_HEALTH:
            destPosition = GameManager.Instance.HUD.Health.GetBarCenter();
            GameManager.Instance.HUD.Health.Add(data * multiplier);
            gem.Die();
            break;

        case LevelData.GemEffectType.ET_GEM_COIN:
            destPosition = GameManager.Instance.HUD.Coins.GetCenter();
            GameManager.Instance.HUD.Coins.Add(data * multiplier);
            gem.Die();
            break;

        case LevelData.GemEffectType.ET_GEM_NORMAL:
        case LevelData.GemEffectType.ET_GEM_MULTIPLY:
        case LevelData.GemEffectType.ET_GEM_CROSS:
        case LevelData.GemEffectType.ET_GEM_BOOST:
            destPosition = GameManager.Instance.HeroManager.GetPosition(data);
            GameManager.Instance.HeroManager.CollectGem(gridPos, data, multiplier);
            gem.Die();
            break;

        case LevelData.GemEffectType.ET_HERO:
            destPosition = GameManager.Instance.HeroManager.GetPosition(data);
            GameManager.Instance.HeroManager.CollectGem(gridPos, data, multiplier);
            break;

        case LevelData.GemEffectType.ET_ENEMY:
            destPosition = GameManager.Instance.HUD.Waves.GetEnemyPosition(data);
            break;

        case LevelData.GemEffectType.ET_EMPTY:
            gem.Die();
            break;

        default:
            DebugUtils.Assert(false);
            break;
        }

        if (gem.IsDead())
        {
            float fadeOutTime = GameManager.Instance.Definitions.MatchFadeTime;

            gem.SetupFadeOut(fadeOutTime);
            StartCoroutine(Effects.Pulse(GameManager.Instance.Definitions.MatchFlyTime,
                                         GameManager.Instance.Definitions.MatchFlyWaitTime,
                                         GameManager.Instance.Definitions.MatchHitTime, null,
                                         GameManager.Instance.Definitions.ParticleCollectFly,
                                         GameManager.Instance.Definitions.ParticleCollect,
                                         gem.transform.position,
                                         destPosition,
                                         true));
        }
    }
Ejemplo n.º 3
0
    public IEnumerator PowerAttack()
    {
        float pulseTime = GameManager.Instance.Definitions.PulseTime;

        ResetPowerCharge();
        yield return(StartCoroutine(Scale(pulseTime)));

        switch (_power._type)
        {
        case LevelData.Power.Types.DAMAGE:
            StartCoroutine(Effects.Pulse(GameManager.Instance.Definitions.PulseFlyTime,
                                         GameManager.Instance.Definitions.PulseFlyWaitTime,
                                         GameManager.Instance.Definitions.PulseHitTime, null,
                                         GameManager.Instance.Definitions.ParticlePowerDamageFly,
                                         GameManager.Instance.Definitions.ParticlePowerDamage,
                                         transform.position,
                                         GameManager.Instance.HUD.Health.GetBarCenter(), true));

            yield return(new WaitForSeconds(GameManager.Instance.Definitions.PulseFlyWaitTime));

            GameManager.Instance.HUD.Health.Add(-((int)(ActionPoints * _power._f + 0.5f) + _power._i));

            yield return(new WaitForSeconds(GameManager.Instance.Definitions.PulseHitTime));

            break;

        case LevelData.Power.Types.DAMAGE_FIGURES_SELF:
        case LevelData.Power.Types.DAMAGE_FIGURES_TARGET:
        {
            bool anyDead = false;
            int  count   = _hero ? GameManager.Instance.EnemyManager.GetEnemiesCount():GameManager.Instance.HeroManager.GetHeroesCount();
            for (int i = 0; i < count; i++)
            {
                Figure figure = _hero ? GameManager.Instance.EnemyManager.GetEnemyAtIndex(i) : GameManager.Instance.HeroManager.GetHeroAtIndex(i);
                if (figure && !figure.GetGemScript().IsDead())
                {
                    yield return(StartCoroutine(Effects.Pulse(GameManager.Instance.Definitions.PulseFlyTime,
                                                              GameManager.Instance.Definitions.PulseFlyWaitTime,
                                                              GameManager.Instance.Definitions.PulseHitTime, null,
                                                              GameManager.Instance.Definitions.ParticlePowerDamageFigureFly,
                                                              GameManager.Instance.Definitions.ParticlePowerDamageFigure,
                                                              transform.position,
                                                              figure.transform.position, true)));

                    int points = _power._type == LevelData.Power.Types.DAMAGE_FIGURES_SELF ? ActionPoints : figure.ActionPoints;
                    figure.ActionPoints -= (int)(points * _power._f + 0.5f) + _power._i;
                    anyDead             |= figure.GetGemScript().IsDead();
                }
            }
            if (anyDead)
            {
                yield return(StartCoroutine(Puzzle.CollapseField(Directions.Down, null)));
            }
            break;
        }

        case LevelData.Power.Types.ABSORB_GEMS:
        {
            bool any = false;
            for (int i = 0; i < _power._i; i++)
            {
                Vector2i gemPos = GameManager.Instance.Grid.FindNearest(_gem.GetGridPosition(), _power._et);
                if (gemPos.x == -1)
                {
                    break;
                }

                StartCoroutine(Effects.Pulse(GameManager.Instance.Definitions.PulseFlyTime,
                                             GameManager.Instance.Definitions.PulseFlyWaitTime,
                                             GameManager.Instance.Definitions.PulseHitTime,
                                             GameManager.Instance.Definitions.ParticlePowerAbsorbHealthGem,
                                             GameManager.Instance.Definitions.ParticlePowerAbsorbHealthFly,
                                             GameManager.Instance.Definitions.ParticlePowerAbsorbHealth,
                                             GameManager.Instance.Grid.Get(gemPos).transform.position,
                                             transform.position,
                                             true));
                yield return(new WaitForSeconds(pulseTime));

                Gem gem = GameManager.Instance.Grid.Get(gemPos);
                gem.SetupFadeOut(pulseTime);
                yield return(StartCoroutine(Scale(pulseTime)));

                ActionPoints += _power._i2;

                gem.SetGemType(GameManager.Instance.LevelData.GetEmptyGemType());
                gem.TweenColor(0, new Color(0, 0, 0, 0), Tweener.Method.EaseIn);
                gem.Die();
                any = true;
            }
            if (any)
            {
                yield return(StartCoroutine(Puzzle.CollapseField(Directions.Down, null)));
            }
            break;
        }

        case LevelData.Power.Types.COLLECT_GEMS:
        {
            Vector2i gridPos;
            for (int j = 0; j < 4; j++)
            {
                for (int i = 1; i <= _power._i; i++)
                {
                    gridPos = _gem.GetGridPosition() + Vector2i.Directions[j] * i;
                    if (Grid.Valid(gridPos))
                    {
                        Gem gem = GameManager.Instance.Grid.Get(gridPos);
                        LevelData.GemEffectType et = GameManager.Instance.LevelData.GetGemTypeInfo(gem.GetGemType())._effectType;
                        if (_hero && et == LevelData.GemEffectType.ET_ENEMY ||
                            !_hero && et == LevelData.GemEffectType.ET_HERO)
                        {
                            Figure figure = _hero ? GameManager.Instance.EnemyManager.GetAtPosition(gridPos) :
                                            GameManager.Instance.HeroManager.GetAtPosition(gridPos);
                            figure.ActionPoints -= (int)((float)ActionPoints * _power._f) + _power._i2;
                            StartCoroutine(Effects.Sparkle(pulseTime, GameManager.Instance.Definitions.ParticlePowerCollectGemEnemy, gem.transform.position));
                        }
                        else if (et != LevelData.GemEffectType.ET_HERO)
                        {
                            gem.Die();
                            StartCoroutine(Effects.Sparkle(pulseTime, GameManager.Instance.Definitions.ParticlePowerCollectGem, gem.transform.position));
                        }
                    }
                }
            }
            yield return(new WaitForSeconds(pulseTime));

            yield return(StartCoroutine(Puzzle.CollapseField(Directions.Down, null)));

            break;
        }

        case LevelData.Power.Types.TRANSFORM_RANDOM_GEMS:
        {
            Vector2i              pos;
            Coroutine             c   = null;
            LevelData.GemTypeInfo gti = GameManager.Instance.LevelData.GetGemTypeInfo(_power._i2);
            int excludeColor          = gti._colored ? gti._effectData : -1;
            for (int j = 0; j < _power._i; j++)
            {
                pos = GameManager.Instance.Grid.FindValidPosition(Grid.RandomGridPosition(), LevelData.GetBasicGemTypes(), excludeColor);

                c = StartCoroutine(GameManager.Instance.Grid.Get(pos).ChangeGemType(_power._i2, GameManager.Instance.Definitions.ParticlePowerTransformGem));
                yield return(new WaitForSeconds(GameManager.Instance.Definitions.TransformGemWaitTime));
            }
            yield return(c);

            yield return(StartCoroutine(Puzzle.CollapseField(Directions.Down, null)));

            break;
        }
        }
    }