6e5501b32d
add WaW support fix stats threading
57 lines
1.7 KiB
C#
57 lines
1.7 KiB
C#
using SharedLibraryCore.Helpers;
|
|
using SharedLibraryCore.Interfaces;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace IW4MAdmin.Plugins.Stats.Cheat
|
|
{
|
|
class Strain : ITrackable
|
|
{
|
|
private static double StrainDecayBase = 0.15;
|
|
private double CurrentStrain;
|
|
private Vector3 LastAngle;
|
|
private double LastDeltaTime;
|
|
private double LastDistance;
|
|
|
|
public int TimesReachedMaxStrain { get; private set; }
|
|
|
|
public double GetStrain(Vector3 newAngle, double deltaTime)
|
|
{
|
|
if (LastAngle == null)
|
|
LastAngle = newAngle;
|
|
|
|
LastDeltaTime = deltaTime;
|
|
|
|
double decayFactor = GetDecay(deltaTime);
|
|
CurrentStrain *= decayFactor;
|
|
|
|
double[] distance = Helpers.Extensions.AngleStuff(newAngle, LastAngle);
|
|
LastDistance = distance[0] + distance[1];
|
|
|
|
// this happens on first kill
|
|
if ((distance[0] == 0 && distance[1] == 0) ||
|
|
deltaTime == 0 ||
|
|
double.IsNaN(CurrentStrain))
|
|
{
|
|
return CurrentStrain;
|
|
}
|
|
|
|
double newStrain = Math.Pow(distance[0] + distance[1], 0.99) / deltaTime;
|
|
CurrentStrain += newStrain;
|
|
|
|
if (CurrentStrain > Thresholds.MaxStrainFlag)
|
|
TimesReachedMaxStrain++;
|
|
|
|
LastAngle = newAngle;
|
|
return CurrentStrain;
|
|
}
|
|
|
|
public string GetTrackableValue()
|
|
{
|
|
return $"Strain - {CurrentStrain}, Angle - {LastAngle}, Delta Time - {LastDeltaTime}, Distance - {LastDistance}";
|
|
}
|
|
|
|
private double GetDecay(double deltaTime) => Math.Pow(StrainDecayBase, deltaTime / 1000.0);
|
|
}
|
|
} |