Files
ichni_Creator_Studio/Assets/Scripts/Base/GeneralSubmodules/TransformSubmodule.cs
SoulliesOfficial 4cd90eaede 基础内容-9
为次级模块增加存档类,仍在思考框架中
2025-02-06 23:01:44 -05:00

120 lines
4.0 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UniRx;
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.Events;
namespace Ichni.RhythmGame
{
public class TransformSubmodule : SubmoduleBase
{
public Vector3 originalPosition;
public Vector3 originalEulerAngles;
public Vector3 originalScale;
public List<Vector3> positionOffset;
public List<Vector3> eulerAnglesOffset;
public List<Vector3> scaleOffset;
public Vector3 currentPosition;
public Vector3 currentEulerAngles;
public Vector3 currentScale;
public bool positionDirtyMark;
public bool eulerAnglesDirtyMark;
public bool scaleDirtyMark;
public bool eulerAnglesOffsetLock;
public TransformSubmodule(BaseElement attachedElement) : base(attachedElement)
{
this.originalPosition = Vector3.zero;
this.originalEulerAngles = Vector3.zero;
this.originalScale = Vector3.one;
positionOffset = new List<Vector3>();
eulerAnglesOffset = new List<Vector3>();
scaleOffset = new List<Vector3>();
currentPosition = Vector3.zero;
currentEulerAngles = Vector3.zero;
currentScale = Vector3.one;
positionDirtyMark = false;
eulerAnglesDirtyMark = false;
scaleDirtyMark = false;
eulerAnglesOffsetLock = false;
attachedElement.SetTransformObserver();
}
public TransformSubmodule(BaseElement attachedElement,
Vector3 originalPosition, Vector3 originalEulerAngles, Vector3 originalScale) : base(attachedElement)
{
this.originalPosition = originalPosition;
this.originalEulerAngles = originalEulerAngles;
this.originalScale = originalScale;
positionOffset = new List<Vector3>();
eulerAnglesOffset = new List<Vector3>();
scaleOffset = new List<Vector3>();
currentPosition = originalPosition;
currentEulerAngles = originalEulerAngles;
currentScale = originalScale;
positionDirtyMark = false;
eulerAnglesDirtyMark = false;
scaleDirtyMark = false;
eulerAnglesOffsetLock = false;
attachedElement.SetTransformObserver();
}
public override void SaveBM()
{
matchedBM = new Beatmap.TransformSubmodule_BM(attachedElement, originalPosition, originalEulerAngles, originalScale);
}
}
namespace Beatmap
{
public class TransformSubmodule_BM : Submodule_BM
{
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)
{
this.originalPosition = originalPosition;
this.originalEulerAngles = originalEulerAngles;
this.originalScale = originalScale;
}
public override void ExecuteBM()
{
attachedElement = GetElement(attachedElementGuid);
attachedElement.transformSubmodule = new TransformSubmodule(attachedElement, originalPosition, originalEulerAngles, originalScale);
}
public override void DuplicateBM(BaseElement attached)
{
attached.transformSubmodule = new TransformSubmodule(attached, originalPosition, originalEulerAngles, originalScale);
}
}
}
}