diff --git a/Assets/ArtNet/Editor/DmxRecorder/RecorderSettingsEditor.cs b/Assets/ArtNet/Editor/DmxRecorder/RecorderSettingsEditor.cs index 5b7a748..3cf73a6 100644 --- a/Assets/ArtNet/Editor/DmxRecorder/RecorderSettingsEditor.cs +++ b/Assets/ArtNet/Editor/DmxRecorder/RecorderSettingsEditor.cs @@ -14,6 +14,16 @@ private static class Styles } internal event Action OnRecorderValidated; + private SerializedProperty _universeFilter, _fileGenerator, _take; + + public void OnEnable() + { + if (target == null) return; + + _universeFilter = serializedObject.FindProperty("_universeFilter"); + _fileGenerator = serializedObject.FindProperty("_fileGenerator"); + _take = serializedObject.FindProperty("_take"); + } public override void OnInspectorGUI() { @@ -26,17 +36,14 @@ public override void OnInspectorGUI() DrawHeader("Output File"); EditorGUILayout.Separator(); - var universeFilter = serializedObject.FindProperty("_universeFilter"); - EditorGUILayout.PropertyField(universeFilter, GUIContent.none); + EditorGUILayout.PropertyField(_universeFilter, GUIContent.none); EditorGUILayout.Space(); - var fileNameGenerator = serializedObject.FindProperty("_fileGenerator"); - EditorGUILayout.PropertyField(fileNameGenerator, GUIContent.none); + EditorGUILayout.PropertyField(_fileGenerator, GUIContent.none); EditorGUILayout.Space(); - var take = serializedObject.FindProperty("_take"); - EditorGUILayout.PropertyField(take, Styles.TakeNumberLabel); + EditorGUILayout.PropertyField(_take, Styles.TakeNumberLabel); EditorGUILayout.Separator(); diff --git a/Assets/ArtNet/Editor/DmxRecorder/RecorderWindow.cs b/Assets/ArtNet/Editor/DmxRecorder/RecorderWindow.cs index 41b8b32..85e1cb5 100644 --- a/Assets/ArtNet/Editor/DmxRecorder/RecorderWindow.cs +++ b/Assets/ArtNet/Editor/DmxRecorder/RecorderWindow.cs @@ -27,11 +27,11 @@ private class RecorderList : ElementItemList { } private static IEnumerable _cachedRecorderTypes; + private VisualElement _addNewRecordPanel, _recorderSettingsPanel; private RecorderList _recorderList; private RecorderItem _selectedRecorderItem; private RecordController _controller; - private RecordControllerSettings _controllerSettings; private Label _timeCode; private Button _playButton, _stopButton; @@ -57,17 +57,21 @@ private void OnEnable() private void OnDisable() { - Undo.undoRedoPerformed -= OnUndoRedoPerformed; + UnregisterCallbacks(); } - private void Update() + private void RegisterCallbacks() { - if (IsRecording) _timeCode.text = TimeCodeText(_controller.GetRecordingTime()); + Undo.undoRedoPerformed += OnUndoRedoPerformed; + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + EditorApplication.update += OnUpdate; } - private void RegisterCallbacks() + private void UnregisterCallbacks() { - Undo.undoRedoPerformed += OnUndoRedoPerformed; + Undo.undoRedoPerformed -= OnUndoRedoPerformed; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + EditorApplication.update -= OnUpdate; } private void OnUndoRedoPerformed() @@ -76,12 +80,57 @@ private void OnUndoRedoPerformed() SaveAndRepaint(); } + private void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (state == PlayModeStateChange.EnteredEditMode) + { + SetRecordControllerSettings(RecordControllerSettings.GetOrNewGlobalSettings()); + ReloadRecorderSettings(); + Repaint(); + } + } + + private void OnUpdate() + { + switch (_controller.Status) + { + case RecordingStatus.Recording: + _timeCode.text = TimeCodeText(_controller.GetRecordingTime()); + break; + case RecordingStatus.Paused: + break; + case RecordingStatus.None: + OnUpdateRecordButton(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void OnUpdateRecordButton() + { + var recorderSettings = _controller.Settings.RecorderSettings; + if (recorderSettings.All(x => !x.Enabled)) + { + SetRecordButtonEnabled(false, "No recorders enabled"); + return; + } + + if (recorderSettings.Any(x => x.Enabled && x.HasErrors())) + { + SetRecordButtonEnabled(false, "Some recorders have errors"); + return; + } + + SetRecordButtonEnabled(true); + } + private void ReloadRecorderSettings() { - if (_controllerSettings == null) + if (_controller?.Settings == null) return; - var recorderItems = _controllerSettings.RecorderSettings.Select(CreateRecorderItem).ToArray(); + var recorderItems = _controller.Settings.RecorderSettings.Select(CreateRecorderItem).ToArray(); foreach (var recorderItem in recorderItems) recorderItem.UpdateState(); @@ -90,8 +139,8 @@ private void ReloadRecorderSettings() private void SaveAndRepaint() { - if (_controllerSettings != null) - _controllerSettings.Save(); + if (_controller.Settings != null) + _controller.Settings.Save(); Repaint(); } @@ -132,18 +181,18 @@ private void CreateView() _playButton = visualElement.Q