Add rewind and tick mechanism for skin component.
This commit is contained in:
@@ -26,6 +26,8 @@ namespace Cryville.Crtr.Components {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Init() { }
|
public virtual void Init() { }
|
||||||
|
public virtual void Rewind(double time) { }
|
||||||
|
public virtual void Tick(SkinContainer c, double time) { }
|
||||||
protected abstract void OnDestroy();
|
protected abstract void OnDestroy();
|
||||||
}
|
}
|
||||||
public struct SkinProperty {
|
public struct SkinProperty {
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace Cryville.Crtr {
|
|||||||
_endQueue.RemoveAt(0);
|
_endQueue.RemoveAt(0);
|
||||||
}
|
}
|
||||||
foreach (var instance in _instances) {
|
foreach (var instance in _instances) {
|
||||||
instance.Value.Tick();
|
instance.Value.Tick(time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void Emit(float index) {
|
public void Emit(float index) {
|
||||||
@@ -53,6 +53,7 @@ namespace Cryville.Crtr {
|
|||||||
else {
|
else {
|
||||||
_instances.Add(index, instance = _pool.Rent());
|
_instances.Add(index, instance = _pool.Rent());
|
||||||
}
|
}
|
||||||
|
instance.Rewind(_time);
|
||||||
instance.Index = index;
|
instance.Index = index;
|
||||||
instance.OnEmit(_time);
|
instance.OnEmit(_time);
|
||||||
var i2 = ~_endQueue.BinarySearch(instance);
|
var i2 = ~_endQueue.BinarySearch(instance);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ namespace Cryville.Crtr {
|
|||||||
readonly EffectDefinition _def;
|
readonly EffectDefinition _def;
|
||||||
readonly SkinContainer _skinContainer;
|
readonly SkinContainer _skinContainer;
|
||||||
public Transform RootTransform { get; private set; }
|
public Transform RootTransform { get; private set; }
|
||||||
|
readonly SkinComponent[] _comps;
|
||||||
public EffectInstance(EffectDefinition def) {
|
public EffectInstance(EffectDefinition def) {
|
||||||
_def = def;
|
_def = def;
|
||||||
_skinContainer = new SkinContainer(this, _def.elements);
|
_skinContainer = new SkinContainer(this, _def.elements);
|
||||||
@@ -18,11 +19,14 @@ namespace Cryville.Crtr {
|
|||||||
ChartPlayer.etor.ContextCascadeInsertBlock();
|
ChartPlayer.etor.ContextCascadeInsertBlock();
|
||||||
_skinContainer.MatchStatic();
|
_skinContainer.MatchStatic();
|
||||||
ChartPlayer.etor.ContextCascadeDiscardBlock();
|
ChartPlayer.etor.ContextCascadeDiscardBlock();
|
||||||
foreach (var i in RootTransform.GetComponentsInChildren<SkinComponent>())
|
_comps = RootTransform.GetComponentsInChildren<SkinComponent>();
|
||||||
i.Init();
|
foreach (var i in _comps) i.Init();
|
||||||
_indexSrc = new PropSrc.Float(() => Index);
|
_indexSrc = new PropSrc.Float(() => Index);
|
||||||
_durationOp = new PropOp.Float(v => _duration = v);
|
_durationOp = new PropOp.Float(v => _duration = v);
|
||||||
}
|
}
|
||||||
|
public void Rewind(double time) {
|
||||||
|
foreach (var i in _comps) i.Rewind(time);
|
||||||
|
}
|
||||||
private float m_index;
|
private float m_index;
|
||||||
public float Index {
|
public float Index {
|
||||||
get { return m_index; }
|
get { return m_index; }
|
||||||
@@ -38,8 +42,8 @@ namespace Cryville.Crtr {
|
|||||||
float _duration;
|
float _duration;
|
||||||
readonly PropOp _durationOp;
|
readonly PropOp _durationOp;
|
||||||
public double EndTime { get { return _startTime + _duration; } }
|
public double EndTime { get { return _startTime + _duration; } }
|
||||||
public void Tick() {
|
public void Tick(double time) {
|
||||||
_skinContainer.MatchDynamic(1);
|
foreach (var i in _comps) i.Tick(_skinContainer, time);
|
||||||
}
|
}
|
||||||
public void OnEmit(double time) {
|
public void OnEmit(double time) {
|
||||||
_startTime = time;
|
_startTime = time;
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ namespace Cryville.Crtr.Event {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
protected Transform gogroup;
|
protected Transform gogroup;
|
||||||
|
|
||||||
|
SkinComponent[] _comps;
|
||||||
|
|
||||||
public Vector3 Position { get; protected set; }
|
public Vector3 Position { get; protected set; }
|
||||||
public Quaternion Rotation { get; protected set; }
|
public Quaternion Rotation { get; protected set; }
|
||||||
public bool Alive { get; private set; }
|
public bool Alive { get; private set; }
|
||||||
@@ -129,8 +131,8 @@ namespace Cryville.Crtr.Event {
|
|||||||
skinContainer.MatchStatic();
|
skinContainer.MatchStatic();
|
||||||
ChartPlayer.etor.ContextEvent = null;
|
ChartPlayer.etor.ContextEvent = null;
|
||||||
ChartPlayer.etor.ContextState = null;
|
ChartPlayer.etor.ContextState = null;
|
||||||
foreach (var i in gogroup.GetComponentsInChildren<SkinComponent>())
|
_comps = gogroup.GetComponentsInChildren<SkinComponent>();
|
||||||
i.Init();
|
foreach (var i in _comps) i.Init();
|
||||||
}
|
}
|
||||||
public virtual void PostInit() {
|
public virtual void PostInit() {
|
||||||
PropSrcs.Add(_var_current_time, new PropSrc.Float(() => (float)cs.rootPrototype.Time));
|
PropSrcs.Add(_var_current_time, new PropSrc.Float(() => (float)cs.rootPrototype.Time));
|
||||||
@@ -205,6 +207,7 @@ namespace Cryville.Crtr.Event {
|
|||||||
atime_head = cs.StampedContainer.Time;
|
atime_head = cs.StampedContainer.Time;
|
||||||
atime_tail = atime_head + cs.StampedContainer.Duration;
|
atime_tail = atime_head + cs.StampedContainer.Duration;
|
||||||
MatchDynamic(cs, 0);
|
MatchDynamic(cs, 0);
|
||||||
|
foreach (var i in _comps) i.Tick(skinContainer, cs.Time);
|
||||||
if (cs.Active) PushAnchorEvent(cs.Time, a_cur);
|
if (cs.Active) PushAnchorEvent(cs.Time, a_cur);
|
||||||
if (double.IsNaN(DynamicAnchorSetTime[_a_head])) DynamicAnchorSetTime[_a_head] = atime_head;
|
if (double.IsNaN(DynamicAnchorSetTime[_a_head])) DynamicAnchorSetTime[_a_head] = atime_head;
|
||||||
if (double.IsNaN(DynamicAnchorSetTime[_a_tail])) DynamicAnchorSetTime[_a_tail] = atime_tail;
|
if (double.IsNaN(DynamicAnchorSetTime[_a_tail])) DynamicAnchorSetTime[_a_tail] = atime_tail;
|
||||||
|
|||||||
Reference in New Issue
Block a user