示例#1
0
        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);
        }
示例#2
0
 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;
 }