Beispiel #1
0
    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;
            }
        }
    }
Beispiel #2
0
    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);
    }