public VesselFlightStateUpdate(VesselFlightStateMsgData msgData) { VesselId = msgData.VesselId; GameTimeStamp = msgData.GameTime; SubspaceId = msgData.SubspaceId; CtrlState.CopyFrom(msgData); }
public void CopyFrom(VesselFlightStateUpdate update) { VesselId = update.VesselId; GameTimeStamp = update.GameTimeStamp; SubspaceId = update.SubspaceId; CtrlState.CopyFrom(update.CtrlState); }
public void CopyFrom(Vessel vessel) { if (vessel == null) { return; } CtrlState.CopyFrom(vessel.ctrlState); }
/// <summary> /// Call this method to apply a vessel update using interpolation /// </summary> public FlightCtrlState GetInterpolatedValue() { if (!VesselCommon.IsSpectating && FlightGlobals.ActiveVessel && FlightGlobals.ActiveVessel.id == VesselId) { //Do not apply flight states updates to our OWN controlled vessel return(FlightGlobals.ActiveVessel.ctrlState); } if (InterpolationFinished && VesselFlightStateSystem.TargetFlightStateQueue.TryGetValue(VesselId, out var queue) && queue.TryDequeue(out var targetUpdate)) { if (Target == null) { //This is the case of first iteration GameTimeStamp = targetUpdate.GameTimeStamp - TimeSpan.FromMilliseconds(SettingsSystem.ServerSettings.SecondaryVesselUpdatesMsInterval).TotalSeconds; CopyFrom(FlightGlobals.FindVessel(VesselId)); } else { GameTimeStamp = Target.GameTimeStamp; SubspaceId = Target.SubspaceId; CtrlState.CopyFrom(Target.CtrlState); } LerpPercentage = 0; if (Target != null) { Target.CopyFrom(targetUpdate); VesselFlightStateSystem.TargetFlightStateQueue[VesselId].Recycle(targetUpdate); } else { Target = targetUpdate; } AdjustExtraInterpolationTimes(); //UpdateProtoVesselValues(); } if (Target == null) { return(InterpolatedCtrlState); } InterpolatedCtrlState.Lerp(CtrlState, Target.CtrlState, LerpPercentage); LerpPercentage += (float)(Time.fixedDeltaTime / InterpolationDuration); return(InterpolatedCtrlState); }
/// <summary> /// Here we apply the CURRENT vessel flight state to this update. /// </summary> private void ProcessRestart() { if (Target != null) { GameTimeStamp = Target.GameTimeStamp; SubspaceId = Target.SubspaceId; CtrlState.CopyFrom(Target.CtrlState); } else { var vessel = FlightGlobals.fetch.LmpFindVessel(VesselId); if (vessel == null) { return; } CtrlState.CopyFrom(vessel.ctrlState); } }