//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); }
//To add a trigger for Trackers public static void TriggerEventTracker(string deviceType, string deviceName, VRPNTracker.TrackerReport report) { if (eventManager == null) { Debug.LogError("There needs to be one active EventManger script on a GameObject in your scene."); return; } VRPNTrackerEvent thisEvent = null; if (instance.eventDictionaryTracker.TryGetValue(deviceType + " " + deviceName, out thisEvent)) { thisEvent.Invoke(deviceType + " " + deviceName, report); } }
//Auxiliar method that sends last frame report for each sensor private void sendingReports(Dictionary<int, VRPNTracker.TrackerReportNew> lastReports) { foreach (KeyValuePair<int, VRPNTracker.TrackerReportNew> pair in lastReports) { VRPNTracker.TrackerReport newReport = new VRPNTracker.TrackerReport(); VRPNManager.TimeVal newMsgTime = new VRPNManager.TimeVal(); newMsgTime.tv_sec = (UInt32)pair.Value.msg_time.tv_sec; newMsgTime.tv_usec = (UInt32)pair.Value.msg_time.tv_usec; newReport.msg_time = newMsgTime; newReport.pos = pair.Value.pos; newReport.quat = pair.Value.quat; newReport.sensor = pair.Value.sensor; VRPNEventManager.TriggerEventTracker(data.deviceType, data.deviceName, newReport); } }
//Auxiliar method that sends last frame report for each sensor private void sendingReports(Dictionary <int, VRPNTracker.TrackerReportNew> lastReports) { foreach (KeyValuePair <int, VRPNTracker.TrackerReportNew> pair in lastReports) { VRPNTracker.TrackerReport newReport = new VRPNTracker.TrackerReport(); VRPNManager.TimeVal newMsgTime = new VRPNManager.TimeVal(); newMsgTime.tv_sec = (UInt32)pair.Value.msg_time.tv_sec; newMsgTime.tv_usec = (UInt32)pair.Value.msg_time.tv_usec; newReport.msg_time = newMsgTime; newReport.pos = pair.Value.pos; newReport.quat = pair.Value.quat; newReport.sensor = pair.Value.sensor; VRPNEventManager.TriggerEventTracker(data.deviceType, data.deviceName, newReport); } }