Esempio n. 1
0
        public override AttackDataStat CreateAttack(CharacterStatController user, WeaponData weaponData)
        {
            AttackDataStat res = new AttackDataStat(weaponData);

            res.Damage = user.GetStat(statHeal);
            res.DamageVariance = user.GetStat(statHealVariance);

            return res;
        }
 private bool ProcessLaunch(AttackDataStat attack, CharacterStatController target)
 {
     float variance = attack.LaunchDamage * (attack.LaunchDamageVariance * 0.01f);
     int rawDamage = (int)(attack.LaunchDamage + Random.Range(-variance, variance));
     rawDamage -= (int)target.GetStat(statLaunchResistance);
     return (rawDamage > 0);
 }
        private void CheckLaunch(AttackData attackData)
        {

            if (characterMovement.IsGrounded() == true && attackData.AttackDataStat.UserPosition.y-1 <= this.transform.position.y)
            {
                if (airborne == false)
                {
                    airborne = true;
                    characterMovement.ResetSpeedY();
                    characterMovement.Jump(5f - characterStatController.GetStat(statMass));
                    if(airborneClip != null)
                        AudioManager.Instance.PlaySound(airborneClip);
                    if (OnLaunch != null) OnLaunch.Invoke();
                }
            }
            else if(airborne == true && bounce == false && attackData.AttackDataStat.UserPosition.y - 1 < this.transform.position.y) // Under the character
            {
                if (characterMovement.SpeedY <= 0)
                {
                    characterMovement.ResetSpeedY();
                    //characterMovement.Jump(2f);
                }
                if (characterMovement.SpeedY < 4f)
                {
                    //characterMovement.ResetSpeedY();
                    characterMovement.Jump(1.5f);
                }

                if (airborneClip != null)
                    AudioManager.Instance.PlaySound(airborneClip);
                if (OnHitAerial != null) OnHitAerial.Invoke((int)Random.Range(attackData.AttackDataStat.FeverValue, attackData.AttackDataStat.FeverValueMax));
            }
            else if (airborne == true && bounce == false && attackData.AttackDataStat.UserPosition.y + 1 >= this.transform.position.y) // Smackdown
            {
                bounce = true;
                if (OnSmackdown != null) OnSmackdown.Invoke();
            }
            else if (characterAnimation.State == CharacterState.Jump && airborne == false && attackData.AttackDataStat.UserPosition.y - 1 <= this.transform.position.y) // Si l'ennemi a sauté et qu'on le knockback dans les air c'est bon
            {
                airborne = true;
                characterMovement.ResetSpeedY();
                characterMovement.Jump(5f - characterStatController.GetStat(statMass));
                if (airborneClip != null)
                    AudioManager.Instance.PlaySound(airborneClip);
                if (OnLaunch != null) OnLaunch.Invoke();
            }
        }
        /* ======================================== *\
         *                FUNCTIONS                 *
        \* ======================================== */
        public override AttackDataStat CreateAttack(CharacterStatController user, WeaponData weaponData)
        {
            AttackDataStat res = new AttackDataStat(weaponData);
            res.Damage = user.GetStat(statDamage);
            res.DamageVariance = user.GetStat(statDamageVariance);

            res.KnockbackDamage = user.GetStat(statKnockbackDamage);
            res.KnockbackDamageVariance = user.GetStat(statKnockbackDamageVariance);

            res.LaunchDamage = user.GetStat(statLaunchDamage);
            res.LaunchDamageVariance = user.GetStat(statLaunchDamageVariance);

            res.Accuracy = user.GetStat(statAccuracy);
            res.AccuracyVariance = user.GetStat(statAccuracyVariance);
            return res;
        }
        public override DamageMessage ProcessAttack(AttackDataStat attack, CharacterStatController target)
        {
            DamageMessage res;
            int finalDamage = 0;
            float variance = attack.Damage * (attack.DamageVariance * 0.01f);
            int rawDamage = (int) (attack.Damage + Random.Range(-variance, variance+1));
            rawDamage = (int)(rawDamage * target.GetStat(statDefense));

            if (attack.ScratchDamage == true)
            {
                finalDamage = rawDamage;
                res = new DamageMessage(attack.AttackType, 0, finalDamage);
                // Exp
                if (target.Scratch + finalDamage > target.Hp)
                    res.exp = (int)(target.Hp - target.Scratch);
                else
                    res.exp = finalDamage;
                // Exp
                target.Scratch += finalDamage;
            }
            else
            {
                finalDamage = rawDamage + (int)target.Scratch;
                res = new DamageMessage(attack.AttackType, rawDamage, (int)target.Scratch);
                // Exp
                if (target.Hp - finalDamage < 0)
                    res.exp = (int)target.Hp;
                else
                    res.exp = finalDamage;
                // Exp
                target.Hp -= finalDamage;
                target.Scratch = 0;
            }
            if (ProcessKnockback(attack, target) == true)
                res.knockback = true;
            if (ProcessLaunch(attack, target) == true)
                res.launch = true;
            return res;
        }
Esempio n. 6
0
 public void CallStatChange(CharacterStatController stat)
 {
     characterMovement.SetSpeed(stat.GetStat("Speed"));
 }