using System; using System.Collections; using System.Collections.Generic; using Ichni.RhythmGame.Beatmap; namespace Ichni.RhythmGame { public partial class NoteAudioSubmodule : SubmoduleBase { public List generalJudgeAudioList; public List perfectAudioList; public List goodAudioList; public List badAudioList; public List missAudioList; public List holdStartAudioList; private NoteBase note => attachedGameElement as NoteBase; public NoteAudioSubmodule(NoteBase attachedGameElement, string defaultAudio) : base(attachedGameElement) { generalJudgeAudioList = new List(); perfectAudioList = new List(); goodAudioList = new List(); badAudioList = new List(); missAudioList = new List(); holdStartAudioList = new List(); generalJudgeAudioList.Add(defaultAudio); if (!HaveSameSubmodule) { this.note.noteAudioSubmodule = this; } } public NoteAudioSubmodule(NoteBase attachedGameElement, List generalJudgeAudioList, List perfectAudioList, List goodAudioList, List badAudioList, List missAudioList, List holdStartAudioList) : base(attachedGameElement) { this.generalJudgeAudioList = generalJudgeAudioList; this.perfectAudioList = perfectAudioList; this.goodAudioList = goodAudioList; this.badAudioList = badAudioList; this.missAudioList = missAudioList; this.holdStartAudioList = holdStartAudioList ?? new List(); if (!HaveSameSubmodule) { this.note.noteAudioSubmodule = this; } } } public partial class NoteAudioSubmodule { public void PlayHoldStartAudio() { PlayAudio(holdStartAudioList); } public void PlayNoteJudgeAudios(NoteBase.NoteJudgeType judgeType) { PlayAudio(generalJudgeAudioList); switch (judgeType) { case NoteBase.NoteJudgeType.Perfect: PlayAudio(perfectAudioList); break; case NoteBase.NoteJudgeType.Good: PlayAudio(goodAudioList); break; case NoteBase.NoteJudgeType.Bad: PlayAudio(badAudioList); break; case NoteBase.NoteJudgeType.Miss: PlayAudio(missAudioList); break; } } private void PlayAudio(List audioList) { foreach (var audio in audioList) { /*if (EditorManager.instance.noteAudioCollection.audioClips.TryGetValue(audio, out AudioClip clip)) { AudioExtension.PlayClipAtPoint2D(clip); }*/ } } } public partial class NoteAudioSubmodule { public override void SaveBM() { matchedBM = new NoteAudioSubmodule_BM(attachedGameElement, this); } } namespace Beatmap { public class NoteAudioSubmodule_BM : Submodule_BM { public List generalJudgeAudioList; public List perfectAudioList; public List goodAudioList; public List badAudioList; public List missAudioList; public List holdStartAudioList; public NoteAudioSubmodule_BM() { } public NoteAudioSubmodule_BM(GameElement attachedElement, NoteAudioSubmodule noteAudioSubmodule) : base(attachedElement) { generalJudgeAudioList = noteAudioSubmodule.generalJudgeAudioList; perfectAudioList = noteAudioSubmodule.perfectAudioList; goodAudioList = noteAudioSubmodule.goodAudioList; badAudioList = noteAudioSubmodule.badAudioList; missAudioList = noteAudioSubmodule.missAudioList; holdStartAudioList = noteAudioSubmodule.holdStartAudioList; } public override void ExecuteBM() { attachedElement = GameElement_BM.GetElement(attachedElementGuid); (attachedElement as NoteBase).noteAudioSubmodule = new NoteAudioSubmodule(attachedElement as NoteBase, generalJudgeAudioList, perfectAudioList, goodAudioList, badAudioList, missAudioList, holdStartAudioList); } public override void DuplicateBM(GameElement attached) { (attached as NoteBase).noteAudioSubmodule = new NoteAudioSubmodule(attached as NoteBase, generalJudgeAudioList, perfectAudioList, goodAudioList, badAudioList, missAudioList, holdStartAudioList); } } } }