Exemplo n.º 1
0
    //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;
        }
    }
Exemplo n.º 2
0
 // Use this for initialization
 void Start()
 {
     spriteRenderer = this.GetComponent <SpriteRenderer>();
     animator       = this.GetComponent <Animator>();
     currentEnvironmentCondition = EnvironmentCondition.None;
     remainingConditionTime      = 0f;
 }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    //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);
        }
    }
Exemplo n.º 5
0
    // 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;
            }
        }
    }
Exemplo n.º 7
0
    // 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;
            }
        }
    }
Exemplo n.º 8
0
    //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();
    }