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) { 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; } } } }
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); } } }