yawrate: Add judgement about stationary yaw.

This prevents adding up small yaw-differences for many cases.
This commit is contained in:
asofold 2012-12-28 19:32:04 +01:00
parent 4800efbf2a
commit 1759c1003f
2 changed files with 20 additions and 1 deletions

View File

@ -10,6 +10,9 @@ import org.bukkit.entity.Player;
*/ */
public class Combined { public class Combined {
/** All hits within this angle range are regarded as stationary. */
private static float stationary = 32f;
/** /**
* Check if a penalty is set by changing horizontal facing dierection too often. * Check if a penalty is set by changing horizontal facing dierection too often.
* @param player * @param player
@ -51,6 +54,7 @@ public class Combined {
// Timeout, world change. // Timeout, world change.
if (now - data.lastYawTime > 999 || !worldName.equals(data.lastWorld)){ if (now - data.lastYawTime > 999 || !worldName.equals(data.lastWorld)){
data.lastYaw = yaw; data.lastYaw = yaw;
data.sumYaw = 0f;
data.lastYawTime = now; data.lastYawTime = now;
data.lastWorld = worldName; data.lastWorld = worldName;
} }
@ -66,7 +70,21 @@ public class Combined {
data.lastYaw = yaw; data.lastYaw = yaw;
data.lastYawTime = now; data.lastYawTime = now;
// TODO: If it should still be a problem, keep another yaw as stationary, add yaw without abs if near. // Skip adding small changes.
if (yawDiff < stationary){
// This could also be done by keeping a "stationaryYaw" and taking the distance to yaw.
data.sumYaw += yawDiff;
if (Math.abs(data.sumYaw) < stationary){
// Still stationary, keep sum, add nothing.
data.yawFreq.update(now);
return;
}
else{
// Reset.
data.sumYaw = 0f;
}
}
else data.sumYaw = 0f;
final float dAbs = Math.abs(yawDiff); final float dAbs = Math.abs(yawDiff);
final float dNorm = (float) dAbs / (float) (1 + elapsed); final float dNorm = (float) dAbs / (float) (1 + elapsed);

View File

@ -62,6 +62,7 @@ public class CombinedData extends ACheckData {
// Yawrate check. // Yawrate check.
public float lastYaw; public float lastYaw;
public long lastYawTime; public long lastYawTime;
public float sumYaw;
public final ActionFrequency yawFreq = new ActionFrequency(3, 333); public final ActionFrequency yawFreq = new ActionFrequency(3, 333);
// General penalty time (used for fighting mainly, set by yawrate check). // General penalty time (used for fighting mainly, set by yawrate check).