架构重新设计

基本重做了所有物体和次级模块代码
This commit is contained in:
SoulliesOfficial
2025-02-08 02:31:39 -05:00
parent 752c9b73e3
commit 7ab738cb68
44 changed files with 1320 additions and 847 deletions

View File

@@ -7,7 +7,7 @@ using UnityEngine;
namespace Ichni.RhythmGame
{
public abstract partial class NoteBase : BaseElement
public abstract partial class NoteBase : GameElement, IHaveTransformSubmodule, IHaveTimeDurationSubmodule, IHaveEffectSubmodule
{
[Title("Basic Info")]
public float exactJudgeTime;
@@ -20,39 +20,16 @@ namespace Ichni.RhythmGame
[Title("NoteVisual")]
public NoteVisualBase noteVisual;
[Title("NoteEffect")]
[Tooltip("生成Note时的特效")]
public EffectSubmodule generateEffects;
[Tooltip("Note被判定时的特效不包括Miss")]
public EffectSubmodule generalJudgeEffects;
[Tooltip("Note被Perfect判定时的特效")]
public EffectSubmodule perfectJudgeEffects;
[Tooltip("Note被Good判定时的特效")]
public EffectSubmodule goodJudgeEffects;
[Tooltip("Note被Bad判定时的特效")]
public EffectSubmodule badJudgeEffects;
[Tooltip("Note未被判定时的特效即Miss")]
public EffectSubmodule missJudgeEffects;
[Title("Judge Info")]
public NoteJudgeSubmodule noteJudgeSubmodule;
[Title("Submodules")]
public TransformSubmodule transformSubmodule { get; set; }
public TimeDurationSubmodule timeDurationSubmodule { get; set; }
public EffectSubmodule effectSubmodule { get; set; }
public NoteJudgeSubmodule noteJudgeSubmodule { get; set; }
[Title("In-Game Info")]
public Vector2 noteScreenPosition;
public bool isJudged;
public override void Initialize(string name, Guid id, List<string> tags)
{
base.Initialize(name, id, tags);
generateEffects = new EffectSubmodule(this);
generalJudgeEffects = new EffectSubmodule(this);
perfectJudgeEffects = new EffectSubmodule(this);
goodJudgeEffects = new EffectSubmodule(this);
badJudgeEffects = new EffectSubmodule(this);
missJudgeEffects = new EffectSubmodule(this);
noteJudgeSubmodule = new NoteJudgeSubmodule(this);
}
/// <summary>
/// 在MovableTrack上更新Note的位置注意HoldNote需要重写这个方法
/// </summary>
@@ -78,24 +55,19 @@ namespace Ichni.RhythmGame
trackPositioner.SetPercent(1 - percent);
}
public override void AfterInitialize()
protected override void SetDefaultSubmodules()
{
base.AfterInitialize();
submoduleList.Add(generateEffects);
submoduleList.Add(generalJudgeEffects);
submoduleList.Add(perfectJudgeEffects);
submoduleList.Add(goodJudgeEffects);
submoduleList.Add(badJudgeEffects);
submoduleList.Add(missJudgeEffects);
transformSubmodule = new TransformSubmodule(this);
timeDurationSubmodule = new TimeDurationSubmodule(this);
effectSubmodule = new EffectSubmodule(this, EffectSubmodule.EffectSubmodulePreset.Note);
noteJudgeSubmodule = new NoteJudgeSubmodule(this);
generateEffects.effectList.ForEach(e => e.Recover());
generalJudgeEffects.effectList.ForEach(e => e.Recover());
perfectJudgeEffects.effectList.ForEach(e => e.Recover());
goodJudgeEffects.effectList.ForEach(e => e.Recover());
badJudgeEffects.effectList.ForEach(e => e.Recover());
missJudgeEffects.effectList.ForEach(e => e.Recover());
submoduleList.Add(transformSubmodule);
submoduleList.Add(timeDurationSubmodule);
submoduleList.Add(effectSubmodule);
submoduleList.Add(noteJudgeSubmodule);
}
private void Update()
{
if (isOnTrack)
@@ -122,21 +94,22 @@ namespace Ichni.RhythmGame
}
}
generateEffects.effectList.ForEach(e => e.UpdateEffect());
effectSubmodule.effectCollection["Generate"].ForEach(e => e.UpdateEffect());
effectSubmodule.effectCollection["GeneralJudge"].ForEach(e => e.UpdateEffect());
switch (EditorManager.instance.currentJudgeType)
{
case NoteJudgeType.Perfect:
perfectJudgeEffects.effectList.ForEach(e => e.UpdateEffect());
effectSubmodule.effectCollection["Perfect"].ForEach(e => e.UpdateEffect());
break;
case NoteJudgeType.Good:
goodJudgeEffects.effectList.ForEach(e => e.UpdateEffect());
effectSubmodule.effectCollection["Good"].ForEach(e => e.UpdateEffect());
break;
case NoteJudgeType.Bad:
badJudgeEffects.effectList.ForEach(e => e.UpdateEffect());
effectSubmodule.effectCollection["Bad"].ForEach(e => e.UpdateEffect());
break;
case NoteJudgeType.Miss:
missJudgeEffects.effectList.ForEach(e => e.UpdateEffect());
effectSubmodule.effectCollection["Miss"].ForEach(e => e.UpdateEffect());
break;
}
}
@@ -172,4 +145,33 @@ namespace Ichni.RhythmGame
Miss
}
}
namespace Beatmap
{
public abstract class NoteBase_BM : GameElement_BM
{
public float exactJudgeTime;
public NoteBase_BM()
{
}
public NoteBase_BM(string elementName, Guid elementGuid, List<string> tags, GameElement_BM attachedElement, float exactJudgeTime)
: base(elementName, elementGuid, tags, attachedElement)
{
this.exactJudgeTime = exactJudgeTime;
}
public override void ExecuteBM()
{
throw new NotImplementedException();
}
public override GameElement DuplicateBM(GameElement parent)
{
throw new NotImplementedException();
}
}
}
}