protected void LoadFrame(IFrameRecordable tb, float time, int frame, int deltaFrame, bool backTracing) { int index; // if this frame is loaded during last Update(), and the tracing direction didn't change // do not load this frame again if (frame == previousLoadedFrame && backTracing == isPreviousFrameBackTracing) { return; } if (dataTimeline.SearchFrame(frame, frame + deltaFrame, backTracing, out index, ref framesToLoad)) { for (int i = 0; i < framesToLoad.Count; i++) { var data = framesToLoad[i]; tb.LoadFrameData(data); lastLoadedFrameIndex = index; if (debug) { debugger.RecordLoad(data, previousUpdateTime, time); } } previousLoadedFrame = frame; } }
/// <summary> /// Auto save/load frames based on TimeTraceManager state. /// Should be called in Update() of its host Component. /// </summary> /// <param name="tb"></param> public void UpdateLoadSaveFrameData(IFrameRecordable tb) { float time = TimeTraceManager.time; float deltaTime = TimeTraceManager.deltaFrame; int frame = TimeTraceManager.frameCount; int deltaFrame = TimeTraceManager.deltaFrame; bool tracing = TimeTraceManager.tracing; bool backTracing = TimeTraceManager.backTracing; if (tracing) { isPreviousFrameTracing = true; LoadFrame(tb, time, frame, deltaFrame, backTracing); } else { if (isPreviousFrameTracing) { DiscardLoadedFrames(); isPreviousFrameTracing = false; } if (tb.AutoSaveFrameData) { SaveFrame(tb, time, frame); } } isPreviousFrameBackTracing = backTracing; previousUpdateTime = time; }
protected void SaveFrame(IFrameRecordable tb, float time, int frame) { var data = tb.GetFrameData(time, frame); dataTimeline.Add(data); if (debug) { debugger.RecordSave(data); } }