示例#1
0
    private double CalculateDamage(bool DirectionBonus, AttackTiming TimingBonus)
    {
        double Damage = BASE_DAMAGE_HERO;

        if (DirectionBonus)
        {
            Damage *= DIRECTION_BONUS_MULT;
        }
        switch (TimingBonus)
        {
        case (AttackTiming.Perfect):
            Damage *= PERFECT_TIMING_MULT;
            break;

        case (AttackTiming.Good):
            Damage *= GOOD_TIMING_MULT;
            break;

        case (AttackTiming.Okay):
            Damage *= OKAY_TIMING_MULT;
            break;

        case (AttackTiming.Miss):
            Damage *= MISS_TIMING_MULT;
            break;

        default:
            break;
        }
        return(Damage);
    }
示例#2
0
    public double PerformAttack()
    {
        bool         Hit    = !IsBlock();
        AttackTiming Timing = GetTiming();

        if (Timing == AttackTiming.Miss)
        {
            BS.ResetComboCounter();
            Hit = false;
        }

        if (Hit)
        {
            BS.IncrementComboCounter();
            return(CalculateDamage(IsDirectionBonus(), GetTiming()));
        }

        return(0.0);
    }
示例#3
0
    public double PerformDefence()
    {
        bool         Hit         = !IsBlock();
        AttackTiming BlockTiming = GetTiming();

        if (BlockTiming == AttackTiming.Miss)
        {
            BS.ResetComboCounter();
            Hit = true;
        }

        if (Hit)
        {
            return(CalculateDamageToPlayer(IsDirectionBonus(), GetTiming()));
        }
        else
        {
            BS.IncrementComboCounter();
            return(0.0);
        }
    }
示例#4
0
    private AttackTiming GetTiming()
    {
        AttackTiming Timing         = AttackTiming.Miss;
        double       DistToNextBeat = BS.getBeatDist();

        if (DistToNextBeat >= MISS_TIMING_THRESH)
        {
            Timing = AttackTiming.Miss;
        }
        else if (DistToNextBeat >= OKAY_TIMING_THRESH)
        {
            Timing = AttackTiming.Okay;
        }
        else if (DistToNextBeat >= GOOD_TIMING_THRESH)
        {
            Timing = AttackTiming.Good;
        }
        else if (DistToNextBeat >= PERFECT_TIMING_THRESH)
        {
            Timing = AttackTiming.Perfect;
        }

        return(Timing);
    }