Files
ichni_Official/Assets/Scripts/Game/GameElements/Notes/AudioSubmodule/NoteAudioSubmodule.cs
SoulliesOfficial 150ef744e8 更新
2025-07-08 14:28:40 -04:00

184 lines
6.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using AK.Wwise;
using Ichni.RhythmGame.Beatmap;
namespace Ichni.RhythmGame
{
public partial class NoteAudioSubmodule : SubmoduleBase
{
public List<string> generalJudgeAudioList;
public List<string> perfectAudioList;
public List<string> goodAudioList;
public List<string> badAudioList;
public List<string> missAudioList;
public List<string> holdStartAudioList;
private NoteBase note => attachedGameElement as NoteBase;
private AudioContainer audioContainer => note.audioContainer;
public NoteAudioSubmodule(NoteBase attachedGameElement, string defaultAudio) : base(attachedGameElement)
{
generalJudgeAudioList = new List<string>();
perfectAudioList = new List<string>();
goodAudioList = new List<string>();
badAudioList = new List<string>();
missAudioList = new List<string>();
holdStartAudioList = new List<string>();
generalJudgeAudioList.Add(defaultAudio);
if (!HaveSameSubmodule)
{
this.note.noteAudioSubmodule = this;
}
InitializeAudio();
}
public NoteAudioSubmodule(NoteBase attachedGameElement, List<string> generalJudgeAudioList,
List<string> perfectAudioList, List<string> goodAudioList, List<string> badAudioList,
List<string> missAudioList, List<string> holdStartAudioList) : base(attachedGameElement)
{
this.generalJudgeAudioList = generalJudgeAudioList;
this.perfectAudioList = perfectAudioList;
this.goodAudioList = goodAudioList;
this.badAudioList = badAudioList;
this.missAudioList = missAudioList;
this.holdStartAudioList = holdStartAudioList ?? new List<string>();
if (!HaveSameSubmodule)
{
this.note.noteAudioSubmodule = this;
}
InitializeAudio();
}
public void InitializeAudio()
{
Dictionary<string, Event> noteSounds = GameManager.instance.basePrefabs.noteSounds;
foreach (string audioName in generalJudgeAudioList.Where(audioName => noteSounds.ContainsKey(audioName)))
{
audioContainer.SoundEventDictionary[audioName] = noteSounds[audioName];
}
foreach (string audioName in perfectAudioList.Where(audioName => noteSounds.ContainsKey(audioName)))
{
audioContainer.SoundEventDictionary[audioName] = noteSounds[audioName];
}
foreach (string audioName in goodAudioList.Where(audioName => noteSounds.ContainsKey(audioName)))
{
audioContainer.SoundEventDictionary[audioName] = noteSounds[audioName];
}
foreach (string audioName in badAudioList.Where(audioName => noteSounds.ContainsKey(audioName)))
{
audioContainer.SoundEventDictionary[audioName] = noteSounds[audioName];
}
foreach (string audioName in missAudioList.Where(audioName => noteSounds.ContainsKey(audioName)))
{
audioContainer.SoundEventDictionary[audioName] = noteSounds[audioName];
}
foreach (string audioName in holdStartAudioList.Where(audioName => noteSounds.ContainsKey(audioName)))
{
audioContainer.SoundEventDictionary[audioName] = noteSounds[audioName];
}
}
}
public partial class NoteAudioSubmodule
{
public void PlayHoldStartAudio()
{
PlayAudio(holdStartAudioList);
}
public void PlayGeneralJudgeAudios()
{
PlayAudio(generalJudgeAudioList);
}
public void PlayNoteJudgeAudios(NoteBase.NoteJudgeType judgeType)
{
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<string> audioList)
{
foreach (string audio in audioList)
{
audioContainer.PlaySoundFX(audio, null, true);
}
}
}
public partial class NoteAudioSubmodule
{
public override void SaveBM()
{
matchedBM = new NoteAudioSubmodule_BM(attachedGameElement, this);
}
}
namespace Beatmap
{
public class NoteAudioSubmodule_BM : Submodule_BM
{
public List<string> generalJudgeAudioList;
public List<string> perfectAudioList;
public List<string> goodAudioList;
public List<string> badAudioList;
public List<string> missAudioList;
public List<string> 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);
}
}
}
}