基础内容-6
技术性调整; Note效果;
This commit is contained in:
@@ -10,45 +10,62 @@ namespace Ichni.RhythmGame
|
||||
public bool emissionEnabled;
|
||||
public Color originalEmissionColor;
|
||||
public float originalEmissionIntensity;
|
||||
|
||||
|
||||
public List<Color> baseColorOffset = new List<Color>();
|
||||
public List<Color> emissionColorOffset = new List<Color>();
|
||||
public List<float> emissionIntensityOffset = new List<float>();
|
||||
|
||||
|
||||
public Color currentBaseColor;
|
||||
public Color currentEmissionColor;
|
||||
public float currentEmissionIntensity;
|
||||
|
||||
public bool baseColorDirtyMark;
|
||||
public bool emissionColorDirtyMark;
|
||||
|
||||
public ColorSubmodule()
|
||||
|
||||
public ColorSubmodule(BaseElement attachedElement) : base(attachedElement)
|
||||
{
|
||||
|
||||
this.originalBaseColor = Color.white;
|
||||
this.emissionEnabled = false;
|
||||
this.originalEmissionColor = Color.black;
|
||||
this.originalEmissionIntensity = 0;
|
||||
|
||||
this.currentBaseColor = Color.white;
|
||||
this.currentEmissionColor = Color.black;
|
||||
this.currentEmissionIntensity = 0;
|
||||
|
||||
this.baseColorDirtyMark = false;
|
||||
this.emissionColorDirtyMark = false;
|
||||
}
|
||||
|
||||
public ColorSubmodule(Color originalBaseColor)
|
||||
|
||||
public ColorSubmodule(BaseElement attachedElement, Color originalBaseColor) : base(attachedElement)
|
||||
{
|
||||
this.originalBaseColor = originalBaseColor;
|
||||
this.emissionEnabled = false;
|
||||
this.originalEmissionColor = Color.black;
|
||||
this.originalEmissionIntensity = 0;
|
||||
|
||||
|
||||
this.currentBaseColor = originalBaseColor;
|
||||
this.currentEmissionColor = Color.black;
|
||||
this.currentEmissionIntensity = 0;
|
||||
|
||||
this.baseColorDirtyMark = false;
|
||||
this.emissionColorDirtyMark = false;
|
||||
}
|
||||
|
||||
public ColorSubmodule(Color originalBaseColor, bool emissionEnabled, Color originalEmissionColor, float originalEmissionIntensity)
|
||||
|
||||
public ColorSubmodule(BaseElement attachedElement, Color originalBaseColor, bool emissionEnabled,
|
||||
Color originalEmissionColor, float originalEmissionIntensity) : base(attachedElement)
|
||||
{
|
||||
this.originalBaseColor = originalBaseColor;
|
||||
this.emissionEnabled = emissionEnabled;
|
||||
this.originalEmissionColor = originalEmissionColor;
|
||||
this.originalEmissionIntensity = originalEmissionIntensity;
|
||||
|
||||
|
||||
this.currentBaseColor = originalBaseColor;
|
||||
this.currentEmissionColor = originalEmissionColor;
|
||||
this.currentEmissionIntensity = originalEmissionIntensity;
|
||||
|
||||
this.baseColorDirtyMark = false;
|
||||
this.emissionColorDirtyMark = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,11 @@ namespace Ichni.RhythmGame
|
||||
public class EffectSubmodule : SubmoduleBase
|
||||
{
|
||||
public List<EffectBase> effectList;
|
||||
|
||||
public EffectSubmodule(BaseElement attachedElement) : base(attachedElement)
|
||||
{
|
||||
effectList = new List<EffectBase>();
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class EffectBase
|
||||
|
||||
@@ -6,6 +6,13 @@ namespace Ichni.RhythmGame
|
||||
{
|
||||
public abstract class SubmoduleBase
|
||||
{
|
||||
public BaseElement attachedElement;
|
||||
|
||||
public SubmoduleBase(BaseElement attachedElement)
|
||||
{
|
||||
this.attachedElement = attachedElement;
|
||||
}
|
||||
|
||||
public virtual void InitialRefresh()
|
||||
{
|
||||
|
||||
|
||||
@@ -11,14 +11,14 @@ namespace Ichni.RhythmGame
|
||||
public bool isOverridingDuration; //是否手动设置了时间区间,开启时,子物体的时间区间将被忽略
|
||||
public float startTime, endTime; //起止时间
|
||||
|
||||
public TimeDurationSubmodule()
|
||||
public TimeDurationSubmodule(BaseElement attachedElement) : base(attachedElement)
|
||||
{
|
||||
isOverridingDuration = false;
|
||||
startTime = 0;
|
||||
endTime = 0;
|
||||
startTime = -999;//TODO: 换为-delay
|
||||
endTime = 999;//TODO: 换为songLength
|
||||
}
|
||||
|
||||
public TimeDurationSubmodule(float startTime, float endTime)
|
||||
public TimeDurationSubmodule(BaseElement attachedElement, float startTime, float endTime) : base(attachedElement)
|
||||
{
|
||||
this.isOverridingDuration = false;
|
||||
this.startTime = startTime;
|
||||
|
||||
@@ -14,83 +14,70 @@ namespace Ichni.RhythmGame
|
||||
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 UnityAction OnPositionChanged;
|
||||
public UnityAction OnEulerAnglesChanged;
|
||||
public UnityAction OnScaleChanged;
|
||||
|
||||
public TransformSubmodule()
|
||||
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(Vector3 originalPosition, Vector3 originalEulerAngles, Vector3 originalScale)
|
||||
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;
|
||||
}
|
||||
|
||||
public void SetObserver(BaseElement target)
|
||||
{
|
||||
Observable.EveryUpdate().Subscribe(_ =>
|
||||
{
|
||||
if (positionDirtyMark)
|
||||
{
|
||||
Vector3 offset = Vector3.zero;
|
||||
foreach (var positionOffset in positionOffset)
|
||||
{
|
||||
offset += positionOffset;
|
||||
}
|
||||
currentPosition = originalPosition + offset;
|
||||
positionDirtyMark = false;
|
||||
}
|
||||
positionOffset.Clear();
|
||||
}).AddTo(target);
|
||||
|
||||
attachedElement.SetTransformObserver();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user