架构重新设计

基本重做了所有物体和次级模块代码
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

@@ -2,6 +2,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Ichni.RhythmGame.Beatmap;
using UniRx;
using Unity.Mathematics;
using UnityEngine;
@@ -28,9 +29,9 @@ namespace Ichni.RhythmGame
public bool scaleDirtyMark;
public bool eulerAnglesOffsetLock;
public TransformSubmodule(BaseElement attachedElement) : base(attachedElement)
public TransformSubmodule(GameElement attachedGameElement) : base(attachedGameElement)
{
this.originalPosition = Vector3.zero;
this.originalEulerAngles = Vector3.zero;
@@ -49,12 +50,12 @@ namespace Ichni.RhythmGame
scaleDirtyMark = false;
eulerAnglesOffsetLock = false;
attachedElement.SetTransformObserver();
// (attachedGameElement as IHaveTransformSubmodule).SetTransformObserver();
}
public TransformSubmodule(BaseElement attachedElement,
Vector3 originalPosition, Vector3 originalEulerAngles, Vector3 originalScale) : base(attachedElement)
public TransformSubmodule(GameElement attachedGameElement,
Vector3 originalPosition, Vector3 originalEulerAngles, Vector3 originalScale) : base(attachedGameElement)
{
this.originalPosition = originalPosition;
this.originalEulerAngles = originalEulerAngles;
@@ -73,13 +74,74 @@ namespace Ichni.RhythmGame
scaleDirtyMark = false;
eulerAnglesOffsetLock = false;
attachedElement.SetTransformObserver();
// (attachedGameElement as IHaveTransformSubmodule).SetTransformObserver();
}
public override void SaveBM()
{
matchedBM = new Beatmap.TransformSubmodule_BM(attachedElement, originalPosition, originalEulerAngles, originalScale);
matchedBM = new TransformSubmodule_BM(attachedGameElement);
}
}
public interface IHaveTransformSubmodule
{
TransformSubmodule transformSubmodule { get; set; }
public void SetTransformObserver()
{
GameElement attachedGameElement = transformSubmodule.attachedGameElement;
Observable.EveryUpdate().Subscribe(_ =>
{
if (transformSubmodule == null)
{
return;
}
if (transformSubmodule.scaleDirtyMark)
{
Vector3 offset = Vector3.zero;
foreach (Vector3 scaleOffset in transformSubmodule.scaleOffset)
{
offset += scaleOffset;
}
transformSubmodule.currentScale = transformSubmodule.originalScale + offset;
attachedGameElement.transform.localScale = transformSubmodule.currentScale;
transformSubmodule.scaleDirtyMark = false;
}
if (transformSubmodule.eulerAnglesDirtyMark)
{
Vector3 offset = Vector3.zero;
foreach (Vector3 eulerOffset in transformSubmodule.eulerAnglesOffset)
{
offset += eulerOffset;
}
transformSubmodule.currentEulerAngles = transformSubmodule.originalEulerAngles + offset;
attachedGameElement.transform.localEulerAngles = transformSubmodule.currentEulerAngles;
transformSubmodule.eulerAnglesDirtyMark = false;
}
if (transformSubmodule.positionDirtyMark)
{
Vector3 offset = Vector3.zero;
foreach (Vector3 posOffset in transformSubmodule.positionOffset)
{
offset += posOffset;
}
transformSubmodule.currentPosition = transformSubmodule.originalPosition + offset;
attachedGameElement.transform.localPosition = transformSubmodule.currentPosition;
transformSubmodule.positionDirtyMark = false;
}
transformSubmodule.scaleOffset.Clear();
transformSubmodule.eulerAnglesOffset.Clear();
transformSubmodule.positionOffset.Clear();
}).AddTo(attachedGameElement);
}
}
@@ -90,30 +152,31 @@ namespace Ichni.RhythmGame
public Vector3 originalPosition;
public Vector3 originalEulerAngles;
public Vector3 originalScale;
public TransformSubmodule_BM()
{
}
public TransformSubmodule_BM(BaseElement attachedElement, Vector3 originalPosition,
Vector3 originalEulerAngles, Vector3 originalScale) :
base(attachedElement)
public TransformSubmodule_BM(GameElement attachedElement) : base(attachedElement)
{
this.originalPosition = originalPosition;
this.originalEulerAngles = originalEulerAngles;
this.originalScale = originalScale;
TransformSubmodule transformSubmodule = (attachedElement as IHaveTransformSubmodule).transformSubmodule;
this.originalPosition = transformSubmodule.originalPosition;
this.originalEulerAngles = transformSubmodule.originalEulerAngles;
this.originalScale = transformSubmodule.originalScale;
}
public override void ExecuteBM()
{
attachedElement = GetElement(attachedElementGuid);
attachedElement.transformSubmodule = new TransformSubmodule(attachedElement, originalPosition, originalEulerAngles, originalScale);
attachedElement = GameElement_BM.GetElement(attachedElementGuid);
(attachedElement as IHaveTransformSubmodule).transformSubmodule =
new TransformSubmodule(attachedElement, originalPosition, originalEulerAngles, originalScale);
}
public override void DuplicateBM(BaseElement attached)
public override void DuplicateBM(GameElement attached)
{
attached.transformSubmodule = new TransformSubmodule(attached, originalPosition, originalEulerAngles, originalScale);
(attached as IHaveTransformSubmodule).transformSubmodule =
new TransformSubmodule(attached, originalPosition, originalEulerAngles, originalScale);
}
}
}