Пример #1
0
 static void Postfix(ZEventListener __instance, IVisitor visitor)
 {
     if (!__instance.eventName_.StartsWith(CustomDataInfo.GetPrefix <MusicTrack>()))
     {
         return;
     }
     CachedMusicTrack.GetOr(__instance, () => MusicTrack.FromObject(__instance));
 }
Пример #2
0
            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);
            }