Example #1
0
    private void UpdateStateNew(Vector3 origin, Angle2 eyesAngles, ushort stateFlags, double timestamp)
    {
        CharacterStateInterpolatorData characterStateInterpolatorDatum = new CharacterStateInterpolatorData();
        Character character = base.idMain;

        if (this.firstState)
        {
            this.firstState            = false;
            character.origin           = origin;
            character.eyesAngles       = eyesAngles;
            character.stateFlags.flags = stateFlags;
            return;
        }
        if (!base.networkView.isMine)
        {
            CharacterInterpolatorBase characterInterpolatorBase = base.interpolator;
            if (characterInterpolatorBase)
            {
                IStateInterpolator <CharacterStateInterpolatorData> stateInterpolator = characterInterpolatorBase as IStateInterpolator <CharacterStateInterpolatorData>;
                if (stateInterpolator == null)
                {
                    character.stateFlags.flags = stateFlags;
                    characterInterpolatorBase.SetGoals(origin, eyesAngles.quat, timestamp);
                }
                else
                {
                    characterStateInterpolatorDatum.origin      = origin;
                    characterStateInterpolatorDatum.state.flags = stateFlags;
                    characterStateInterpolatorDatum.eyesAngles  = eyesAngles;
                    stateInterpolator.SetGoals(ref characterStateInterpolatorDatum, ref timestamp);
                }
            }
        }
        else
        {
            character.origin           = origin;
            character.eyesAngles       = eyesAngles;
            character.stateFlags.flags = stateFlags;
            CCMotor cCMotor = base.ccmotor;
            if (cCMotor)
            {
                cCMotor.Teleport(origin);
            }
        }
    }
 public static void Lerp(ref CharacterStateInterpolatorData a, ref CharacterStateInterpolatorData b, float t, out CharacterStateInterpolatorData result)
 {
     result = new CharacterStateInterpolatorData();
     if (t == 0f)
     {
         result = a;
     }
     else if (t != 1f)
     {
         float single = 1f - t;
         result.origin.x = a.origin.x * single + b.origin.x * t;
         result.origin.y = a.origin.y * single + b.origin.y * t;
         result.origin.z = a.origin.z * single + b.origin.z * t;
         result.eyesAngles = new Angle2()
         {
             yaw = a.eyesAngles.yaw + Mathf.DeltaAngle(a.eyesAngles.yaw, b.eyesAngles.yaw) * t,
             pitch = Mathf.DeltaAngle(0f, a.eyesAngles.pitch + Mathf.DeltaAngle(a.eyesAngles.pitch, b.eyesAngles.pitch) * t)
         };
         if (t > 1f)
         {
             result.state = b.state;
         }
         else if (t >= 0f)
         {
             result.state = a.state;
             result.state.flags = (ushort)(result.state.flags | (byte)(b.state.flags & 67));
             if (result.state.grounded != b.state.grounded)
             {
                 result.state.grounded = false;
             }
         }
         else
         {
             result.state = a.state;
         }
     }
     else
     {
         result = b;
     }
 }
 public static void Lerp(ref CharacterStateInterpolatorData a, ref CharacterStateInterpolatorData b, float t, out CharacterStateInterpolatorData result)
 {
     result = new CharacterStateInterpolatorData();
     if (t == 0f)
     {
         result = a;
     }
     else if (t != 1f)
     {
         float single = 1f - t;
         result.origin.x   = a.origin.x * single + b.origin.x * t;
         result.origin.y   = a.origin.y * single + b.origin.y * t;
         result.origin.z   = a.origin.z * single + b.origin.z * t;
         result.eyesAngles = new Angle2()
         {
             yaw   = a.eyesAngles.yaw + Mathf.DeltaAngle(a.eyesAngles.yaw, b.eyesAngles.yaw) * t,
             pitch = Mathf.DeltaAngle(0f, a.eyesAngles.pitch + Mathf.DeltaAngle(a.eyesAngles.pitch, b.eyesAngles.pitch) * t)
         };
         if (t > 1f)
         {
             result.state = b.state;
         }
         else if (t >= 0f)
         {
             result.state       = a.state;
             result.state.flags = (ushort)(result.state.flags | (byte)(b.state.flags & 67));
             if (result.state.grounded != b.state.grounded)
             {
                 result.state.grounded = false;
             }
         }
         else
         {
             result.state = a.state;
         }
     }
     else
     {
         result = b;
     }
 }
Example #4
0
 public static void Lerp(ref CharacterStateInterpolatorData a, ref CharacterStateInterpolatorData b, float t, out CharacterStateInterpolatorData result)
 {
     if (t == 0f)
     {
         result = a;
     }
     else if (t == 1f)
     {
         result = b;
     }
     else
     {
         float num = 1f - t;
         result.origin.x         = (a.origin.x * num) + (b.origin.x * t);
         result.origin.y         = (a.origin.y * num) + (b.origin.y * t);
         result.origin.z         = (a.origin.z * num) + (b.origin.z * t);
         result.eyesAngles       = new Angle2();
         result.eyesAngles.yaw   = a.eyesAngles.yaw + (Mathf.DeltaAngle(a.eyesAngles.yaw, b.eyesAngles.yaw) * t);
         result.eyesAngles.pitch = Mathf.DeltaAngle(0f, a.eyesAngles.pitch + (Mathf.DeltaAngle(a.eyesAngles.pitch, b.eyesAngles.pitch) * t));
         if (t > 1f)
         {
             result.state = b.state;
         }
         else if (t < 0f)
         {
             result.state = a.state;
         }
         else
         {
             result.state       = a.state;
             result.state.flags = (ushort)(result.state.flags | ((byte)(b.state.flags & 0x43)));
             if (result.state.grounded != b.state.grounded)
             {
                 result.state.grounded = false;
             }
         }
     }
 }
Example #5
0
 private void UpdateStateNew(Vector3 origin, Angle2 eyesAngles, ushort stateFlags, double timestamp)
 {
     CharacterStateInterpolatorData characterStateInterpolatorDatum = new CharacterStateInterpolatorData();
     Character character = base.idMain;
     if (this.firstState)
     {
         this.firstState = false;
         character.origin = origin;
         character.eyesAngles = eyesAngles;
         character.stateFlags.flags = stateFlags;
         return;
     }
     if (!base.networkView.isMine)
     {
         CharacterInterpolatorBase characterInterpolatorBase = base.interpolator;
         if (characterInterpolatorBase)
         {
             IStateInterpolator<CharacterStateInterpolatorData> stateInterpolator = characterInterpolatorBase as IStateInterpolator<CharacterStateInterpolatorData>;
             if (stateInterpolator == null)
             {
                 character.stateFlags.flags = stateFlags;
                 characterInterpolatorBase.SetGoals(origin, eyesAngles.quat, timestamp);
             }
             else
             {
                 characterStateInterpolatorDatum.origin = origin;
                 characterStateInterpolatorDatum.state.flags = stateFlags;
                 characterStateInterpolatorDatum.eyesAngles = eyesAngles;
                 stateInterpolator.SetGoals(ref characterStateInterpolatorDatum, ref timestamp);
             }
         }
     }
     else
     {
         character.origin = origin;
         character.eyesAngles = eyesAngles;
         character.stateFlags.flags = stateFlags;
         CCMotor cCMotor = base.ccmotor;
         if (cCMotor)
         {
             cCMotor.Teleport(origin);
         }
     }
 }