修noteprefab和submodule

This commit is contained in:
SoulliesOfficial
2025-05-10 23:28:21 -04:00
parent 9e65c7eea0
commit ab2f79090e
19 changed files with 163 additions and 78 deletions

View File

@@ -45,9 +45,12 @@ namespace Ichni.RhythmGame
this.baseColorDirtyMark = false;
this.emissionColorDirtyMark = false;
(attachedGameElement as IHaveColorSubmodule).colorSubmodule = this;
(attachedGameElement as IHaveColorSubmodule).SetColorObserver();
if (!HaveSameSubmodule)
{
(attachedGameElement as IHaveColorSubmodule).colorSubmodule = this;
(attachedGameElement as IHaveColorSubmodule).SetColorObserver();
}
}
public ColorSubmodule(GameElement attachedGameElement, Color originalBaseColor) : base(attachedGameElement)
@@ -64,8 +67,11 @@ namespace Ichni.RhythmGame
this.baseColorDirtyMark = false;
this.emissionColorDirtyMark = false;
(attachedGameElement as IHaveColorSubmodule).colorSubmodule = this;
(attachedGameElement as IHaveColorSubmodule).SetColorObserver();
if (!HaveSameSubmodule)
{
(attachedGameElement as IHaveColorSubmodule).colorSubmodule = this;
(attachedGameElement as IHaveColorSubmodule).SetColorObserver();
}
}
public ColorSubmodule(GameElement attachedGameElement, Color originalBaseColor, bool emissionEnabled,
@@ -83,8 +89,11 @@ namespace Ichni.RhythmGame
this.baseColorDirtyMark = false;
this.emissionColorDirtyMark = false;
(attachedGameElement as IHaveColorSubmodule).colorSubmodule = this;
(attachedGameElement as IHaveColorSubmodule).SetColorObserver();
if (!HaveSameSubmodule)
{
(attachedGameElement as IHaveColorSubmodule).colorSubmodule = this;
(attachedGameElement as IHaveColorSubmodule).SetColorObserver();
}
}
public override void SaveBM()

View File

@@ -37,14 +37,17 @@ namespace Ichni.RhythmGame
effectCollection.Add("Miss", new List<EffectBase>());
effectCollection.Add("AfterJudge", new List<EffectBase>());
}
(attachedGameElement as IHaveEffectSubmodule).effectSubmodule = this;
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>();
@@ -62,10 +65,14 @@ namespace Ichni.RhythmGame
effectList.Add(effectBM.ConvertToGameType(attachedGameElement));
}
}
effectCollection.Add(effect.Key, effectList);
}
(attachedGameElement as IHaveEffectSubmodule).effectSubmodule = this;
if (!HaveSameSubmodule)
{
(attachedGameElement as IHaveEffectSubmodule).effectSubmodule = this;
}
}
}

View File

@@ -12,7 +12,11 @@ namespace Ichni.RhythmGame
public NoteJudgeTriggerSubmodule(GameElement attachedGameElement) : base(attachedGameElement)
{
connectedNotes = new List<NoteBase>();
(attachedGameElement as IHaveNoteJudgeTriggerSubmodule).noteJudgeTriggerSubmodule = this;
if (!HaveSameSubmodule)
{
(attachedGameElement as IHaveNoteJudgeTriggerSubmodule).noteJudgeTriggerSubmodule = this;
}
}
public override void SaveBM()

View File

@@ -13,18 +13,24 @@ namespace Ichni.RhythmGame
public GameElement attachedGameElement;
public BaseElement_BM matchedBM { get; set; }
/// <summary>
/// 在生成时检测是否已经有重复的submodule
/// </summary>
public bool HaveSameSubmodule { get; set; }
public SubmoduleBase(GameElement attachedGameElement)
{
this.attachedGameElement = attachedGameElement;
HaveSameSubmodule = attachedGameElement.submoduleList.Any(x => x.GetType() == this.GetType());
if (attachedGameElement.submoduleList.Any(x => x.GetType() == this.GetType()))
if (HaveSameSubmodule)
{
Debug.LogWarning("存在重复的Submodule");
LogWindow.Log($"There are repeated submodule on Game Element {attachedGameElement.elementName}", Color.yellow);
Debug.LogAssertion($"存在重复的Submodule: {GetType()},此操作无效");
LogWindow.Log($"There are repeated submodule {GetType()} on Game Element {attachedGameElement.elementName}", Color.red);
return;
}
this.attachedGameElement.submoduleList.Add(this);
}

View File

@@ -16,19 +16,26 @@ namespace Ichni.RhythmGame
public TimeDurationSubmodule(GameElement attachedGameElement) : base(attachedGameElement)
{
isOverridingDuration = false;
startTime = -32767;//TODO: 换为-delay
endTime = 32767;//TODO: 换为songLength
startTime = -32767; //TODO: 换为-delay
endTime = 32767; //TODO: 换为songLength
(attachedGameElement as IHaveTimeDurationSubmodule).timeDurationSubmodule = this;
if (!HaveSameSubmodule)
{
(attachedGameElement as IHaveTimeDurationSubmodule).timeDurationSubmodule = this;
}
}
public TimeDurationSubmodule(GameElement attachedGameElement, bool isOverridingDuration, float startTime, float endTime) : base(attachedGameElement)
public TimeDurationSubmodule(GameElement attachedGameElement, bool isOverridingDuration, float startTime, float endTime) :
base(attachedGameElement)
{
this.isOverridingDuration = isOverridingDuration;
this.startTime = startTime;
this.endTime = endTime;
(attachedGameElement as IHaveTimeDurationSubmodule).timeDurationSubmodule = this;
if (!HaveSameSubmodule)
{
(attachedGameElement as IHaveTimeDurationSubmodule).timeDurationSubmodule = this;
}
}
public bool CheckTimeInDuration(float time, float offset = 0.2f)

View File

@@ -30,7 +30,7 @@ namespace Ichni.RhythmGame
public bool scaleDirtyMark;
public bool eulerAnglesOffsetLock;
public TransformSubmodule(GameElement attachedGameElement) : base(attachedGameElement)
{
this.originalPosition = Vector3.zero;
@@ -51,8 +51,11 @@ namespace Ichni.RhythmGame
eulerAnglesOffsetLock = false;
(attachedGameElement as IHaveTransformSubmodule).transformSubmodule = this;
(attachedGameElement as IHaveTransformSubmodule).SetTransformObserver();
if (!HaveSameSubmodule)
{
(attachedGameElement as IHaveTransformSubmodule).transformSubmodule = this;
(attachedGameElement as IHaveTransformSubmodule).SetTransformObserver();
}
}
public TransformSubmodule(GameElement attachedGameElement,
@@ -75,13 +78,16 @@ namespace Ichni.RhythmGame
scaleDirtyMark = true;
eulerAnglesOffsetLock = false;
attachedGameElement.transform.localScale = currentScale;
attachedGameElement.transform.localEulerAngles = currentEulerAngles;
attachedGameElement.transform.localPosition = currentPosition;
(attachedGameElement as IHaveTransformSubmodule).transformSubmodule = this;
(attachedGameElement as IHaveTransformSubmodule).SetTransformObserver();
if (!HaveSameSubmodule)
{
(attachedGameElement as IHaveTransformSubmodule).transformSubmodule = this;
(attachedGameElement as IHaveTransformSubmodule).SetTransformObserver();
}
}
public override void SaveBM()