From 20a767dbc1ac39e95a08ab8d808edef0230aaa3c Mon Sep 17 00:00:00 2001 From: NaoyaKohda Date: Mon, 21 Oct 2024 02:33:45 +0900 Subject: [PATCH] =?UTF-8?q?DxmPacket=20=E3=81=AB=E5=A4=89=E6=8F=9B?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DmxRecorder/ConvertAnimInspector.cs | 50 +++++++++++++++++-- .../ArtNet/Editor/DmxRecorder/RecordData.cs | 2 +- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/Assets/ArtNet/Editor/DmxRecorder/ConvertAnimInspector.cs b/Assets/ArtNet/Editor/DmxRecorder/ConvertAnimInspector.cs index 9e5b4a6..2912a3e 100644 --- a/Assets/ArtNet/Editor/DmxRecorder/ConvertAnimInspector.cs +++ b/Assets/ArtNet/Editor/DmxRecorder/ConvertAnimInspector.cs @@ -1,3 +1,4 @@ +using System.IO; using UnityEditor; using UnityEngine; @@ -16,15 +17,22 @@ public override void OnInspectorGUI() EditorGUILayout.BeginVertical(GUI.skin.box); { - if (GUILayout.Button("Convert")) + if (GUILayout.Button("ConvertAnim")) { - Convert(convertAnim); + ConvertAnim(convertAnim); + } + + GUILayout.Space(5); + + if (GUILayout.Button("ConvertPacket")) + { + ConvertPacket(convertAnim); } } EditorGUILayout.EndVertical(); } - private static void Convert(ConvertAnim convertAnim) + private static void ConvertAnim(ConvertAnim convertAnim) { var binary = convertAnim.binary; if (!binary) @@ -44,5 +52,41 @@ private static void Convert(ConvertAnim convertAnim) Debug.Log("Conversion complete"); } + + private static void ConvertPacket(ConvertAnim convertAnim) + { + var binary = convertAnim.binary; + if (!binary) + { + Debug.LogError("Binary is null"); + return; + } + if (string.IsNullOrEmpty(convertAnim.OutputDirectory)) + { + Debug.LogError("Output directory is null or empty"); + return; + } + + var timelineSettingPath = convertAnim.OutputDirectory + "/DmxTimeline.asset"; + var dmxTimelineSetting = AssetDatabase.LoadAssetAtPath(timelineSettingPath, typeof(DmxTimelineSetting)) as DmxTimelineSetting; + if (dmxTimelineSetting is null) + { + Debug.LogError("DmxTimelineSetting is null"); + return; + } + + Debug.Log($"ArtNet Recorder: {dmxTimelineSetting.DmxTimelines.Count} timelines found"); + var timelineConverter = new TimelineConverter(dmxTimelineSetting); + var dmxPackets = timelineConverter.ToDmxPackets(); + var storeData = RecordData.Serialize(dmxPackets); + + + var path = convertAnim.OutputDirectory + "/DmxPackets.bytes"; + var exists = File.Exists(path); + File.WriteAllBytes(path, storeData); + var message = exists ? "Data updated" : "Data stored"; + Debug.Log($"ArtNet Recorder: {message} at {path}"); + Debug.Log("Conversion complete"); + } } } diff --git a/Assets/ArtNet/Editor/DmxRecorder/RecordData.cs b/Assets/ArtNet/Editor/DmxRecorder/RecordData.cs index fe4b246..7304e5e 100644 --- a/Assets/ArtNet/Editor/DmxRecorder/RecordData.cs +++ b/Assets/ArtNet/Editor/DmxRecorder/RecordData.cs @@ -15,7 +15,7 @@ public static class RecordData private static readonly byte[] ReservedBuffer = new byte[11]; private static byte Version = 0x01; - public static byte[] Serialize(List<(int time, DmxPacket packet)> dmxPackets) + public static byte[] Serialize(IReadOnlyList<(int time, DmxPacket packet)> dmxPackets) { var startTime = dmxPackets.Select(x => x.time).OrderBy(x => x).First(); using var memoryStream = new MemoryStream();