Files
ichni_Official/Assets/Scripts/Game/Components/EffectSubmodule.cs
SoulliesOfficial 7580c4d87c 大更
2026-03-14 03:13:10 -04:00

99 lines
3.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame.Beatmap;
using UnityEngine;
namespace Ichni.RhythmGame
{
/// <summary>
/// 包含效果的次级模块
/// </summary>
public partial class EffectSubmodule : SubmoduleBase
{
#region [] Efffects Dictionary & Lists
public Dictionary<string, List<EffectBase>> effectCollection;
#endregion
#region [] Constructors & Initialization
public EffectSubmodule(GameElement attachedGameElement, EffectSubmodulePreset preset = EffectSubmodulePreset.Default)
: base(attachedGameElement)
{
effectCollection = new Dictionary<string, List<EffectBase>>();
if (preset == EffectSubmodulePreset.Default) //对于默认的效果次级模块有Prior、Default、Late三个效果集合
{
effectCollection.Add("Prior", new List<EffectBase>());
effectCollection.Add("Default", new List<EffectBase>());
effectCollection.Add("Late", new List<EffectBase>());
}
else if (preset == EffectSubmodulePreset.Note) //对于Note的效果次级模块在Note的不同状态下有独立的效果集合
{
effectCollection.Add("Generate", new List<EffectBase>());
effectCollection.Add("GeneralJudge", new List<EffectBase>());
effectCollection.Add("StartHold", new List<EffectBase>()); //仅用于Hold
effectCollection.Add("Holding", new List<EffectBase>()); //仅用于Hold
effectCollection.Add("Perfect", new List<EffectBase>());
effectCollection.Add("Good", new List<EffectBase>());
effectCollection.Add("Bad", new List<EffectBase>());
effectCollection.Add("Miss", new List<EffectBase>());
effectCollection.Add("AfterJudge", new List<EffectBase>());
}
if (!HaveSameSubmodule)
{
(attachedGameElement as IHaveEffectSubmodule).effectSubmodule = this;
}
}
public EffectSubmodule(GameElement attachedGameElement, Dictionary<string, List<EffectBase_BM>> effectList_BM) : base(attachedGameElement)
{
effectCollection = new Dictionary<string, List<EffectBase>>();
foreach (var effect in effectList_BM)
{
List<EffectBase> effectList = new List<EffectBase>();
foreach (var effectBM in effect.Value)
{
if (BeatmapContainer_BM.LowPriorityDataTypes.Contains(effectBM.GetType())) // 如果是低优先级数据类型
{
(GameManager.Instance.beatmapContainer).lowPriorityActions.Add(() =>
{
effectList.Add(effectBM.ConvertToGameType(attachedGameElement));
});
}
else
{
effectList.Add(effectBM.ConvertToGameType(attachedGameElement));
}
}
effectCollection.Add(effect.Key, effectList);
}
if (!HaveSameSubmodule && attachedGameElement is IHaveEffectSubmodule host)
{
host.effectSubmodule = this;
}
}
#endregion
}
#region [] Enums
public partial class EffectSubmodule
{
public enum EffectSubmodulePreset
{
Default,
Note,
}
}
#endregion
#region [] Component Interface
public interface IHaveEffectSubmodule
{
public EffectSubmodule effectSubmodule { get; set; }
}
#endregion
}