Skip to content

Commit c6ec611

Browse files
authored
Merge pull request #34 from nasshu2916/feature/imp-recorder-window
Record 処理周りリファクタ
2 parents ee09723 + 62f64af commit c6ec611

24 files changed

+155
-145
lines changed

Assets/ArtNet/Editor/DmxRecorder/AnimationRecorderSettings.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
using System.Collections.Generic;
2+
using ArtNet.Editor.DmxRecorder.IO;
3+
using ArtNet.Editor.DmxRecorder.Util;
14
using UnityEngine;
25

36
namespace ArtNet.Editor.DmxRecorder
@@ -7,5 +10,13 @@ public class AnimationRecorderSettings : RecorderSettings
710
protected internal override string Extension => "anim";
811
internal override string DefaultName => "Animation";
912
protected internal override Texture Icon => IconHelper.Icon("Animation Icon", true);
13+
14+
public override void StoreUniverseData(IEnumerable<UniverseData> universeData)
15+
{
16+
FileGenerator.CreateDirectory();
17+
var path = OutputAssetPath;
18+
19+
AnimationClipDmx.Export(universeData, path);
20+
}
1021
}
1122
}

Assets/ArtNet/Editor/DmxRecorder/BinaryRecorderSettings.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
using System.Collections.Generic;
2+
using ArtNet.Editor.DmxRecorder.IO;
3+
using ArtNet.Editor.DmxRecorder.Util;
14
using UnityEngine;
25

36
namespace ArtNet.Editor.DmxRecorder
@@ -7,5 +10,13 @@ public class BinaryRecorderSettings : RecorderSettings
710
protected internal override string Extension => "dmx";
811
internal override string DefaultName => "Binary";
912
protected internal override Texture Icon => IconHelper.Icon("DefaultAsset Icon", true);
13+
14+
public override void StoreUniverseData(IEnumerable<UniverseData> universeData)
15+
{
16+
FileGenerator.CreateDirectory();
17+
var path = OutputAbsolutePath;
18+
19+
BinaryDmx.Export(universeData, path);
20+
}
1021
}
1122
}

Assets/ArtNet/Editor/DmxRecorder/ConvertAnimInspector.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Generic;
22
using System.IO;
33
using System.Linq;
4+
using ArtNet.Editor.DmxRecorder.IO;
45
using ArtNet.Packets;
56
using UnityEditor;
67
using UnityEngine;
@@ -50,10 +51,10 @@ private static void ConvertAnim(ConvertAnim convertAnim)
5051
}
5152

5253
var bytes = binary.bytes;
53-
var universeData = RecordData.Deserialize(bytes);
54+
var universeData = BinaryDmx.Deserialize(bytes);
5455

55-
TimelineConverter timelineConverter = new(universeData);
56-
timelineConverter.SaveDmxTimelineClips(convertAnim.OutputDirectory + "/ArtNetDmx.anim");
56+
var output = convertAnim.OutputDirectory + "/ArtNetDmx.anim";
57+
AnimationClipDmx.Export(universeData, output);
5758

5859
Debug.Log("Conversion complete");
5960
}
@@ -103,12 +104,13 @@ private static void ConvertPacket(ConvertAnim convertAnim)
103104
}
104105
}
105106

106-
var storeData = RecordData.SerializePackets(dmxPackets);
107-
107+
var dmxUniverseData = dmxPackets.Select(packet =>
108+
new UniverseData(packet.Item1 / 1000f, packet.Item2.Universe, packet.Item2.Dmx)).ToList();
108109

109110
var path = convertAnim.OutputDirectory + "/DmxPackets.bytes";
110111
var exists = File.Exists(path);
111-
File.WriteAllBytes(path, storeData);
112+
BinaryDmx.Export(dmxUniverseData, path);
113+
112114
var message = exists ? "Data updated" : "Data stored";
113115
Debug.Log($"ArtNet Recorder: {message} at {path}");
114116
Debug.Log("Conversion complete");

