static void Postfix(ZEventListener __instance, IVisitor visitor) { if (!__instance.eventName_.StartsWith(CustomDataInfo.GetPrefix <MusicChoice>())) { return; } CachedMusicChoice.GetOr(__instance, () => MusicChoice.FromObject(__instance)); }
internal static void Postfix(ZEventListener __instance) { if (!__instance.eventName_.StartsWith(CustomDataInfo.GetPrefix <MusicChoice>())) { return; } Mod.Instance.Variables.CachedMusicChoice.GetOrCreate(__instance, () => MusicChoice.FromObject(__instance)); }
private void AddOrRemove(ReferenceMap.Handle <GameObject> beforeHandle, ref ReferenceMap.Handle <GameObject> afterHandle, bool add) { LevelEditor editor = G.Sys.LevelEditor_; GameObject gameObject = beforeHandle.Get(); ZEventListener comp = (!add) ? addedComponentHandle.Get() : ((ZEventListener)((object)null)); if (!gameObject.HasComponent <LevelSettings>()) { editor.RemoveGameObjectSilent(gameObject); } if (add) { comp = gameObject.AddComponent <ZEventListener>(); var choice = new MusicChoice(); if (gameObject.HasComponent <LevelSettings>()) { choice.Choices.Add("Level", new MusicChoiceEntry("")); } if (gameObject.HasComponent <MusicTrigger>()) { choice.Choices.Add("Trigger", new MusicChoiceEntry("")); } if (gameObject.HasComponent <MusicZone>()) { choice.Choices.Add("Zone", new MusicChoiceEntry("")); } choice.WriteObject(comp); if (componentBytes != null) { Serializers.BinaryDeserializer.LoadComponentContentsFromBytes(comp, null, componentBytes); } comp.enabled = false; } else if (comp) { comp.Destroy(); } if (gameObject.HasComponent <LevelSettings>()) { EditorPatches.NeedsRefresh = true; } if (!gameObject.HasComponent <LevelSettings>()) { editor.AddGameObjectSilent(ref afterHandle, gameObject, editor.WorkingLevel_.GetLayerOfObject(gameObject)); } addedComponentHandle = (!add) ? default(ReferenceMap.Handle <ZEventListener>) : editor.ReferenceMap_.GetHandleOrNull(comp); gameObject.ForEachILevelEditorListenerInChildren(listener => listener.OnLevelEditorToolFinish()); Events.StaticEvent <ObjectHadComponentAddedOrRemoved.Data> .Broadcast(new ObjectHadComponentAddedOrRemoved.Data(gameObject)); if (!gameObject.HasComponent <LevelSettings>()) { editor.SelectObject(gameObject); } }
protected AddOrRemoveMusicChoiceAction(GameObject gameObject, ZEventListener comp) { ReferenceMap referenceMap_ = G.Sys.LevelEditor_.ReferenceMap_; originalHandle = referenceMap_.GetHandleOrNull(gameObject); newHandle = referenceMap_.GetHandleOrNull <GameObject>(null); addedComponentHandle = referenceMap_.GetHandleOrNull(comp); isAdd = (comp == null); if (!isAdd) { componentBytes = Serializers.BinarySerializer.SaveComponentToBytes(comp, null); } }
static bool Prefix(ZEventListener __instance, IVisitor visitor, ISerializable prefabComp, int version) { if (!(visitor is NGUIComponentInspector)) { return(true); } if (!__instance.eventName_.StartsWith(CustomDataInfo.GetPrefix <MusicChoice>())) { 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 = CachedMusicChoice.GetOr(__instance, () => new MusicChoice()); if (data.LastWrittenData != __instance.eventName_) { data.ReadObject(__instance); data.LastWrittenData = __instance.eventName_; data.LastWritten = data.Clone(); } else if (!isEditing) { var anyChanges = false; var old = data.LastWritten; if (data.Choices.Count != old.Choices.Count) { anyChanges = true; } foreach (var newChoice in data.Choices) { if (!old.Choices.ContainsKey(newChoice.Key) || old.Choices[newChoice.Key].Track != newChoice.Value.Track) { anyChanges = true; break; } } if (anyChanges) { data.WriteObject(__instance); data.LastWrittenData = __instance.eventName_; data.LastWritten = data.Clone(); } } foreach (var choice in data.Choices) { visitor.Visit($"{choice.Key} Track", ref choice.Value.Track, null); } return(false); }
static bool Prefix(ZEventListener __instance, ref string __result) { if (__instance == null) { return(true); } if (__instance.eventName_.StartsWith(CustomDataInfo.GetPrefix <MusicChoice>())) { __result = "Custom music track choice"; return(false); } else if (__instance.eventName_.StartsWith(CustomDataInfo.GetPrefix <MusicTrack>())) { __result = "Custom music track data"; return(false); } return(true); }
internal static bool Prefix(ZEventListener __instance, IVisitor visitor) { Mod mod = Mod.Instance; if (!(visitor is NGUIComponentInspector)) { return(true); } NGUIComponentInspector inspector = visitor as NGUIComponentInspector; if (!__instance.eventName_.StartsWith(CustomDataInfo.GetPrefix <MusicChoice>())) { return(true); } visitor.Visit("eventName_", ref __instance.eventName_, false, null); visitor.Visit("delay_", ref __instance.delay_, false, null); var isEditing = inspector.isEditing_; var data = mod.Variables.CachedMusicChoice.GetOrCreate(__instance, () => new MusicChoice()); if (data.LastWrittenData != __instance.eventName_) { data.ReadObject(__instance); data.LastWrittenData = __instance.eventName_; data.LastWritten = data.Clone(); } else if (!isEditing) { var anyChanges = false; var old = data.LastWritten; if (data.Choices.Count != old.Choices.Count) { anyChanges = true; } foreach (var newChoice in data.Choices) { if (!old.Choices.ContainsKey(newChoice.Key) || old.Choices[newChoice.Key].Track != newChoice.Value.Track) { anyChanges = true; break; } } if (anyChanges) { data.WriteObject(__instance); data.LastWrittenData = __instance.eventName_; data.LastWritten = data.Clone(); } } for (int index = 0; index < data.Choices.Count; index++) { string key = data.Choices.Keys.ToArray()[index]; var track = data.Choices[key].Track; visitor.Visit($"{key} Track", ref track, null); } return(false); }
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); }
public RemoveMusicChoiceAction(GameObject obj, ZEventListener c) : base(obj, c) { }
internal static bool Prefix(ZEventListener __instance, IVisitor visitor) { Mod mod = Mod.Instance; if (!(visitor is NGUIComponentInspector)) { return(true); } NGUIComponentInspector inspector = visitor as NGUIComponentInspector; 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 = inspector.isEditing_; var data = mod.Variables.CachedMusicTrack.GetOrCreate(__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?.Length == 0) { 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; MessageBox.Create($"Failed to embed {newRef} because {e}", "TRACK MUSIC ERROR") .SetButtons(MessageButtons.Ok) .Show(); Mod.Instance.Logger.Error($"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 = mod.Variables.CurrentTrackName; if (lastTrackName == old.Name) { mod.SoundPlayer.StopCustomMusic(); } mod.SoundPlayer.DownloadAllTracks(); if (lastTrackName == data.Name || mod.SoundPlayer.GetMusicChoiceValue(G.Sys.LevelEditor_.WorkingSettings_.gameObject, "Level") == data.Name) { mod.SoundPlayer.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, mod.Variables.MusicTrackOptions); visitor.VisitAction("Select File", () => { var dlgOpen = new System.Windows.Forms.OpenFileDialog { Filter = "Music file (*.mp3, *.wav, *.aiff)|*.mp3;*.wav;*.aiff|All Files (*.*)|*.*", SupportMultiDottedExtensions = true, RestoreDirectory = true, Title = "Select a music file", CheckFileExists = true, CheckPathExists = true }; if (dlgOpen.ShowDialog() == System.Windows.Forms.DialogResult.OK) { data.EmbedFile = dlgOpen.FileName; } }, mod.Variables.MusicTrackButtonOptions); visitor.Visit("Download URL", ref data.DownloadUrl, null); var Error = data.GetError(); if (Error == null) { Error = "None".Colorize(Colors.white); } else { Error = Error.Colorize(Colors.red); } //visitor.Visit("Error", ref Error, null); visitor.VisualLabel($"Error: {Error}".Colorize(Colors.white)); return(false); }