public ConfirmCameraSyncWindow(UserContainer admin, CameraDetails camera) { InitializeComponent(); var driver = Simulator.Instance.Drivers.FirstOrDefault(d => d.Driver.CarNumberRaw == camera.CarNumber); var sync = new CameraSync(admin, driver, camera); this.DataContext = sync; }
public override void OnInspectorGUI() { base.OnInspectorGUI(); _targetCameraSync = target as CameraSync; _gameCamera = _targetCameraSync.transform; _viewCamera = SceneView.lastActiveSceneView; //Selection.selectionChanged -= _onInspectorChanged; //Selection.selectionChanged += _onInspectorChanged; GUILayout.Space(10f); if (GUILayout.Button("Game To Scene")) { Undo.RecordObject(_viewCamera, "Game To Scene"); CameraSync.GameToScene(_gameCamera, _viewCamera); } GUILayout.Space(10f); if (GUILayout.Button("Scene TO Game")) { Undo.RecordObject(_viewCamera, "Scene To Game"); CameraSync.SceneToGame(_gameCamera, _viewCamera.camera.transform); } GUILayout.Space(10f); EditorGUI.BeginDisabledGroup(!_canUpdateKey); if (GUILayout.Button("Update / Create Key (Shift+Q)")) { var clip = TimelineEditor.selectedClip.animationClip; Undo.RecordObject(clip, "Update / Create Key"); string[] propertyNames = { "m_LocalPosition.x", "m_LocalPosition.y", "m_LocalPosition.z", "m_LocalRotation.x", "m_LocalRotation.y", "m_LocalRotation.z", "m_LocalRotation.w" }; float[] values = { _gameCamera.localPosition.x, _gameCamera.localPosition.y, _gameCamera.localPosition.z, _gameCamera.localRotation.x, _gameCamera.localRotation.y, _gameCamera.localRotation.z, _gameCamera.localRotation.w }; var bindings = AnimationUtility.GetCurveBindings(clip). Where((binding) => { return(binding.path.EndsWith(_gameCamera.name) && propertyNames.Contains(binding.propertyName)); }).ToArray(); foreach (var binding in bindings) { float time = (float)(_targetCameraSync.timelinePlayableDirector.time - TimelineEditor.selectedClip.start); float value = values[Array.IndexOf(propertyNames, binding.propertyName)]; var curve = AnimationUtility.GetEditorCurve(clip, binding); int index = -1; if (curve.keys.Any((k) => { index++; return(Mathf.Abs(k.time - time) < (1.0 / clip.frameRate * 0.5)); })) { curve.RemoveKey(index); } curve.AddKey(new Keyframe(time, value)); AnimationUtility.SetEditorCurve(clip, binding, curve); } EditorUtility.SetDirty(clip); } EditorGUI.EndDisabledGroup(); }