public override void CalcOutputDelta(double delayInMs, Vector2 angVelocity, ref Vector2 outputDelta, ref Vector2 outputCarry) { double veloLen = angVelocity.Length; XYLinkedTrans transAlg = this.transFuncs[0]; bool clearRest = false; foreach (XYLinkedTrans alg in this.transFuncs) { if (clearRest) { alg.TimeInOrAboveTrans = 0; } else { if (veloLen < alg.MinSpeed) { alg.TimeInOrAboveTrans = 0; clearRest = true; continue; } transAlg = alg; alg.AddTimeInOrAboveTrans(delayInMs); if (veloLen < alg.MaxSpeed) { clearRest = true; continue; } } } if (veloLen > transAlg.MaxSpeed) { Vector2 angCarry = new Vector2(angVelocity); angCarry.Normalize(); angCarry.Scale(transAlg.MaxSpeed); outputCarry.X = angVelocity.X - angCarry.X; outputCarry.Y = angVelocity.Y - angCarry.Y; angVelocity = angCarry; } transAlg.CalcOutputDelta(angVelocity, ref outputDelta); }
private static Vector2 CalcDeadzone(Vector2 mouseDelta, BetaGamesManager.GameSettings gs) { Vector2 deadzone = null; if (gs.Circular) { deadzone = new Vector2(mouseDelta.X, mouseDelta.Y); deadzone.Normalize(); deadzone.Scale(gs.Deadzone); } else { deadzone = new Vector2(gs.Deadzone * Math.Sign(mouseDelta.X), gs.Deadzone * Math.Sign(mouseDelta.Y)); } return deadzone; }