static void Postfix(ZEventListener __instance, IVisitor visitor) { if (!__instance.eventName_.StartsWith(CustomDataInfo.GetPrefix <MusicTrack>())) { return; } CachedMusicTrack.GetOr(__instance, () => MusicTrack.FromObject(__instance)); }
static bool Prefix(ZEventListener __instance, IVisitor visitor, ISerializable prefabComp, int version) { if (!(visitor is NGUIComponentInspector)) { return(true); } if (!__instance.eventName_.StartsWith(CustomDataInfo.GetPrefix <MusicTrack>())) { return(true); } visitor.Visit("eventName_", ref __instance.eventName_, false, null); visitor.Visit("delay_", ref __instance.delay_, false, null); var isEditing = (bool)typeof(NGUIComponentInspector).GetField("isEditing_", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(visitor); var data = CachedMusicTrack.GetOr(__instance, () => new MusicTrack()); if (data.LastWrittenData != __instance.eventName_) { data.ReadObject(__instance); data.LastWrittenData = __instance.eventName_; data.EmbedFile = (data.Embedded.Length > 0 ? "Embedded" : ""); data.LastWritten = data.Clone(); } else if (!isEditing) { var anyChanges = false; var old = data.LastWritten; if (data.Name != old.Name || data.DownloadUrl != old.DownloadUrl || data.FileType != old.FileType) { anyChanges = true; } if (data.EmbedFile != old.EmbedFile) { var newRef = data.EmbedFile; if (newRef == "") { data.Embedded = new byte[0]; anyChanges = true; } else { try { newRef = newRef.Trim('"', '\''); var extension = Path.GetExtension(newRef); var file = FileEx.ReadAllBytes(newRef); data.Embedded = file ?? throw new Exception("Missing file"); data.FileType = extension; data.DownloadUrl = ""; anyChanges = true; } catch (Exception e) { data.Embedded = new byte[0]; data.FileType = ".mp3"; anyChanges = true; // TODO: warn user UnityEngine.Debug.Log($"Failed to embed {newRef} because {e}"); } } } if (anyChanges) { data.FileLocation = null; data.Attempted = false; data.EmbedFile = (data.Embedded.Length > 0 ? "Embedded" : ""); data.NewVersion(); data.WriteObject(__instance); data.LastWrittenData = __instance.eventName_; data.LastWritten = data.Clone(); var lastTrackName = CurrentTrackName; if (lastTrackName == old.Name) { StopCustomMusic(); } DownloadAllTracks(); if (lastTrackName == data.Name || GetMusicChoiceValue(G.Sys.LevelEditor_.WorkingSettings_.gameObject, "Level") == data.Name) { PlayTrack(data.Name, 0f); } } } visitor.Visit("Name", ref data.Name, null); visitor.Visit("Type", ref data.FileType, null); visitor.Visit("Embed File", ref data.EmbedFile, MusicTrackOptions); visitor.VisitAction("Select File", () => { var dlgOpen = new System.Windows.Forms.OpenFileDialog(); dlgOpen.Filter = "Distance Music (*.mp3, *.wav, *.aiff)|*.mp3;*.wav;*.aiff|All Files (*.*)|*.*"; dlgOpen.SupportMultiDottedExtensions = true; dlgOpen.RestoreDirectory = true; dlgOpen.Title = "Pick Distance music file"; dlgOpen.CheckFileExists = true; dlgOpen.CheckPathExists = true; if (dlgOpen.ShowDialog() == System.Windows.Forms.DialogResult.OK) { data.EmbedFile = dlgOpen.FileName; } }, MusicTrackButtonOptions); visitor.Visit("Download URL", ref data.DownloadUrl, null); var Error = data.GetError(); if (Error == null) { Error = "None"; } visitor.Visit("Error", ref Error, null); return(false); }