Пример #1
0
    void ToggleCombatDetails(GameObject attacker, GameObject defender, Vector3Int playerPos, Vector3Int enemyPos)
    {
        battle = new BattleSimulation(attacker, defender, playerPos, enemyPos);

        CharacterStats a = attacker.GetComponent <CharacterStats>();
        CharacterStats d = defender.GetComponent <CharacterStats>();

        if (attacker.tag == "Blue" || attacker.tag == "Green")
        {
            PLAYERINFO.GetComponent <CombatPanel>().InitializeInfo(attacker.name, a.GetMaxHealth(), a.GetHealth(),
                                                                   a.GetWeapon(), a.GetArmor(), battle.GetAttackerDamage().ToString(),
                                                                   battle.GetAttackerAccuracy().ToString(), battle.GetAttackerCritDamage().ToString(), battle.GetAttackerAttacks());
            ENEMYINFO.GetComponent <CombatPanel>().InitializeInfo(defender.name, d.GetMaxHealth(), d.GetHealth(),
                                                                  d.GetWeapon(), d.GetArmor(), battle.GetDefenderDamage().ToString(),
                                                                  battle.GetDefenderAccuracy().ToString(), battle.GetDefenderCritDamage().ToString(), battle.GetDefenderAttacks());
        }
        else
        {
            ENEMYINFO.GetComponent <CombatPanel>().InitializeInfo(attacker.name, a.GetMaxHealth(), a.GetHealth(),
                                                                  a.GetWeapon(), a.GetArmor(), battle.GetAttackerDamage().ToString(),
                                                                  battle.GetAttackerAccuracy().ToString(), battle.GetAttackerCritDamage().ToString(), battle.GetAttackerAttacks());
            PLAYERINFO.GetComponent <CombatPanel>().InitializeInfo(defender.name, d.GetMaxHealth(), d.GetHealth(),
                                                                   d.GetWeapon(), d.GetArmor(), battle.GetDefenderDamage().ToString(),
                                                                   battle.GetDefenderAccuracy().ToString(), battle.GetDefenderCritDamage().ToString(), battle.GetDefenderAttacks());
        }
    }
Пример #2
0
    float CalculateRating(BattleSimulation battle)
    {
        float damageDealt = (float)battle.GetAttackerDamage();
        float accuracy    = (float)battle.GetAttackerAccuracy();
        float attacks     = (float)battle.GetAttackerAttacks();

        return(attacks * damageDealt * accuracy * 0.01f);
    }
Пример #3
0
    IEnumerator Combat(GameObject attacker, GameObject defender, GameObject aPanel, GameObject dPanel, int range)
    {
        attacking = true;
        int aDamage     = battle.GetAttackerDamage();
        int aAccuracy   = battle.GetAttackerAccuracy();
        int aCritDamage = battle.GetAttackerCritDamage();
        int aAttacks    = battle.GetAttackerAttacks();
        int dAttacks    = battle.GetDefenderAttacks();
        int dDamage     = battle.GetDefenderDamage();
        int dAccuracy   = battle.GetDefenderAccuracy();
        int dCritDamage = battle.GetDefenderCritDamage();


        while (attacking)
        {
            //Initiator attacks
            if (aAttacks > 0)
            {
                aAttacks--;
                attacker.GetComponent <AttackAnimations>().Strike(defender);
                if (Random.Range(0, 100) < aAccuracy)
                {
                    print(attacker.name + " will deal " + aDamage + " - " + (aDamage + aCritDamage) + " damage!");
                    //Regular hit
                    int damageDealt = CalculateDamage(aDamage, aCritDamage);
                    print("Hit! " + attacker.name + " dealt " + damageDealt + " damage to " + defender.name + "!");
                    DamageVFX(attacker, defender);
                    SoundEffectsManager.instance.PlayStrike();
                    defender.GetComponent <CharacterStats>().TakeDamage(damageDealt);
                    dPanel.GetComponent <CombatPanel>().DeductHealth(damageDealt, defender.GetComponent <CharacterStats>().GetMaxHealth());
                }
                else
                {
                    //Miss...
                    StartCoroutine(MissVFX(defender));
                    SoundEffectsManager.instance.PlayMiss();
                    print(attacker.name + " missed!");
                }

                yield return(new WaitForSeconds(1));

                //Check if the defender died to the attacker's strike
                if (defender.GetComponent <CharacterStats>().GetHealth() == 0)
                {
                    defender.GetComponent <UnitTracker>().Die();
                    break;
                }
            }


            //Defender attacks, if they can
            if (dAttacks > 0)
            {
                dAttacks--;
                defender.GetComponent <AttackAnimations>().Strike(attacker);
                if (Random.Range(0, 100) < dAccuracy)
                {
                    print(attacker.name + " will deal " + dDamage + " - " + (dDamage + dCritDamage) + " damage!");
                    //Regular hit
                    int damageDealt = CalculateDamage(dDamage, dCritDamage);
                    print("Hit! " + defender.name + " dealt " + dDamage + " damage to " + attacker.name + "!");
                    DamageVFX(defender, attacker);
                    SoundEffectsManager.instance.PlayStrike();
                    attacker.GetComponent <CharacterStats>().TakeDamage(damageDealt);
                    aPanel.GetComponent <CombatPanel>().DeductHealth(damageDealt, defender.GetComponent <CharacterStats>().GetMaxHealth());
                }
                else
                {
                    //Miss...
                    StartCoroutine(MissVFX(attacker));
                    SoundEffectsManager.instance.PlayMiss();
                    print(defender.name + " missed!");
                }

                yield return(new WaitForSeconds(1));

                //Check if the attacker died to the defender's strike
                if (attacker.GetComponent <CharacterStats>().GetHealth() == 0)
                {
                    attacker.GetComponent <UnitTracker>().Die();
                    break;
                }
            }


            if (aAttacks == 0 && dAttacks == 0)
            {
                break;
            }
        }

        //What should happen after combat completes
        //For now, just disable the combat ui and finish the turn
        RevertToIdle(attacker, defender);
        attacking = false;
        HideBattleForecast();
        MouseControl.instance.currentState = MouseControl.MouseState.FINISHED;
    }