public static void ApplyDamage(DamageProperty prop, Unit source, GridCell target, int level)
    {
        if (prop.targetCasterOverride)
        {
            int damage = BattleCalculations.CalculateDamage(source, source, prop.damagePerLevel [level].min, prop.damagePerLevel [level].max, prop.element, prop.scaleFactor);
            source.Damage(damage, prop.element);
        }

        else if (target.currentUnit != null)
        {
            if (target.currentUnit == source)
            {
                if (prop.affectsCaster)
                {
                    int damage = BattleCalculations.CalculateDamage(source, source, prop.damagePerLevel [level].min, prop.damagePerLevel [level].max, prop.element, prop.scaleFactor);
                    source.Damage(damage, prop.element);
                }
            }

            else if (prop.affectedUnits.Contains(target.currentUnit.unitType))
            {
                int damage = BattleCalculations.CalculateDamage(source, target.currentUnit, prop.damagePerLevel [level].min, prop.damagePerLevel [level].max, prop.element, prop.scaleFactor);
                target.currentUnit.Damage(damage, prop.element);
            }
        }
    }
Пример #2
0
 public void setUp()
 {
     Fi.startEngine();
     pokemonFactory       = new PokemonFactory();
     calculations         = new BattleCalculations();
     pokemonBattleManager = new PokemonBattleManager();
 }
    public override void ApplyEffect(Unit caster, GridCell target, int level, bool crit)
    {
        int heal = BattleCalculations.CalculateHeal(caster, minHealPerLevel [level - 1], maxHealPerLevel [level - 1]);

        if (target.currentUnit != null)
        {
            if (affectsAll)
            {
                //Hit
                target.currentUnit.Heal(heal);
            }
            else if (affectedUnits.Contains(target.currentUnit.unitType))
            {
                if (target.currentUnit == caster)
                {
                    if (affectsCaster)
                    {
                        //Hit
                        target.currentUnit.Heal(heal);
                    }
                }
                else
                {
                    //Hit
                    target.currentUnit.Heal(heal);
                }
            }
        }
    }
Пример #4
0
 public override void ApplyEffect(Unit caster, GridCell target, int level, bool crit)
 {
     if (target.currentUnit != null)
     {
         if (affectsAll)
         {
             int damage = BattleCalculations.CalculateDamage(caster, target.currentUnit, minDamagePerLevel [level - 1],
                                                             maxDamagePerLevel [level - 1], element, scaleFactor);
             target.currentUnit.Damage(damage, element);
         }
         else if (affectedUnits.Contains(target.currentUnit.unitType))
         {
             if (target.currentUnit == caster)
             {
                 if (affectsCaster)
                 {
                     int damage = BattleCalculations.CalculateDamage(caster, target.currentUnit, minDamagePerLevel [level - 1],
                                                                     maxDamagePerLevel [level - 1], element, scaleFactor);
                     target.currentUnit.Damage(damage, element);
                 }
             }
             else
             {
                 int damage = BattleCalculations.CalculateDamage(caster, target.currentUnit, minDamagePerLevel [level - 1],
                                                                 maxDamagePerLevel [level - 1], element, scaleFactor);
                 target.currentUnit.Damage(damage, element);
             }
         }
     }
 }
Пример #5
0
    public override int MovementLockPenalty()
    {
        List <Unit> adjacentEnemies = new List <Unit> ();

        for (int x = -1; x <= 1; x++)
        {
            GridPos pos = new GridPos(currentLocation.gridPos.x - x, currentLocation.gridPos.y);
            if (GridManager.gridCells.ContainsKey(pos))
            {
                GridCell nextGridCell = GridManager.gridCells [pos];
                if (nextGridCell.currentUnit != null)
                {
                    Unit unit = nextGridCell.currentUnit;
                    if (unit.unitType == eUnitType.ENEMY || unit.unitType == eUnitType.ENEMY_SUMMON)
                    {
                        if (unit != this)
                        {
                            adjacentEnemies.Add(unit);
                        }
                    }
                }
            }
        }
        for (int y = -1; y <= 1; y++)
        {
            GridPos pos = new GridPos(currentLocation.gridPos.x, currentLocation.gridPos.y - y);
            if (GridManager.gridCells.ContainsKey(pos))
            {
                GridCell nextGridCell = GridManager.gridCells [pos];
                if (nextGridCell.currentUnit != null)
                {
                    Unit unit = nextGridCell.currentUnit;
                    if (unit.unitType == eUnitType.ENEMY || unit.unitType == eUnitType.ENEMY_SUMMON)
                    {
                        if (unit != this)
                        {
                            adjacentEnemies.Add(unit);
                        }
                    }
                }
            }
        }
        if (adjacentEnemies.Count > 0)
        {
            int mpLoss = BattleCalculations.CalculateDodgeLockMpReduction(this, adjacentEnemies);
            return(mpLoss);
        }
        else
        {
            return(0);
        }
    }
