public void Stop() { ScenarioLogManager.Instance.InjectStop(Time.time); OntologyManager.Instance.nohands = false; playbackState = LogPlaybackState.Stopped; playback_time = 0; next_entry = 0; var players = GameObject.FindObjectsOfType <NewtonVR.NVRPlayer>(); GameObject dupe; NullAvatarDriver nullDriver = FindObjectOfType <NullAvatarDriver>(); dupe = nullDriver.gameObject; ScenarioLogManager.Instance.UnTrack(nullDriver.LeftHand); ScenarioLogManager.Instance.UnTrack(nullDriver.RightHand); // find first player that is not the playback dupe and set it to broadcast hand data foreach (var player in players) { if (player != dupe) { if (OntologyManager.Instance != null) { OntologyManager.Instance.LeftHand = player.LeftHand; OntologyManager.Instance.RightHand = player.RightHand; } if (ScenarioLogManager.Instance != null) { ScenarioLogManager.Instance.Track(player.LeftHand); ScenarioLogManager.Instance.Track(player.RightHand); } break; } } }
public bool LoadLog(string filename) { // do not allow loading new logs during playback if (playing) { return(false); } log_filename = filename.Replace("\"", ""); // clear any old log data log = new ScenarioLog(); tracked_objs.Clear(); events_to_clear.Clear(); try { string log_data = System.IO.File.ReadAllText(log_filename); log = JsonUtility.FromJson <ScenarioLog>(log_data); } catch (System.IO.FileNotFoundException ex) { Debug.LogWarning("Could not find log file: '" + log_filename + "'\n" + ex.Message); return(false); } catch (System.Exception ex) { Debug.LogWarning("An exception was thrown while trying to read log file '" + log_filename + "':\n" + ex.Message); return(false); } Debug.Log("Playback found " + log.Count + " log entries~!"); playbackState = LogPlaybackState.Stopped; // make playback player copy var players = GameObject.FindObjectsOfType <NewtonVR.NVRPlayer>(); GameObject dupe; NullAvatarDriver nullDriver = FindObjectOfType <NullAvatarDriver>(); dupe = nullDriver.gameObject; foreach (var player in players) { if (player != dupe) { ScenarioLogManager.Instance.UnTrack(player.LeftHand); ScenarioLogManager.Instance.UnTrack(player.LeftHand.gameObject); ScenarioLogManager.Instance.UnTrack(player.RightHand); ScenarioLogManager.Instance.UnTrack(player.RightHand.gameObject); player.gameObject.SetActive(false); // disable for now } } dupe.SetActive(true); ScenarioLogManager.Instance.Track(nullDriver.LeftHand); ScenarioLogManager.Instance.Track(nullDriver.RightHand); ScenarioLogManager.Instance.Track(nullDriver.LeftHand.gameObject); ScenarioLogManager.Instance.Track(nullDriver.RightHand.gameObject); if (OntologyManager.Instance != null) { OntologyManager.Instance.LeftHand = nullDriver.LeftHand; OntologyManager.Instance.RightHand = nullDriver.RightHand; } // scan log entries & get references to all relevant transforms where possible // save 'null' for objects that don't exist in case they can be found later foreach (var entry in log.log) { foreach (var obj in entry.logstep) { if (!tracked_objs.ContainsKey(obj.name)) { Transform transform = FindTransform(obj.name); if (transform == null) { Debug.Log("Could not find transform for: " + obj.name); } tracked_objs.Add(obj.name, transform); } } } // must do this AFTER gathering transforms to ensure we don't pick a real player obj up by mistake foreach (var player in players) { player.gameObject.SetActive(true); // re-enable objs we disabled foreach (var hand in player.Hands) { hand.gameObject.SetActive(true); // for some reason Steam disables hands when we disable the parent object above... } } return(true); }