//This is the listener that is called by the event manager //It transforms and adds the received report to the reports list void Record(string name, VRPNTracker.TrackerReport report) { if (firstReport) { firstTime_sec = report.msg_time.tv_sec; firstTime_usec = report.msg_time.tv_usec; firstReport = false; } if (report.msg_time.tv_usec < firstTime_usec) { report.msg_time.tv_sec = report.msg_time.tv_sec - (firstTime_sec + 1); report.msg_time.tv_usec = (report.msg_time.tv_usec + 1000000) - firstTime_usec; } else { report.msg_time.tv_sec = report.msg_time.tv_sec - firstTime_sec; report.msg_time.tv_usec = report.msg_time.tv_usec - firstTime_usec; } VRPNTracker.TrackerReportNew newReport = new VRPNTracker.TrackerReportNew(); VRPNManager.TimeValNew newMsgTime = new VRPNManager.TimeValNew(); newMsgTime.tv_sec = (int)report.msg_time.tv_sec; newMsgTime.tv_usec = (int)report.msg_time.tv_usec; newReport.msg_time = newMsgTime; newReport.pos = report.pos; newReport.quat = report.quat; newReport.sensor = report.sensor; data.list.Add(newReport); }
//VRPNTrackerRecording Constructor public VRPNTrackerRecording(string nName, float nTime, VRPNTracker.TrackerReports nData) { name = nName; reportTime = nTime; data = nData; e = data.list.GetEnumerator(); while (e.MoveNext()) { VRPNTracker.TrackerReportNew report = e.Current; int test; if (!sensors.TryGetValue(report.sensor, out test)) { sensors.Add(report.sensor, report.sensor); } lastTime = report.msg_time.tv_sec + (report.msg_time.tv_usec / 1000000f); } e = data.list.GetEnumerator(); }
// Update is called once per frame void Update() { if (isPlaying) { float actualTime; float actualReportTime = 0f; bool moreReports = true; bool alreadyAdvanced = false; Dictionary<int, VRPNTracker.TrackerReportNew> lastReports = new Dictionary<int, VRPNTracker.TrackerReportNew>(); if (firstReport) { firstReport = false; firstTime = Time.time; if (e.MoveNext()) { actualReport = e.Current; } else { isPlaying = false; moreReports = false; firstReport = true; } } actualTime = Time.time - firstTime; //It seeks the last appropiate report for the actual time while (moreReports) { actualReportTime = actualReport.msg_time.tv_sec + (actualReport.msg_time.tv_usec / 1000000f); if (actualReportTime <= actualTime) { VRPNTracker.TrackerReportNew test; if (lastReports.TryGetValue(actualReport.sensor, out test)) { lastReports[actualReport.sensor] = actualReport; } else { lastReports.Add(actualReport.sensor, actualReport); } if (e.MoveNext()) { actualReport = e.Current; alreadyAdvanced = true; } else { sendingReports(lastReports); moreReports = false; isPlaying = false; firstReport = true; } } else if (alreadyAdvanced) { sendingReports(lastReports); moreReports = false; } else { moreReports = false; } } } }
// Update is called once per frame void Update() { if (isPlaying) { float actualTime; float actualReportTime = 0f; bool moreReports = true; bool alreadyAdvanced = false; Dictionary <int, VRPNTracker.TrackerReportNew> lastReports = new Dictionary <int, VRPNTracker.TrackerReportNew>(); if (firstReport) { firstReport = false; firstTime = Time.time; if (e.MoveNext()) { actualReport = e.Current; } else { isPlaying = false; moreReports = false; firstReport = true; } } actualTime = Time.time - firstTime; //It seeks the last appropiate report for the actual time while (moreReports) { actualReportTime = actualReport.msg_time.tv_sec + (actualReport.msg_time.tv_usec / 1000000f); if (actualReportTime <= actualTime) { VRPNTracker.TrackerReportNew test; if (lastReports.TryGetValue(actualReport.sensor, out test)) { lastReports[actualReport.sensor] = actualReport; } else { lastReports.Add(actualReport.sensor, actualReport); } if (e.MoveNext()) { actualReport = e.Current; alreadyAdvanced = true; } else { sendingReports(lastReports); moreReports = false; isPlaying = false; firstReport = true; } } else if (alreadyAdvanced) { sendingReports(lastReports); moreReports = false; } else { moreReports = false; } } } }
//This is the listener that is called by the event manager //It transforms and adds the received report to the reports list void Record(string name, VRPNTracker.TrackerReport report) { if (firstReport) { firstTime_sec = report.msg_time.tv_sec; firstTime_usec = report.msg_time.tv_usec; firstReport = false; } if (report.msg_time.tv_usec < firstTime_usec) { report.msg_time.tv_sec = report.msg_time.tv_sec - (firstTime_sec + 1); report.msg_time.tv_usec = (report.msg_time.tv_usec + 1000000) - firstTime_usec; } else { report.msg_time.tv_sec = report.msg_time.tv_sec - firstTime_sec; report.msg_time.tv_usec = report.msg_time.tv_usec - firstTime_usec; } VRPNTracker.TrackerReportNew newReport = new VRPNTracker.TrackerReportNew(); VRPNManager.TimeValNew newMsgTime = new VRPNManager.TimeValNew(); newMsgTime.tv_sec = (int)report.msg_time.tv_sec; newMsgTime.tv_usec = (int)report.msg_time.tv_usec; newReport.msg_time = newMsgTime; newReport.pos = report.pos; newReport.quat = report.quat; newReport.sensor = report.sensor; data.list.Add(newReport); }