Change state timestamp to double precision.
This commit is contained in:
@@ -56,7 +56,7 @@ namespace Cryville.Crtr.Event {
|
|||||||
private set;
|
private set;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float Time {
|
public double Time {
|
||||||
get {
|
get {
|
||||||
return Bus.Time;
|
return Bus.Time;
|
||||||
}
|
}
|
||||||
@@ -225,7 +225,7 @@ namespace Cryville.Crtr.Event {
|
|||||||
if (tr.Valid) return r;
|
if (tr.Valid) return r;
|
||||||
#endif
|
#endif
|
||||||
float reltime = 0;
|
float reltime = 0;
|
||||||
if (rootPrototype != null) reltime = Time - rootPrototype.Time;
|
if (rootPrototype != null) reltime = (float)(Time - rootPrototype.Time);
|
||||||
GetMotionValue(key).GetValue(reltime, ref r);
|
GetMotionValue(key).GetValue(reltime, ref r);
|
||||||
if (Parent != null) r.ApplyFrom(Parent.GetRawValue(key));
|
if (Parent != null) r.ApplyFrom(Parent.GetRawValue(key));
|
||||||
#if !DISABLE_CACHE
|
#if !DISABLE_CACHE
|
||||||
@@ -394,7 +394,7 @@ namespace Cryville.Crtr.Event {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var scaledTime = (Time - m.Key.Time - ChartPlayer.actualRenderStep * tev.sumfix) / m.Key.Duration;
|
var scaledTime = (float)((Time - m.Key.Time - ChartPlayer.actualRenderStep * tev.sumfix) / m.Key.Duration);
|
||||||
var lerpedTime = MotionLerper.GetEaseTime(scaledTime, tev.transition, tev.rate);
|
var lerpedTime = MotionLerper.GetEaseTime(scaledTime, tev.transition, tev.rate);
|
||||||
if (tev.RelativeNode != null) {
|
if (tev.RelativeNode != null) {
|
||||||
var target = value.QueryRelativeNode(tev.RelativeNode.Id);
|
var target = value.QueryRelativeNode(tev.RelativeNode.Id);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace Cryville.Crtr.Event {
|
namespace Cryville.Crtr.Event {
|
||||||
public class EventBatch : IComparable<EventBatch>, IEnumerable<StampedEvent> {
|
public class EventBatch : IComparable<EventBatch>, IEnumerable<StampedEvent> {
|
||||||
public float Time {
|
public double Time {
|
||||||
get;
|
get;
|
||||||
private set;
|
private set;
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@ namespace Cryville.Crtr.Event {
|
|||||||
get { return queue.Count; }
|
get { return queue.Count; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public EventBatch(float time) {
|
public EventBatch(double time) {
|
||||||
Time = time;
|
Time = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ namespace Cryville.Crtr.Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int CompareTo(EventBatch other) {
|
public int CompareTo(EventBatch other) {
|
||||||
return this.Time.CompareTo(other.Time);
|
return Time.CompareTo(other.Time);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerator<StampedEvent> GetEnumerator() {
|
public IEnumerator<StampedEvent> GetEnumerator() {
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ namespace Cryville.Crtr.Event {
|
|||||||
= new Dictionary<ChartEvent, ContainerState>();
|
= new Dictionary<ChartEvent, ContainerState>();
|
||||||
public List<StampedEvent> stampedEvents = new List<StampedEvent>();
|
public List<StampedEvent> stampedEvents = new List<StampedEvent>();
|
||||||
readonly List<EventBatch> batches = new List<EventBatch>();
|
readonly List<EventBatch> batches = new List<EventBatch>();
|
||||||
|
|
||||||
float beat;
|
double beat;
|
||||||
float tempo;
|
float tempo;
|
||||||
|
|
||||||
public EventBatcher(Chart c) : base(c, new List<ChartEvent>()) {
|
public EventBatcher(Chart c) : base(c, new List<ChartEvent>()) {
|
||||||
@@ -56,12 +56,12 @@ namespace Cryville.Crtr.Event {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void ForwardOnceToTime(float toTime, Action<ChartEvent> callback) {
|
public override void ForwardOnceToTime(double toTime, Action<ChartEvent> callback) {
|
||||||
float toBeat = (float)Math.Round(beat + (toTime - Time) * tempo / 60f, 6);
|
double toBeat = Math.Round(beat + (toTime - Time) * tempo / 60f, 6);
|
||||||
if (EventId >= events.Count)
|
if (EventId >= events.Count)
|
||||||
goto return_ahead;
|
goto return_ahead;
|
||||||
float ebeat = events[EventId].BeatPosition;
|
double ebeat = events[EventId].BeatPosition;
|
||||||
float etime = (float)Math.Round((ebeat - beat) / tempo * 60f + Time, 6);
|
double etime = Math.Round((ebeat - beat) / tempo * 60f + Time, 6);
|
||||||
if (etime > toTime)
|
if (etime > toTime)
|
||||||
goto return_ahead;
|
goto return_ahead;
|
||||||
var batch = GetEventBatch();
|
var batch = GetEventBatch();
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ namespace Cryville.Crtr.Event {
|
|||||||
patch.Clear();
|
patch.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void ForwardOnceToTime(float toTime, Action<EventBatch> callback = null) {
|
public override void ForwardOnceToTime(double toTime, Action<EventBatch> callback = null) {
|
||||||
if (EventId < events.Count && events[EventId].Time <= toTime) {
|
if (EventId < events.Count && events[EventId].Time <= toTime) {
|
||||||
Time = events[EventId].Time;
|
Time = events[EventId].Time;
|
||||||
var batch = events[EventId];
|
var batch = events[EventId];
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ namespace Cryville.Crtr {
|
|||||||
readonly Dictionary<Identifier, List<JudgeEvent>> activeEvs
|
readonly Dictionary<Identifier, List<JudgeEvent>> activeEvs
|
||||||
= new Dictionary<Identifier, List<JudgeEvent>>();
|
= new Dictionary<Identifier, List<JudgeEvent>>();
|
||||||
struct JudgeEvent {
|
struct JudgeEvent {
|
||||||
public float StartTime { get; set; }
|
public double StartTime { get; set; }
|
||||||
public float EndTime { get; set; }
|
public double EndTime { get; set; }
|
||||||
public float StartClip { get; set; }
|
public double StartClip { get; set; }
|
||||||
public float EndClip { get; set; }
|
public double EndClip { get; set; }
|
||||||
public JudgeDefinition Definition { get; set; }
|
public JudgeDefinition Definition { get; set; }
|
||||||
public ContainerState State { get; set; }
|
public ContainerState State { get; set; }
|
||||||
}
|
}
|
||||||
@@ -35,7 +35,7 @@ namespace Cryville.Crtr {
|
|||||||
_rs = rs;
|
_rs = rs;
|
||||||
InitScores();
|
InitScores();
|
||||||
}
|
}
|
||||||
public void Prepare(float st, float et, Identifier input, JudgeDefinition def, ContainerState container) {
|
public void Prepare(double st, double et, Identifier input, JudgeDefinition def, ContainerState container) {
|
||||||
List<JudgeEvent> list;
|
List<JudgeEvent> list;
|
||||||
if (!evs.TryGetValue(input, out list)) {
|
if (!evs.TryGetValue(input, out list)) {
|
||||||
ct.Add(input, 0);
|
ct.Add(input, 0);
|
||||||
@@ -105,8 +105,8 @@ namespace Cryville.Crtr {
|
|||||||
var index = 0;
|
var index = 0;
|
||||||
while (index >= 0 && index < actlist.Count) {
|
while (index >= 0 && index < actlist.Count) {
|
||||||
var ev = actlist[index];
|
var ev = actlist[index];
|
||||||
LoadNum(_numbuf1, ev.StartTime); _etor.ContextCascadeUpdate(_var_fn, new PropSrc.Arbitrary(PdtInternalType.Number, _numbuf1));
|
LoadNum(_numbuf1, (float)ev.StartTime); _etor.ContextCascadeUpdate(_var_fn, new PropSrc.Arbitrary(PdtInternalType.Number, _numbuf1));
|
||||||
LoadNum(_numbuf2, ev.EndTime); _etor.ContextCascadeUpdate(_var_tn, new PropSrc.Arbitrary(PdtInternalType.Number, _numbuf2));
|
LoadNum(_numbuf2, (float)ev.EndTime); _etor.ContextCascadeUpdate(_var_tn, new PropSrc.Arbitrary(PdtInternalType.Number, _numbuf2));
|
||||||
var def = ev.Definition;
|
var def = ev.Definition;
|
||||||
if (def.hit != null) _etor.Evaluate(_flagop, def.hit);
|
if (def.hit != null) _etor.Evaluate(_flagop, def.hit);
|
||||||
else _flag = true;
|
else _flag = true;
|
||||||
@@ -115,7 +115,7 @@ namespace Cryville.Crtr {
|
|||||||
if (def.pass != null) Pass(def.pass);
|
if (def.pass != null) Pass(def.pass);
|
||||||
actlist.RemoveAt(index);
|
actlist.RemoveAt(index);
|
||||||
if (def.prop != 0 && actlist.Count > 0) {
|
if (def.prop != 0 && actlist.Count > 0) {
|
||||||
index = BinarySearchFirst(actlist, ev.StartClip, def.stack - def.prop);
|
index = BinarySearchFirst(actlist, (float)ev.StartClip, def.stack - def.prop);
|
||||||
if (index < 0) index = ~index;
|
if (index < 0) index = ~index;
|
||||||
}
|
}
|
||||||
else index++;
|
else index++;
|
||||||
@@ -154,7 +154,7 @@ namespace Cryville.Crtr {
|
|||||||
JudgeEvent ev;
|
JudgeEvent ev;
|
||||||
while (list.Count > 0 && (ev = list[0]).StartClip <= tt) {
|
while (list.Count > 0 && (ev = list[0]).StartClip <= tt) {
|
||||||
list.RemoveAt(0);
|
list.RemoveAt(0);
|
||||||
var index = BinarySearch(actlist, ev.StartClip, ev.Definition.stack);
|
var index = BinarySearch(actlist, (float)ev.StartClip, ev.Definition.stack);
|
||||||
if (index < 0) index = ~index;
|
if (index < 0) index = ~index;
|
||||||
actlist.Insert(index, ev);
|
actlist.Insert(index, ev);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class MotionLerper {
|
public static class MotionLerper {
|
||||||
public static void Lerp<T>(float time, float tt, T tv, float ft, T fv, TransitionType type, float rate, ref T result) where T : Vector {
|
public static void Lerp<T>(double time, double tt, T tv, double ft, T fv, TransitionType type, float rate, ref T result) where T : Vector {
|
||||||
if (fv == null) fv = (T)ReflectionHelper.InvokeEmptyConstructor(tv.GetType());
|
if (fv == null) fv = (T)ReflectionHelper.InvokeEmptyConstructor(tv.GetType());
|
||||||
Lerp((time - ft) / (tt - ft), fv, tv, type, rate, ref result);
|
Lerp((float)((time - ft) / (tt - ft)), fv, tv, type, rate, ref result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Lerp<T>(float scaledTime, T from, T to, TransitionType type, float rate, ref T result) where T : Vector {
|
public static void Lerp<T>(float scaledTime, T from, T to, TransitionType type, float rate, ref T result) where T : Vector {
|
||||||
@@ -35,7 +35,7 @@ namespace Cryville.Crtr {
|
|||||||
to.LerpWith(from, GetEaseTime(scaledTime, type, rate), ref r);
|
to.LerpWith(from, GetEaseTime(scaledTime, type, rate), ref r);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float Delerp<T>(T value, float tt, T tv, float ft, T fv, TransitionType type, float rate) where T : Vector {
|
public static double Delerp<T>(T value, double tt, T tv, double ft, T fv, TransitionType type, float rate) where T : Vector {
|
||||||
if (fv == null) fv = (T)ReflectionHelper.InvokeEmptyConstructor(tv.GetType());
|
if (fv == null) fv = (T)ReflectionHelper.InvokeEmptyConstructor(tv.GetType());
|
||||||
var t = Delerp(value, fv, tv, type, rate);
|
var t = Delerp(value, fv, tv, type, rate);
|
||||||
return ft * (1 - t) + tt * t;
|
return ft * (1 - t) + tt * t;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using System.Linq;
|
|||||||
|
|
||||||
namespace Cryville.Crtr {
|
namespace Cryville.Crtr {
|
||||||
public class StampedEvent : IComparable<StampedEvent> {
|
public class StampedEvent : IComparable<StampedEvent> {
|
||||||
public float Time;
|
public double Time;
|
||||||
public ChartEvent Unstamped;
|
public ChartEvent Unstamped;
|
||||||
public EventContainer Container;
|
public EventContainer Container;
|
||||||
public StampedEvent Origin;
|
public StampedEvent Origin;
|
||||||
@@ -12,7 +12,7 @@ namespace Cryville.Crtr {
|
|||||||
private StampedEvent attev = null;
|
private StampedEvent attev = null;
|
||||||
private StampedEvent relev = null;
|
private StampedEvent relev = null;
|
||||||
|
|
||||||
public float Duration {
|
public double Duration {
|
||||||
get {
|
get {
|
||||||
if (Unstamped == null) return 0;
|
if (Unstamped == null) return 0;
|
||||||
if (Unstamped.IsLong)
|
if (Unstamped.IsLong)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using System.Collections.Generic;
|
|||||||
namespace Cryville.Crtr {
|
namespace Cryville.Crtr {
|
||||||
public abstract class StateBase<T> {
|
public abstract class StateBase<T> {
|
||||||
public int EventId;
|
public int EventId;
|
||||||
public float Time;
|
public double Time;
|
||||||
public Chart chart;
|
public Chart chart;
|
||||||
public List<T> events;
|
public List<T> events;
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public virtual StateBase<T> Clone() {
|
public virtual StateBase<T> Clone() {
|
||||||
return (StateBase<T>)base.MemberwiseClone();
|
return (StateBase<T>)MemberwiseClone();
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void CopyTo(StateBase<T> dest) {
|
public virtual void CopyTo(StateBase<T> dest) {
|
||||||
@@ -32,18 +32,18 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void Forward(Action<T> callback = null) {
|
public void Forward(Action<T> callback = null) {
|
||||||
ForwardToTime(float.PositiveInfinity, callback);
|
ForwardToTime(double.PositiveInfinity, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ForwardByTime(float time, Action<T> callback = null) {
|
public void ForwardByTime(double time, Action<T> callback = null) {
|
||||||
ForwardToTime(Time + time, callback);
|
ForwardToTime(Time + time, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ForwardOnceByTime(float time, Action<T> callback = null) {
|
public void ForwardOnceByTime(double time, Action<T> callback = null) {
|
||||||
ForwardOnceToTime(Time + time, callback);
|
ForwardOnceToTime(Time + time, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ForwardToTime(float toTime, Action<T> callback = null) {
|
public void ForwardToTime(double toTime, Action<T> callback = null) {
|
||||||
breakflag = false;
|
breakflag = false;
|
||||||
ForwardOnceToTime(Time, callback);
|
ForwardOnceToTime(Time, callback);
|
||||||
while (Time < toTime) {
|
while (Time < toTime) {
|
||||||
@@ -52,20 +52,20 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ForwardStepByTime(float time, float step, Action<T> callback = null) {
|
public void ForwardStepByTime(double time, double step, Action<T> callback = null) {
|
||||||
ForwardStepToTime(Time + time, step, callback);
|
ForwardStepToTime(Time + time, step, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ForwardStepToTime(float toTime, float step, Action<T> callback = null) {
|
public void ForwardStepToTime(double toTime, double step, Action<T> callback = null) {
|
||||||
breakflag = false;
|
breakflag = false;
|
||||||
ForwardOnceToTime(Time, callback);
|
ForwardOnceToTime(Time, callback);
|
||||||
while (Time < toTime) {
|
while (Time < toTime) {
|
||||||
float next = Time + step;
|
double next = Time + step;
|
||||||
ForwardOnceToTime(next < toTime ? next : toTime, callback);
|
ForwardOnceToTime(next < toTime ? next : toTime, callback);
|
||||||
if (breakflag) break;
|
if (breakflag) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void ForwardOnceToTime(float toTime, Action<T> callback = null);
|
public abstract void ForwardOnceToTime(double toTime, Action<T> callback = null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ namespace Cryville.Crtr {
|
|||||||
Vector3 cpt; // Current point
|
Vector3 cpt; // Current point
|
||||||
Vector3 ppt = Vector3.zero; // Previous point
|
Vector3 ppt = Vector3.zero; // Previous point
|
||||||
Vector3 pwp = Vector3.zero; // Previous world point
|
Vector3 pwp = Vector3.zero; // Previous world point
|
||||||
float ptime; // Previous time
|
double ptime; // Previous time
|
||||||
float length;
|
float length;
|
||||||
|
|
||||||
public override void Update(ContainerState s, StampedEvent ev) {
|
public override void Update(ContainerState s, StampedEvent ev) {
|
||||||
@@ -67,7 +67,7 @@ namespace Cryville.Crtr {
|
|||||||
var tsv = s.ScrollVelocity;
|
var tsv = s.ScrollVelocity;
|
||||||
|
|
||||||
Vector3 dpt = (Vector3)tpt - ppt; // Delta 2D point
|
Vector3 dpt = (Vector3)tpt - ppt; // Delta 2D point
|
||||||
dpt.z = (s.Time - ptime) * ChartPlayer.sv * tsv; // Delta Z
|
dpt.z = (float)((s.Time - ptime) * ChartPlayer.sv * tsv); // Delta Z
|
||||||
Quaternion rotq = Quaternion.Euler(s.Direction); // Rotation
|
Quaternion rotq = Quaternion.Euler(s.Direction); // Rotation
|
||||||
var dwp = rotq * dpt; // Delta world point
|
var dwp = rotq * dpt; // Delta world point
|
||||||
var nl = length + dwp.magnitude; // New length
|
var nl = length + dwp.magnitude; // New length
|
||||||
@@ -133,7 +133,7 @@ namespace Cryville.Crtr {
|
|||||||
var tsv = s.ScrollVelocity;
|
var tsv = s.ScrollVelocity;
|
||||||
|
|
||||||
Vector3 dpt = (Vector3)tpt - ppt;
|
Vector3 dpt = (Vector3)tpt - ppt;
|
||||||
dpt.z = (s.Time - ptime) * ChartPlayer.sv * tsv;
|
dpt.z = (float)((s.Time - ptime) * ChartPlayer.sv * tsv);
|
||||||
Quaternion rotq = Quaternion.Euler(s.Direction);
|
Quaternion rotq = Quaternion.Euler(s.Direction);
|
||||||
var dwp = rotq * dpt; // Delta world point
|
var dwp = rotq * dpt; // Delta world point
|
||||||
var nl = length + dwp.magnitude; // New length
|
var nl = length + dwp.magnitude; // New length
|
||||||
|
|||||||
Reference in New Issue
Block a user