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(); }
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)); } }
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; } } }