Assets/ArtNet/Editor/DmxRecorder/EditableLabel.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class EditableLabel : VisualElement
1111
private readonly TextField _textField;
1212

1313
private bool _isEditing;
14+
private bool _isEditable = true;
1415

1516
public Action<string> OnValueChanged;
1617
private Focusable _previouslyFocused;
@@ -37,6 +38,11 @@ internal void SetLabelEnabled(bool value)
3738
_label.SetEnabled(value);
3839
}
3940

41+
internal void SetEditable(bool value)
42+
{
43+
_isEditable = value;
44+
}
45+
4046
private void SetValueAndNotify(string newValue)
4147
{
4248
if (EqualityComparer<string>.Default.Equals(_label.text, newValue))
@@ -51,8 +57,7 @@ private void SetValueAndNotify(string newValue)
5157

5258
internal void StartEditing()
5359
{
54-
if (_isEditing)
55-
return;
60+
if (_isEditing || !_isEditable) return;
5661

5762
_isEditing = true;
5863
_textField.value = _label.text;
@@ -64,8 +69,7 @@ internal void StartEditing()
6469

6570
private void ApplyEditing()
6671
{
67-
if (!_isEditing)
68-
return;
72+
if (!_isEditing) return;
6973

7074
SetValueAndNotify(_textField.text);
7175

@@ -76,8 +80,7 @@ private void ApplyEditing()
7680

7781
private void CancelEditing()
7882
{
79-
if (!_isEditing)
80-
return;
83+
if (!_isEditing) return;
8184

8285
_isEditing = false;
8386
Remove(_textField);

Assets/ArtNet/Editor/DmxRecorder/FileGeneratorDrawer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.IO;
2+
using ArtNet.Editor.DmxRecorder.Util;
23
using UnityEditor;
34
using UnityEngine;
45

Assets/ArtNet/Editor/DmxRecorder/IO.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System.Collections.Generic;
2+
using UnityEditor;
3+
4+
namespace ArtNet.Editor.DmxRecorder.IO
5+
{
6+
public static class AnimationClipDmx
7+
{
8+
public static void Export(IEnumerable<UniverseData> universeData, string path)
9+
{
10+
var clip = new UnityEngine.AnimationClip();
11+
12+
AssetDatabase.CreateAsset(clip, path);
13+
var timelineConverter = new TimelineConverter(universeData);
14+
timelineConverter.SaveToClip(clip);
15+
16+
AssetDatabase.SaveAssets();
17+
AssetDatabase.Refresh();
18+
}
19+
}
20+
}

Assets/ArtNet/Editor/DmxRecorder/IO/AnimationClipDmx.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/ArtNet/Editor/DmxRecorder/RecordData.cs renamed to Assets/ArtNet/Editor/DmxRecorder/IO/BinaryDmx.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,24 @@
22
using System.Collections.Generic;
33
using System.IO;
44
using System.Linq;
5-
using ArtNet.Packets;
65
using UnityEngine;
76

8-
namespace ArtNet.Editor.DmxRecorder
7+
namespace ArtNet.Editor.DmxRecorder.IO
98
{
10-
public static class RecordData
9+
public static class BinaryDmx
1110
{
1211
private const byte IdentifierLength = 4;
1312
private static readonly byte[] Identifiers = { 0xFF, 0x44, 0x4D, 0x58 };
1413
private static readonly byte[] ReservedBuffer = new byte[11];
1514
private const byte Version = 0x02;
1615

17-
public static byte[] SerializePackets(IEnumerable<(int time, DmxPacket packet)> dmxPackets)
16+
public static void Export(IEnumerable<UniverseData> universeData, string path)
1817
{
19-
var universeData = dmxPackets.Select(packet =>
20-
new UniverseData(packet.time / 1000f, packet.packet.Universe, packet.packet.Dmx));
21-
22-
return SerializeUniverseData(universeData);
18+
var binary = SerializeUniverseData(universeData);
19+
File.WriteAllBytes(path, binary);
2320
}
2421

22+
2523
public static byte[] SerializeUniverseData(IEnumerable<UniverseData> universeData)
2624
{
2725
var sortedData = universeData.OrderBy(x => x.Time).ToList();

Assets/ArtNet/Editor/DmxRecorder/IO/BinaryDmx.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/ArtNet/Editor/DmxRecorder/TimelineConverter.cs renamed to Assets/ArtNet/Editor/DmxRecorder/IO/TimelineConverter.cs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
using System;
21
using System.Collections.Generic;
32
using System.Linq;
43
using UnityEditor;
54
using UnityEngine;
65

7-
namespace ArtNet.Editor.DmxRecorder
6+
namespace ArtNet.Editor.DmxRecorder.IO
87
{
98
public class TimelineConverter
109
{
@@ -52,16 +51,6 @@ public void SaveToClip(AnimationClip clip)
5251
}
5352
}
5453

55-
public void SaveDmxTimelineClips(string path)
56-
{
57-
var clip = new AnimationClip { name = "ArtNetDmx" };
58-
SaveToClip(clip);
59-
60-
AssetDatabase.CreateAsset(clip, path);
61-
AssetDatabase.SaveAssets();
62-
AssetDatabase.Refresh();
63-
}
64-
6554
public List<UniverseData> ToUniverseData()
6655
{
6756
return Timelines.SelectMany(x => x.ToUniverseData()).OrderBy(x => x.Time).ToList();

Assets/ArtNet/Editor/DmxRecorder/RecordController.cs

Lines changed: 11 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.IO;
43
using System.Linq;
54
using System.Net;
65
using ArtNet.Enums;
@@ -19,13 +18,14 @@ public enum RecordingStatus
1918
public class RecordController
2019
{
2120
private readonly UdpReceiver _receiver = new(ArtNetReceiver.ArtNetPort);
22-
private int _recordedTime;
2321

2422
private List<(int, DmxPacket)> _recordedDmx = new();
2523

2624
private long _recordStartTime;
2725

2826
public RecordControllerSettings Settings { get; }
27+
public int RecordedTime { get; private set; }
28+
2929
public Action OnStartRecording, OnStopRecording, OnPauseRecording, OnResumeRecording;
3030

3131
public RecordController(RecordControllerSettings settings)
@@ -47,7 +47,7 @@ public void StartRecording()
4747
}
4848

4949
_recordedDmx = new List<(int, DmxPacket)>();
50-
_recordedTime = 0;
50+
RecordedTime = 0;
5151
Status = RecordingStatus.Recording;
5252
_recordStartTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
5353
_receiver.StartReceive();
@@ -64,7 +64,7 @@ public void StopRecording()
6464

6565
var time = GetRecordingTime();
6666
Status = RecordingStatus.None;
67-
_recordedTime = time;
67+
RecordedTime = time;
6868

6969
_receiver.StopReceive();
7070
StoreDmxPacket();
@@ -81,7 +81,7 @@ public void PauseRecording()
8181

8282
var time = GetRecordingTime();
8383
Status = RecordingStatus.Paused;
84-
_recordedTime = time;
84+
RecordedTime = time;
8585
_recordStartTime = 0;
8686
OnPauseRecording?.Invoke();
8787
}
@@ -103,11 +103,11 @@ public int GetRecordingTime()
103103
{
104104
if (Status != RecordingStatus.Recording)
105105
{
106-
return _recordedTime;
106+
return RecordedTime;
107107
}
108108

109109
var currentRecordTime = (int) (DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - _recordStartTime);
110-
return currentRecordTime + _recordedTime;
110+
return currentRecordTime + RecordedTime;
111111
}
112112

113113
private void OnReceivedPacket(byte[] receiveBuffer, int length, EndPoint remoteEp)
@@ -136,54 +136,12 @@ private void StoreDmxPacket()
136136
var recorderSettings = Settings.RecorderSettings.Where(x => x.Enabled && !x.HasErrors());
137137
foreach (var setting in recorderSettings)
138138
{
139-
var recordedDmx = FilterDmxPackets(_recordedDmx, setting.UniverseFilter);
140-
switch (setting)
141-
{
142-
case BinaryRecorderSettings binarySettings:
143-
StoreBinary(recordedDmx, binarySettings);
144-
break;
145-
case AnimationRecorderSettings animationSettings:
146-
StoreAnimation(recordedDmx, animationSettings);
147-
break;
148-
default:
149-
throw new ArgumentOutOfRangeException();
150-
}
151-
setting.Take++;
152-
}
153-
}
139+
var universeData = setting.UniverseFilter.Filter(_recordedDmx, frame => frame.Item2.Universe)
140+
.Select(x => new UniverseData(x.Item1 / 1000f, x.Item2.Universe, x.Item2.Dmx));
154141

155-
private static List<(int, DmxPacket)> FilterDmxPackets(List<(int, DmxPacket)> recordedDmx, UniverseFilter universeFilter)
156-
{
157-
if (!universeFilter.Enabled) return recordedDmx;
158-
159-
var filteredDmx = new List<(int, DmxPacket)>();
160-
foreach (var (time, packet) in recordedDmx)
161-
{
162-
if (universeFilter.IsMatch(packet.Universe)) continue;
163-
filteredDmx.Add((time, packet));
142+
setting.StoreUniverseData(universeData);
143+
setting.Take++;
164144
}
165-
166-
return filteredDmx;
167-
}
168-
169-
private static void StoreBinary(IReadOnlyList<(int time, DmxPacket packet)> recordDmx, BinaryRecorderSettings settings)
170-
{
171-
settings.FileGenerator.CreateDirectory();
172-
173-
var binary = RecordData.SerializePackets(recordDmx);
174-
var path = settings.OutputAbsolutePath;
175-
File.WriteAllBytes(path, binary);
176-
}
177-
178-
private static void StoreAnimation(IReadOnlyList<(int, DmxPacket)> recordDmx, AnimationRecorderSettings settings)
179-
{
180-
settings.FileGenerator.CreateDirectory();
181-
var path = settings.OutputAssetPath;
182-
183-
var universeData = recordDmx.Select(packet => new UniverseData(packet.Item1 / 1000f, packet.Item2
184-
.Universe, packet.Item2.Dmx));
185-
var timelineConverter = new TimelineConverter(universeData);
186-
timelineConverter.SaveDmxTimelineClips(path);
187145
}
188146
}
189147
}

Assets/ArtNet/Editor/DmxRecorder/RecordData.cs.meta

Lines changed: 0 additions & 3 deletions
This file was deleted.

Assets/ArtNet/Editor/DmxRecorder/RecorderItem.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using ArtNet.Editor.DmxRecorder.Util;
23
using UnityEditor;
34
using UnityEngine;
45
using UnityEngine.UIElements;
@@ -192,6 +193,12 @@ private void SetItemEnabled(RecordControllerSettings recordControllerSettings, b
192193
OnEnableStateChanged?.Invoke(value);
193194
}
194195

196+
public void SetReadOnly(bool value)
197+
{
198+
_editableLabel.SetEditable(!value);
199+
_toggle.SetEnabled(!value);
200+
}
201+
195202
public void StartRenaming()
196203
{
197204
_editableLabel.StartEditing();

Assets/ArtNet/Editor/DmxRecorder/RecorderSettings.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Linq;
43
using UnityEngine;
54

65
namespace ArtNet.Editor.DmxRecorder
@@ -88,5 +87,7 @@ internal virtual void OnValidate()
8887
protected virtual void OnBeforeSerialize() { }
8988
protected virtual void OnAfterDeserialize() { }
9089
public virtual void OnAfterDuplicate() { }
90+
91+
public abstract void StoreUniverseData(IEnumerable<UniverseData> universeData);
9192
}
9293
}

0 commit comments

Comments
 (0)