public AttackResults(int dmg, bool isMiss, DamageRelated AttackingUnit)
        {
            DamageDealt = dmg;
            Miss        = isMiss;

            Unit = AttackingUnit.UnitReference;
        }
    //Actually calculate the combat and it's results
    AttackResults[] GetCombatResults(DamageRelated Attacker, DamageRelated Defender)
    {
        List <AttackResults> AttackList = new List <AttackResults> {
        };

        //Attacker Phase
        if (Attacker.AttackCount > 0)
        {
            AttackList.Add(AttackRoll(Attacker));
            Attacker.AttackCount--;
            Defender.HP -= AttackList[AttackList.Count - 1].DamageDealt;

            print(Attacker.UnitReference.name + " Attacked: Dealt " + AttackList[AttackList.Count - 1].DamageDealt);
            if (Defender.HP <= 0)
            {
                return(AttackList.ToArray());
            }
        }

        //Defender Phase
        if (Defender.AttackCount > 0)
        {
            AttackList.Add(AttackRoll(Defender));
            Defender.AttackCount--;
            Attacker.HP -= AttackList[AttackList.Count - 1].DamageDealt;

            print(Defender.UnitReference.name + " Attacked. Dealt: " + AttackList[AttackList.Count - 1].DamageDealt);

            if (Attacker.HP <= 0)
            {
                return(AttackList.ToArray());
            }
        }

        //Bonus Phase
        if (Attacker.AttackCount > 0)
        {
            AttackList.Add(AttackRoll(Attacker));
            Attacker.AttackCount--;
            Defender.HP -= AttackList[AttackList.Count - 1].DamageDealt;

            print(Attacker.UnitReference.name + " Attacked: Dealt " + AttackList[AttackList.Count - 1].DamageDealt);
        }
        else if (Defender.AttackCount > 0)
        {
            AttackList.Add(AttackRoll(Defender));
            Defender.AttackCount--;
            Attacker.HP -= AttackList[AttackList.Count - 1].DamageDealt;

            print(Defender.UnitReference.name + " Attacked: Dealt " + AttackList[AttackList.Count - 1].DamageDealt);
        }

        return(AttackList.ToArray());
    }
    //Simulates an attack, then returns the damage
    AttackResults AttackRoll(DamageRelated Attacker)
    {
        int  Roll = Random.Range(0, 100), Damage = 0;
        bool Missed = false;

        if (Roll <= Attacker.CritChance)
        {
            Damage = Attacker.Damage * 3;
        }
        else if (Roll <= Attacker.HitChance)
        {
            Damage = Attacker.Damage;
        }
        else
        {
            Missed = true;
        }

        return(new AttackResults(Damage, Missed, Attacker));
    }
    //Sets up all the variables/structs needed locally, but can be triggered from another class
    public void InitializeCombatParameters(RPGClass Attacker, RPGClass Defender, Terrain AttackerTerrain, Terrain DefenderTerrain)
    {
        //Set up my probabilities and damage including resistances
        AttackerDamageParameters = ProbableDamage(Attacker.CombatParameters, Defender.CombatParameters, AttackerTerrain, DefenderTerrain);
        DefenderDamageParameters = ProbableDamage(Defender.CombatParameters, Attacker.CombatParameters, DefenderTerrain, AttackerTerrain);

        //Set up the 'sides', that way world space can be somewhat reflected in the animations and attacker/defender only get to be on one specific side
        if (Attacker.x > Defender.x || Attacker.y > Defender.y)
        {
            RightSide.Unit = Attacker; RightSide.Probabilites = AttackerDamageParameters;
            LeftSide.Unit  = Defender; LeftSide.Probabilites = DefenderDamageParameters;
        }
        else
        {
            RightSide.Unit = Defender; RightSide.Probabilites = DefenderDamageParameters;
            LeftSide.Unit  = Attacker; LeftSide.Probabilites = AttackerDamageParameters;
        }

        //Display a window showing combat information
        getCombatInfo menu = FindObjectOfType <getCombatInfo>();

        menu.PassStats(AttackerDamageParameters, DefenderDamageParameters);
    }