public void Update() { try { if (Input.GetKeyDown(KeyCode.X)) { if (_laserIsOn) { _driver.SendData("z0"); _laserIsOn = false; } else { _driver.SendData("z1"); _laserIsOn = true; } } if (_driver == null || _moving) { return; } if (_chaser != null) { if (_chaser.gameObject.activeSelf == false) { _chaser.gameObject.SetActive(true); } } if (!_trackingActive) { _trackingActive = true; StopAllCoroutines(); foreach (var tracker in HistogramTrackers) { StartCoroutine(tracker.StartTracking()); StartCoroutine(tracker.TrackUpdate()); } } var vectors = _driver.GetMovementVectors().ToList(); // Evaluate the overall change in position since last read from driver. // Could try avoiding the aggregation, but might be expensive. var summedVector = vectors.Aggregate(Vector3.zero, (current, vector) => current + vector); if (keyboardControls) { summedVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * 20; } if (summedVector == Vector3.zero) { return; } _delta += Scale(summedVector); if (_delta == Vector3.zero) { return; } MoveSubject(); if (SubjectLogger != null) { SubjectLogger.AddVector(_subject.position, _subject.rotation); } } catch (Exception e) { // Do something nice here? Prompt user with menu? Logger.Error("Something bad happened while trying to read movement data.", e); } }
public void InstantReplay(string saveStateFile) { var savedState = VirtualProfilerSaveState.LoadFromFile(saveStateFile); Global.Launcher.SaveState = savedState; if (Objects.ReplayController == null) { throw new ApplicationException("No replay adapter found."); } _activeReplayer = new InstantReplayer(Objects.ReplayController.LineRenderer, SubjectLogger.Load(savedState.RunSettings.SubjectPositionPath)); Objects.ReplayController.StartReplay(_activeReplayer); }