//Set Environment Condition public void setEnvironmentCondition(EnvironmentCondition condition, float additionalTime = 0f) { if (condition == EnvironmentCondition.Fire) { if (currentEnvironmentCondition == EnvironmentCondition.Puddle || currentEnvironmentCondition == EnvironmentCondition.Ice) { animator.SetTrigger("Evaporate"); currentEnvironmentCondition = EnvironmentCondition.None; } else if (currentEnvironmentCondition == EnvironmentCondition.PuddleAndShock || currentEnvironmentCondition == EnvironmentCondition.IceAndShock) { animator.SetTrigger("Evaporate"); currentEnvironmentCondition = EnvironmentCondition.Shock; } } else if (condition == EnvironmentCondition.Ice) { if (currentEnvironmentCondition == EnvironmentCondition.Puddle || currentEnvironmentCondition == EnvironmentCondition.PuddleAndShock) { currentEnvironmentCondition = EnvironmentCondition.Ice; spriteRenderer.sprite = ControllerManager.Instance.getEnvironmentController().iceSprite; remainingConditionTime = ControllerManager.Instance.getEnvironmentController().iceDuration + additionalTime; animator.SetTrigger("Solodify"); } } else if (condition == EnvironmentCondition.Puddle) { if (currentEnvironmentCondition == EnvironmentCondition.None) { currentEnvironmentCondition = EnvironmentCondition.Puddle; remainingConditionTime = ControllerManager.Instance.getEnvironmentController().puddleDuration + additionalTime; animator.SetTrigger("Create"); } if (currentEnvironmentCondition == EnvironmentCondition.Shock) { currentEnvironmentCondition = EnvironmentCondition.PuddleAndShock; remainingConditionTime = ControllerManager.Instance.getEnvironmentController().shockDuration; animator.SetTrigger("Create"); } } else if (condition == EnvironmentCondition.Shock) { if (currentEnvironmentCondition == EnvironmentCondition.Puddle) { currentEnvironmentCondition = EnvironmentCondition.PuddleAndShock; } else if (currentEnvironmentCondition == EnvironmentCondition.Ice) { currentEnvironmentCondition = EnvironmentCondition.IceAndShock; } else { currentEnvironmentCondition = EnvironmentCondition.Shock; } GameObject obj = ControllerManager.Instance.getSpellEffectController().spawnShockEffect(this.transform.position); obj.transform.parent = this.gameObject.transform; remainingConditionTime = ControllerManager.Instance.getEnvironmentController().shockDuration + additionalTime; } }
// Use this for initialization void Start() { spriteRenderer = this.GetComponent <SpriteRenderer>(); animator = this.GetComponent <Animator>(); currentEnvironmentCondition = EnvironmentCondition.None; remainingConditionTime = 0f; }
EnvironmentCondition EnvironmentConditionFromXmlElement(XElement conditionEl, Dictionary <string, AtomState> atomStateDict) { EnvironmentCondition environmentCondition = new EnvironmentCondition(); foreach (XElement elementCondition in conditionEl.Elements("element")) { foreach (string elementString in elementCondition.Value.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries)) { environmentCondition.elementConditions.Add(elementString); } } foreach (XElement amberCondition in conditionEl.Elements("amber")) { foreach (string amberString in amberCondition.Value.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries)) { environmentCondition.amberConditions.Add(amberString); } } foreach (XElement pdbCondition in conditionEl.Elements("pdb")) { foreach (string pdbString in pdbCondition.Value.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries)) { environmentCondition.pdbConditions.Add(pdbString); } } foreach (XElement residueCondition in conditionEl.Elements("residue")) { foreach (string residueString in residueCondition.Value.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries)) { environmentCondition.residueConditions.Add(residueString); } } foreach (XElement ringCondition in conditionEl.Elements("inRing")) { foreach (string ringString in ringCondition.Value.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries)) { environmentCondition.ringConditions.Add(int.Parse(ringString)); } } foreach (XElement neighbourCountCondition in conditionEl.Elements("neighbourCount")) { foreach (string neighbourCountString in neighbourCountCondition.Value.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries)) { environmentCondition.neighbourCountConditions.Add(int.Parse(neighbourCountString)); } } foreach (XElement neighboursEnvironmentCondition in conditionEl.Elements("neighbour")) { environmentCondition.neighboursEnvironmentConditions.Add(EnvironmentConditionFromXmlElement(neighboursEnvironmentCondition, atomStateDict)); } return(environmentCondition); }
//Set Environment Condition public void setEnvironmentCondition(Vector2 position, EnvironmentCondition condition, float additionalTime = 0f) { int tileNumber = ((int)(position.y + 5f) * width) + (int)(position.x + 9f); if (insideArea(tileNumber)) { tiles[tileNumber].GetComponent <Environment>().setEnvironmentCondition(condition, additionalTime); } }
// Update is called once per frame void Update() { //Update Sprite & Shock Animation if (currentEnvironmentCondition == EnvironmentCondition.None) { spriteRenderer.sprite = null; } else if ((currentEnvironmentCondition != EnvironmentCondition.PuddleAndShock && currentEnvironmentCondition != EnvironmentCondition.IceAndShock && currentEnvironmentCondition != EnvironmentCondition.Shock) && (this.transform.childCount > 0)) { Destroy(this.transform.GetChild(0).gameObject); } //Update Condition if (remainingConditionTime > 0) { remainingConditionTime -= Time.deltaTime; if (remainingConditionTime <= 0f) { if (currentEnvironmentCondition == EnvironmentCondition.Puddle) { currentEnvironmentCondition = EnvironmentCondition.None; spriteRenderer.sprite = null; remainingConditionTime = 0f; animator.SetTrigger("Evaporate"); } else if (currentEnvironmentCondition == EnvironmentCondition.PuddleAndShock) { currentEnvironmentCondition = EnvironmentCondition.Puddle; Destroy(this.transform.GetChild(0).gameObject); remainingConditionTime = ControllerManager.Instance.getEnvironmentController().puddleDuration; } else if (currentEnvironmentCondition == EnvironmentCondition.Ice) { currentEnvironmentCondition = EnvironmentCondition.Puddle; spriteRenderer.sprite = ControllerManager.Instance.getEnvironmentController().puddleSprite; remainingConditionTime = ControllerManager.Instance.getEnvironmentController().puddleDuration; animator.SetTrigger("Melt"); } else if (currentEnvironmentCondition == EnvironmentCondition.IceAndShock) { currentEnvironmentCondition = EnvironmentCondition.Ice; Destroy(this.transform.GetChild(0).gameObject); remainingConditionTime = ControllerManager.Instance.getEnvironmentController().iceDuration; } else if (currentEnvironmentCondition == EnvironmentCondition.Shock) { currentEnvironmentCondition = EnvironmentCondition.None; Destroy(this.transform.GetChild(0).gameObject); remainingConditionTime = 0f; } } } }
//Update Method private void Update() { if (currentActivePrecipitation != ActivePrecipitation.None) { if (currentActivePrecipitation == ActivePrecipitation.HailStorm) { //Check for Damage Interval if (currentIntervalPoint_Puddles <= 0f) { List <GameObject> enemies = ControllerManager.Instance.getEnemySpawner().getActiveEnemies(); for (int i = 0; i < enemies.Count; i++) { enemies[i].GetComponent <Enemy>().takeDamage(SpellDatabase.hailStormSpell.damage); } currentIntervalPoint_Puddles = puddleSpawnInterval; } else { currentIntervalPoint_Puddles -= Time.deltaTime; } } else if (currentActivePrecipitation == ActivePrecipitation.Blizzard) { //Check for Slow Interval if (currentIntervalPoint_Puddles <= 0f) { List <GameObject> enemies = ControllerManager.Instance.getEnemySpawner().getActiveEnemies(); for (int i = 0; i < enemies.Count; i++) { enemies[i].GetComponent <Enemy>().setCondition(Condition.Slowed, 1f, 0.5f); } currentIntervalPoint_Puddles = puddleSpawnInterval; } else { currentIntervalPoint_Puddles -= Time.deltaTime; } } else { //Check for Puddle Creation Interval if (currentIntervalPoint_Puddles <= 0f) { Vector2 randomPosition = new Vector2(Random.Range(-7.9f, 7.9f), Random.Range(-4.9f, 3.9f)); ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(randomPosition, EnvironmentCondition.Puddle, rainDuration); currentIntervalPoint_Puddles = puddleSpawnInterval; } else { currentIntervalPoint_Puddles -= Time.deltaTime; } //Check for Thunder Storm if (thunderStormDuration > 0f) { if (currentIntervalPoint_Lightning <= 0f) { ControllerManager.Instance.getScreenFlashController().flashScreen(3f); ControllerManager.Instance.getScreenShakeController().screenShake(0.1f, 0.5f); Vector2 randomPosition = new Vector2(Random.Range(-7.9f, 7.9f), Random.Range(-4.9f, 3.9f)); Vector2 affectedArea = SpellRangeOverlay.Instance.getAffectedAreaByPoint(randomPosition); spawnEffect(SpellDatabase.lightningStrikeSpell, affectedArea); ControllerManager.Instance.getSoundController().playSound(ControllerManager.Instance.getSoundController().thunderClip2); currentIntervalPoint_Lightning = lightningSpawnInterval; //Check for Puddles EnvironmentCondition affectedTile = ControllerManager.Instance.getEnvironmentController().getEnvironmentCondition(affectedArea); if (affectedTile == EnvironmentCondition.Puddle || affectedTile == EnvironmentCondition.PuddleAndShock) { Vector2[] affectedTiles = ControllerManager.Instance.getEnvironmentController().getConnectedPuddles(affectedArea); for (int i = 0; i < affectedTiles.Length; i++) { ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(affectedTiles[i], EnvironmentCondition.Shock); } } //Check for Affected Enemies Collider2D[] collisions = Physics2D.OverlapBoxAll(affectedArea, new Vector2(0.95f, 0.95f), 0f); for (int j = 0; j < collisions.Length; j++) { if (collisions[j].gameObject.CompareTag("Enemy")) { collisions[j].gameObject.GetComponent <Enemy>().takeDamage(SpellDatabase.lightningStrikeSpell.damage); } } } else { currentIntervalPoint_Lightning -= Time.deltaTime; } thunderStormDuration -= Time.deltaTime; } } //Check Sounds if (!audioSource.isPlaying && remainingRainDuration >= 3f) { audioSource.Play(); } //Check for Rain Time if (remainingRainDuration <= 1f) { rainAnimator.SetTrigger("Advance"); } if (remainingRainDuration <= 0f) { rainSprite.color = new Color(1f, 1f, 1f, 0f); currentActivePrecipitation = ActivePrecipitation.None; } else { remainingRainDuration -= Time.deltaTime; } } else { //No Precipitation if (audioSource.isPlaying) { if (audioSource.volume == 0f) { audioSource.Stop(); audioSource.volume = 1f; } else { audioSource.volume -= 0.3f * Time.deltaTime; } } else if (audioSource.volume < 1f) { audioSource.volume = 1f; } } }
// Update is called once per frame void Update() { //Check if Enemy Has Arrive at Destination if (((Vector2)this.transform.position - target) == Vector2.zero) { retireEnemy(); return; } //Update Conditions if (currentCondition != Condition.None) { //Ablaze Damage if (currentCondition == Condition.Ablaze) { currentIntervalPoint -= Time.deltaTime; if (currentIntervalPoint <= 0f) { if (takeDamage(ControllerManager.Instance.getConditionController().ablazeDamage)) { return; } currentIntervalPoint = ControllerManager.Instance.getConditionController().ablazeDamageInterval; } } //Update Remaining Condition Time remainingConditionTime -= Time.deltaTime; if (remainingConditionTime <= 0f) { clearConditions(); } } //Update Stun Grace if (stunGrace > 0f) { stunGrace -= Time.deltaTime; } //Check Movement Impairing Conditions if (currentCondition != Condition.Frozen && currentCondition != Condition.Stunned && currentCondition != Condition.Shocked) { //Check Environment EnvironmentCondition condition = ControllerManager.Instance.getEnvironmentController().getEnvironmentCondition(this.transform.position); if (condition == EnvironmentCondition.Ice && stunGrace == 0f) { setCondition(Condition.Stunned, ControllerManager.Instance.getConditionController().stunnedDuration); stunGrace = ControllerManager.Instance.getConditionController().stunnedDuration + 2f; return; } else if (condition == EnvironmentCondition.Shock || condition == EnvironmentCondition.PuddleAndShock) { setCondition(Condition.Shocked, ControllerManager.Instance.getConditionController().shockedDuration); return; } //Get Desired Movement Position Vector2 positionAfterMovement = Vector2.MoveTowards(this.transform.position, target, speed * speedFactor * Time.deltaTime); //Check for Collisions bool canMove = true; Collider2D[] collisions = Physics2D.OverlapBoxAll(positionAfterMovement, Vector2.one, 0f); for (int j = 0; j < collisions.Length; j++) { if ((collisions[j].gameObject != this.gameObject) && (collisions[j].gameObject.CompareTag("Enemy"))) { //Check for Condition Propagation Condition collisionCondition = collisions[j].gameObject.GetComponent <Enemy>().currentCondition; if (collisionCondition == Condition.Ablaze) { setCondition(Condition.Ablaze, ControllerManager.Instance.getConditionController().ablazeDuration); } else if (collisionCondition == Condition.Shocked) { setCondition(Condition.Shocked, ControllerManager.Instance.getConditionController().shockedDuration); } //Break canMove = false; break; } } //Finally... Move! if (canMove) { this.transform.position = positionAfterMovement; } } }
//Cast Spell Logic public void castSpell(Spell preparedSpell) { //Get Affected Positions Vector2[] affectedArea = SpellRangeOverlay.Instance.getAffectedArea(); //Spend Mana ControllerManager.Instance.getManaController().spendMana(preparedSpell.manaCost - ControllerManager.Instance.getCorruptionController().getCorruptionBonuses()); //Remove Text Balloon Player.Instance.setManaTextBalloon(false); //Spell Logic #region Flash Freeze if (preparedSpell.name == SpellName.FlashFreeze) { //Animate Player.Instance.setCastingAnimation(0); ControllerManager.Instance.getScreenFlashController().flashScreen(2f); ControllerManager.Instance.getSoundController().playSound(ControllerManager.Instance.getSoundController().flashFreezeClip); //Iterate Affected Area List <Enemy> affectedEnemies = new List <Enemy>(); for (int i = 0; i < affectedArea.Length; i++) { //Check for Puddles ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(affectedArea[i], EnvironmentCondition.Ice); //Check for Enemies Collider2D[] collisions = Physics2D.OverlapBoxAll(affectedArea[i], new Vector2(0.95f, 0.95f), 0f); for (int j = 0; j < collisions.Length; j++) { if (collisions[j].gameObject.CompareTag("Enemy")) { Enemy enemy = collisions[j].gameObject.GetComponent <Enemy>(); if (!affectedEnemies.Contains(enemy)) { enemy.setCondition(Condition.Frozen, ControllerManager.Instance.getConditionController().frozenDuration); affectedEnemies.Add(enemy); } } } } } #endregion #region Fire Blast else if (preparedSpell.name == SpellName.FireBlast) { //Animate Player.Instance.setCastingAnimation(1); ControllerManager.Instance.getScreenShakeController().screenShake(0.1f, 0.2f); ControllerManager.Instance.getSoundController().playSound(ControllerManager.Instance.getSoundController().fireClip); //Iterate Affected Area List <Enemy> affectedEnemies = new List <Enemy>(); for (int i = 0; i < affectedArea.Length; i++) { //Check for Puddles ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(affectedArea[i], EnvironmentCondition.Fire); //If Area is Mage, Ignore if (affectedArea[i] == (Vector2)Player.Instance.gameObject.transform.position) { continue; } //Spawn Fire ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.fireBlastSpell, affectedArea[i]); //Check for Affected Enemies Collider2D[] collisions = Physics2D.OverlapBoxAll(affectedArea[i], new Vector2(0.95f, 0.95f), 0f); for (int j = 0; j < collisions.Length; j++) { if (collisions[j].gameObject.CompareTag("Enemy")) { Enemy enemy = collisions[j].gameObject.GetComponent <Enemy>(); if (!affectedEnemies.Contains(enemy)) { enemy.setCondition(Condition.Ablaze, 0f); enemy.takeDamage(SpellDatabase.fireBlastSpell.damage); affectedEnemies.Add(enemy); } } } } } #endregion #region Lightning Strike else if (preparedSpell.name == SpellName.LightningStrike) { //Animate Player.Instance.setCastingAnimation(2); ControllerManager.Instance.getScreenShakeController().screenShake(0.3f, 0.5f); ControllerManager.Instance.getScreenFlashController().flashScreen(0.8f); ControllerManager.Instance.getSoundController().playSound(ControllerManager.Instance.getSoundController().thunderClip2); //Spawn Lightning ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.lightningStrikeSpell, affectedArea[0]); //Check for Puddles EnvironmentCondition affectedTile = ControllerManager.Instance.getEnvironmentController().getEnvironmentCondition(affectedArea[0]); if (affectedTile == EnvironmentCondition.Puddle || affectedTile == EnvironmentCondition.PuddleAndShock) { Vector2[] affectedTiles = ControllerManager.Instance.getEnvironmentController().getConnectedPuddles(affectedArea[0]); for (int i = 0; i < affectedTiles.Length; i++) { ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(affectedTiles[i], EnvironmentCondition.Shock); } } //Check for Affected Enemies Collider2D[] collisions = Physics2D.OverlapBoxAll(affectedArea[0], new Vector2(0.95f, 0.95f), 0f); for (int j = 0; j < collisions.Length; j++) { if (collisions[j].gameObject.CompareTag("Enemy")) { collisions[j].gameObject.GetComponent <Enemy>().takeDamage(SpellDatabase.lightningStrikeSpell.damage); } } } #endregion #region Tornado else if (preparedSpell.name == SpellName.Tornado) { //Animate Player.Instance.setCastingAnimation(3); ControllerManager.Instance.getScreenShakeController().screenShake(0.05f, 0.8f); //Spawn Tornado ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.tornadoSpell, new Vector2(affectedArea[0].x - 0.1f, affectedArea[0].y + 0.3f)); } #endregion #region Summon Rain else if (preparedSpell.name == SpellName.SummonRain) { //Animate Player.Instance.setCastingAnimation(4); ControllerManager.Instance.getScreenFlashController().flashScreen(1f); //Activate Rain ControllerManager.Instance.getSpellEffectController().activateRain(16f, 1f); } #endregion #region Cleanse else if (preparedSpell.name == SpellName.Cleanse) { //Animate Player.Instance.setCastingAnimation(5); ControllerManager.Instance.getScreenFlashController().flashScreen(3f); ControllerManager.Instance.getSoundController().playSound(ControllerManager.Instance.getSoundController().cleanseClip); //Spawn Effect ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.cleanseSpell, Vector2.zero); //Heal! ControllerManager.Instance.getCorruptionController().gainCorruption(SpellDatabase.cleanseSpell.damage); } #endregion #region Deep Freeze else if (preparedSpell.name == SpellName.DeepFreeze) { //Animate Player.Instance.setCastingAnimation(0); ControllerManager.Instance.getScreenFlashController().flashScreen(2f); ControllerManager.Instance.getSoundController().playSound(ControllerManager.Instance.getSoundController().flashFreezeClip); //Iterate Affected Area List <Enemy> affectedEnemies = new List <Enemy>(); for (int i = 0; i < affectedArea.Length; i++) { //Check for Puddles ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(affectedArea[i], EnvironmentCondition.Ice); //Check for Enemies Collider2D[] collisions = Physics2D.OverlapBoxAll(affectedArea[i], new Vector2(0.95f, 0.95f), 0f); for (int j = 0; j < collisions.Length; j++) { if (collisions[j].gameObject.CompareTag("Enemy")) { Enemy enemy = collisions[j].gameObject.GetComponent <Enemy>(); if (!affectedEnemies.Contains(enemy)) { enemy.setCondition(Condition.Frozen, ControllerManager.Instance.getConditionController().frozenDuration * 2); affectedEnemies.Add(enemy); } } } } } #endregion #region Hell Fire else if (preparedSpell.name == SpellName.Hellfire) { //Animate Player.Instance.setCastingAnimation(1); ControllerManager.Instance.getScreenShakeController().screenShake(0.2f, 0.3f); ControllerManager.Instance.getSoundController().playSound(ControllerManager.Instance.getSoundController().fireClip); //Iterate Affected Area List <Enemy> affectedEnemies = new List <Enemy>(); for (int i = 0; i < affectedArea.Length; i++) { //Check for Puddles ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(affectedArea[i], EnvironmentCondition.Fire); //If Area is Mage, Ignore if (affectedArea[i] == (Vector2)Player.Instance.gameObject.transform.position) { continue; } //Spawn Fire ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.fireBlastSpell, affectedArea[i]); //Check for Affected Enemies Collider2D[] collisions = Physics2D.OverlapBoxAll(affectedArea[i], new Vector2(0.95f, 0.95f), 0f); for (int j = 0; j < collisions.Length; j++) { if (collisions[j].gameObject.CompareTag("Enemy")) { Enemy enemy = collisions[j].gameObject.GetComponent <Enemy>(); if (!affectedEnemies.Contains(enemy)) { enemy.setCondition(Condition.Ablaze, ControllerManager.Instance.getConditionController().ablazeDuration); enemy.takeDamage(SpellDatabase.hellFireSpell.damage); affectedEnemies.Add(enemy); } } } } } #endregion #region Superbolt else if (preparedSpell.name == SpellName.Superbolt) { //Animate Player.Instance.setCastingAnimation(2); //Juicyness ControllerManager.Instance.getScreenShakeController().screenShake(0.3f, 0.5f); ControllerManager.Instance.getScreenFlashController().flashScreen(0.8f); ControllerManager.Instance.getSoundController().playSound(ControllerManager.Instance.getSoundController().thunderClip1); //Spawn Lightning ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.superboltSpell, affectedArea[0]); //Check for Puddles EnvironmentCondition affectedTile = ControllerManager.Instance.getEnvironmentController().getEnvironmentCondition(affectedArea[0]); if (affectedTile == EnvironmentCondition.Puddle || affectedTile == EnvironmentCondition.Shock) { Vector2[] affectedTiles = ControllerManager.Instance.getEnvironmentController().getConnectedPuddles(affectedArea[0]); for (int i = 0; i < affectedTiles.Length; i++) { ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(affectedTiles[i], EnvironmentCondition.Shock); } } //Shock All Adjacent ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(affectedArea[0], EnvironmentCondition.Shock); List <Vector2> adjacent = ControllerManager.Instance.getEnvironmentController().getAdjacentTiles(affectedArea[0]); for (int i = 0; i < adjacent.Count; i++) { ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(adjacent[i], EnvironmentCondition.Shock); affectedTile = ControllerManager.Instance.getEnvironmentController().getEnvironmentCondition(adjacent[i]); if (affectedTile == EnvironmentCondition.Puddle || affectedTile == EnvironmentCondition.PuddleAndShock) { Vector2[] affectedTiles = ControllerManager.Instance.getEnvironmentController().getConnectedPuddles(adjacent[i]); for (int j = 0; j < affectedTiles.Length; j++) { ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(affectedTiles[j], EnvironmentCondition.Shock); } } } //Check for Affected Enemies Collider2D[] collisions = Physics2D.OverlapBoxAll(affectedArea[0], new Vector2(0.95f, 0.95f), 0f); for (int j = 0; j < collisions.Length; j++) { if (collisions[j].gameObject.CompareTag("Enemy")) { collisions[j].gameObject.GetComponent <Enemy>().takeDamage(SpellDatabase.superboltSpell.damage); } } //Check for Enemies in Adjacent Tiles for (int i = 0; i < adjacent.Count; i++) { collisions = Physics2D.OverlapBoxAll(adjacent[i], new Vector2(0.95f, 0.95f), 0f); for (int j = 0; j < collisions.Length; j++) { if (collisions[j].gameObject.CompareTag("Enemy")) { collisions[j].gameObject.GetComponent <Enemy>().takeDamage(10); } } } } #endregion #region Hurricane else if (preparedSpell.name == SpellName.Hurricane) { //Animate Player.Instance.setCastingAnimation(3); ControllerManager.Instance.getScreenShakeController().screenShake(0.08f, 0.8f); //Spawn Hurricane ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.hurricaneSpell, new Vector2(affectedArea[0].x - 0.1f, affectedArea[0].y + 0.3f)); } #endregion #region Cloudburst else if (preparedSpell.name == SpellName.Cloudburst) { //Animate Player.Instance.setCastingAnimation(4); ControllerManager.Instance.getScreenFlashController().flashScreen(1f); //Activate Rain ControllerManager.Instance.getSpellEffectController().activateRain(16f, 0.5f); } #endregion #region Purify else if (preparedSpell.name == SpellName.Purify) { //Animate Player.Instance.setCastingAnimation(5); ControllerManager.Instance.getScreenFlashController().flashScreen(3f); ControllerManager.Instance.getSoundController().playSound(ControllerManager.Instance.getSoundController().purifyClip); //Spawn Effect ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.cleanseSpell, Vector2.zero); //Heal! ControllerManager.Instance.getCorruptionController().gainCorruption(SpellDatabase.purifySpell.damage); } #endregion #region Thunder Storm else if (preparedSpell.name == SpellName.ThunderStorm) { //Animate Player.Instance.setCastingAnimation(2); ControllerManager.Instance.getScreenFlashController().flashScreen(3f); //Activate Rain ControllerManager.Instance.getSpellEffectController().activateThunderStorm(10f, 1f, 1.5f); } #endregion #region Hail Storm else if (preparedSpell.name == SpellName.HailStorm) { //Animate Player.Instance.setCastingAnimation(4); ControllerManager.Instance.getScreenShakeController().screenShake(0.2f, 0.2f); ControllerManager.Instance.getScreenFlashController().flashScreen(1f); //Activate Hail Storm ControllerManager.Instance.getSpellEffectController().activateHailStorm(10f, 1f); } #endregion #region Typhoon else if (preparedSpell.name == SpellName.Typhoon) { //Animate Player.Instance.setCastingAnimation(3); ControllerManager.Instance.getScreenShakeController().screenShake(0.05f, 0.8f); //Spawn Tornado ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.tornadoSpell, new Vector2(affectedArea[0].x - 0.1f, affectedArea[0].y + 0.3f)); //Activate Rain ControllerManager.Instance.getSpellEffectController().activateRain(10f, 1f); } #endregion #region Super Cell else if (preparedSpell.name == SpellName.SuperCell) { //Animate Player.Instance.setCastingAnimation(3); ControllerManager.Instance.getScreenShakeController().screenShake(0.3f, 0.5f); ControllerManager.Instance.getScreenFlashController().flashScreen(0.8f); //Spawn Tornado ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.tornadoSpell, new Vector2(affectedArea[0].x - 0.1f, affectedArea[0].y + 0.3f)); //Spawn Lightning ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.lightningStrikeSpell, affectedArea[0]); ControllerManager.Instance.getSoundController().playSound(ControllerManager.Instance.getSoundController().thunderClip2); //Check for Puddles EnvironmentCondition affectedTile = ControllerManager.Instance.getEnvironmentController().getEnvironmentCondition(affectedArea[0]); if (affectedTile == EnvironmentCondition.Puddle || affectedTile == EnvironmentCondition.Shock) { Vector2[] affectedTiles = ControllerManager.Instance.getEnvironmentController().getConnectedPuddles(affectedArea[0]); for (int i = 0; i < affectedTiles.Length; i++) { ControllerManager.Instance.getEnvironmentController().setEnvironmentCondition(affectedTiles[i], EnvironmentCondition.Shock); } } //Check for Affected Enemies Collider2D[] collisions = Physics2D.OverlapBoxAll(affectedArea[0], new Vector2(0.95f, 0.95f), 0f); for (int j = 0; j < collisions.Length; j++) { if (collisions[j].gameObject.CompareTag("Enemy")) { collisions[j].gameObject.GetComponent <Enemy>().takeDamage(SpellDatabase.lightningStrikeSpell.damage); } } } #endregion #region Fire Storm else if (preparedSpell.name == SpellName.FireStorm) { //Animate Player.Instance.setCastingAnimation(1); ControllerManager.Instance.getScreenShakeController().screenShake(0.05f, 0.8f); //Spawn Tornado ControllerManager.Instance.getSpellEffectController().spawnEffect(SpellDatabase.fireStormSpell, new Vector2(affectedArea[0].x - 0.1f, affectedArea[0].y + 0.3f)); } #endregion #region Blizzard else if (preparedSpell.name == SpellName.Blizzard) { //Animate Player.Instance.setCastingAnimation(3); ControllerManager.Instance.getScreenFlashController().whiteOut(10f, 1f); //Activate Hail Storm ControllerManager.Instance.getSpellEffectController().activateBlizzard(10f, 0.5f); } #endregion //Reset Prepared Spells resetPreparedSpells(); //Reset Spell Range Overlay SpellRangeOverlay.Instance.disableSpellOverlay(); //Reset Cursor ControllerManager.Instance.getCursorChangerController().resetMouse(); }