Пример #6
0
    public bool HasCrit(int index)
    {
        AbilityInfo info = abilityInfo [index];

        if (info.ability.baseCritChance > 0)
        {
            return(BattleCalculations.CalculateCrit(info.ability.baseCritChance));
        }
        else
        {
            return(false);
        }
    }
Пример #7
0
 private int CalculateApMpLossValue(Unit caster, Unit target, int val)
 {
     if (!isResistable)
     {
         return(val);
     }
     if (stat == eStat.MAX_AP)
     {
         int valueLost = -BattleCalculations.CalculateApMpLoss(caster, target, val, true);
         return(valueLost);
     }
     else if (stat == eStat.MAX_MP)
     {
         int valueLost = -BattleCalculations.CalculateApMpLoss(caster, target, val, false);
         return(valueLost);
     }
     else
     {
         return(val);
     }
 }
Пример #8
0
 void Start()
 {
     thisPokemon = transform.GetComponent <Pokemon>();
     input       = transform.GetComponent <PokemonInput>();
     dmgCalc     = GetComponent <BattleCalculations>();
 }
    IEnumerator WaitForEnemy()
    {
        //Debug.Log(currentState);
        switch (currentState)
        {
        case (BattleStates.STORY):
            if (storyCount == 1)
            {
                if (Story1Toggle.complete)
                {
                    currentState = BattleStates.START;
                }
            }
            else if (storyCount == 2)
            {
                if (Story2Toggle.complete)
                {
                    battleStateStartScript.PrepareBattle(fightCount);
                    currentState = BattleStates.PLAYERCHOICE;
                }
            }
            else if (storyCount == 3)
            {
                if (Story3Toggle.complete)
                {
                    battleStateStartScript.PrepareBattle(fightCount);
                    currentState = BattleStates.PLAYERCHOICE;
                }
            }
            else if (storyCount == 4)
            {
                if (Story4Toggle.complete)
                {
                    battleStateStartScript.PrepareBattle(fightCount);
                    currentState = BattleStates.PLAYERCHOICE;
                }
            }
            else if (storyCount == 5)
            {
                if (Story5Toggle.complete)
                {
                    battleStateStartScript.PrepareBattle(fightCount);
                    currentState = BattleStates.PLAYERCHOICE;
                }
            }
            if (storyCount == 6)
            {
                if (Story6Toggle.complete)
                {
                    battleStateStartScript.PrepareBattle(fightCount);
                    currentState = BattleStates.PLAYERCHOICE;
                }
            }


            break;

        case (BattleStates.START):

            battleStateStartScript.PrepareBattle(fightCount);
            currentState = BattleStates.PLAYERCHOICE;
            break;

        case (BattleStates.PLAYERCHOICE):
            currentCharacter = battleStateStartScript.MC;
            if (currentCharacter.Defeated)
            {
                currentState = BattleStates.RATCHOICE;
            }
            break;

        case (BattleStates.NATHANCHOICE):
            currentCharacter = battleStateStartScript.nathan;
            if (currentCharacter.Defeated)
            {
                currentState = BattleStates.ENEMYONECHOICE;
            }
            break;

        case (BattleStates.RATCHOICE):
            currentCharacter = battleStateStartScript.ratKing;
            if (currentCharacter.Defeated)
            {
                currentState = BattleStates.NATHANCHOICE;
            }
            break;

        case (BattleStates.CHOOSETARGET):



            break;

        case (BattleStates.CALCULATEDAMAGE):

            battleCalcScript.CalculateUsedAbilityDamage(usedAbilty);
            if (WinLossCheck() == 1)
            {
                currentState = BattleStates.LOSE;
            }
            else if (WinLossCheck() == 2)
            {
                currentState = BattleStates.WIN;
            }
            else if (currentCharacter == battleStateStartScript.MC)
            {
                currentState = BattleStates.ENEMYANIMATE;
                BattleCalculations.playAnimation(TurnBasedCombatStateMachine.currentCharacter, TurnBasedCombatStateMachine.targetCharacter, TurnBasedCombatStateMachine.usedAbilty);
                attacking = true;
                if (attacking)
                {
                    yield return(new WaitForSeconds(1.5f));
                }
                attacking = false;
            }
            else if (currentCharacter == battleStateStartScript.ratKing)
            {
                currentState = BattleStates.ENEMYANIMATE;
                BattleCalculations.playAnimation(TurnBasedCombatStateMachine.currentCharacter, TurnBasedCombatStateMachine.targetCharacter, TurnBasedCombatStateMachine.usedAbilty);
                attacking = true;
                if (attacking)
                {
                    yield return(new WaitForSeconds(1.5f));
                }
                attacking = false;
            }
            else if (currentCharacter == battleStateStartScript.nathan)
            {
                currentState = BattleStates.ENEMYANIMATE;
                BattleCalculations.playAnimation(TurnBasedCombatStateMachine.currentCharacter, TurnBasedCombatStateMachine.targetCharacter, TurnBasedCombatStateMachine.usedAbilty);
                attacking = true;
                if (attacking)
                {
                    yield return(new WaitForSeconds(2.5f));
                }
                attacking = false;
            }
            else if (currentCharacter == battleStateStartScript.EnemyOne)
            {
                currentState = BattleStates.ENEMYTWOCHOICE;
            }
            else if (currentCharacter == battleStateStartScript.EnemyTwo)
            {
                currentState = BattleStates.ENEMYTHREECHOICE;
            }
            else if (currentCharacter == battleStateStartScript.EnemyThree)
            {
                currentState = BattleStates.PLAYERCHOICE;
            }

            break;

        case (BattleStates.PLAYERANIMATE):
            break;

        case (BattleStates.ENEMYONECHOICE):
            currentCharacter = battleStateStartScript.EnemyOne;
            if (currentCharacter.Defeated)
            {
                currentState = BattleStates.ENEMYTWOCHOICE;
            }
            else
            {
                battleCalcScript.EnemyAi(currentCharacter);
                usedAbilty   = battleStateStartScript.EnemyOne.AbilityOne;
                currentState = BattleStates.ENEMYTWOCHOICE;
                BattleCalculations.playAnimation(TurnBasedCombatStateMachine.currentCharacter, TurnBasedCombatStateMachine.targetCharacter, TurnBasedCombatStateMachine.usedAbilty);
                attacking = true;
                if (attacking)
                {
                    yield return(new WaitForSeconds(2));
                }
                attacking = false;
            }
            if (WinLossCheck() == 1)
            {
                currentState = BattleStates.LOSE;
            }

            break;

        case (BattleStates.ENEMYTWOCHOICE):
            currentCharacter = battleStateStartScript.EnemyTwo;
            if (currentCharacter.Defeated)
            {
                currentState = BattleStates.ENEMYANIMATE;
            }
            else
            {
                battleCalcScript.EnemyAi(currentCharacter);
                usedAbilty = battleStateStartScript.EnemyTwo.AbilityOne;

                currentState = BattleStates.ENEMYANIMATE;
                BattleCalculations.playAnimation(TurnBasedCombatStateMachine.currentCharacter, TurnBasedCombatStateMachine.targetCharacter, TurnBasedCombatStateMachine.usedAbilty);
                attacking = true;
                if (attacking)
                {
                    if (isBigMitch)
                    {
                        yield return(new WaitForSeconds(4));
                    }
                    else
                    {
                        yield return(new WaitForSeconds(2));
                    }
                }
                attacking = false;
            }
            if (WinLossCheck() == 1)
            {
                currentState = BattleStates.LOSE;
            }

            break;

        case (BattleStates.ENEMYTHREECHOICE):
            currentCharacter = battleStateStartScript.EnemyThree;
            if (currentCharacter.Defeated)
            {
                currentState = BattleStates.PLAYERCHOICE;
            }
            else
            {
                battleCalcScript.EnemyAi(currentCharacter);
                usedAbilty = battleStateStartScript.EnemyThree.AbilityOne;

                currentState = BattleStates.ENEMYANIMATE;
                BattleCalculations.playAnimation(TurnBasedCombatStateMachine.currentCharacter, TurnBasedCombatStateMachine.targetCharacter, TurnBasedCombatStateMachine.usedAbilty);
                attacking = true;
                if (attacking)
                {
                    yield return(new WaitForSeconds(2));
                }
                attacking = false;
            }
            if (WinLossCheck() == 1)
            {
                currentState = BattleStates.LOSE;
            }

            break;

        case (BattleStates.ENEMYANIMATE):

            if (currentCharacter == battleStateStartScript.MC)
            {
                currentState = BattleStates.RATCHOICE;
            }
            else if (currentCharacter == battleStateStartScript.ratKing)
            {
                currentState = BattleStates.NATHANCHOICE;
            }
            else if (currentCharacter == battleStateStartScript.nathan)
            {
                currentState = BattleStates.ENEMYONECHOICE;
            }
            else if (currentCharacter == battleStateStartScript.EnemyOne)
            {
                currentState = BattleStates.ENEMYTWOCHOICE;
            }
            else if (currentCharacter == battleStateStartScript.EnemyTwo)
            {
                currentState = BattleStates.ENEMYTHREECHOICE;
            }
            else if (currentCharacter == battleStateStartScript.EnemyThree)
            {
                currentState = BattleStates.PLAYERCHOICE;
            }


            break;

        case (BattleStates.LOSE):
            Debug.Log("Lose");
            battleStateStartScript.PrepareBattle(fightCount);
            currentState = BattleStates.PLAYERCHOICE;
            break;

        case (BattleStates.WIN):
            Debug.Log("Win");
            storyCount += 1;
            fightCount += 1;
            if (fightCount == 3)
            {
                isBigMitch = true;
            }
            else
            {
                isBigMitch = false;
            }

            currentState = BattleStates.STORY;
            break;
        }
    }
Пример #10
0
 // Use this for initialization
 void Start()
 {
     battle = GetComponent<BattleCalculations> ();
 }