Implement force tick and sync time for input proxy.
This commit is contained in:
@@ -115,16 +115,9 @@ namespace Cryville.Crtr {
|
|||||||
? 1f / Application.targetFrameRate
|
? 1f / Application.targetFrameRate
|
||||||
: Time.deltaTime;
|
: Time.deltaTime;
|
||||||
firstFrame = false;
|
firstFrame = false;
|
||||||
|
inputProxy.ForceTick();
|
||||||
cbus.ForwardByTime(dt);
|
cbus.ForwardByTime(dt);
|
||||||
bbus.ForwardByTime(dt);
|
bbus.ForwardByTime(dt);
|
||||||
UnityEngine.Profiling.Profiler.BeginSample("ChartPlayer.FeedJudge");
|
|
||||||
/*judge.StartFrame();
|
|
||||||
Game.InputManager.EnumerateEvents(ev => {
|
|
||||||
// Logger.Log("main", 0, "Input", ev.ToString());
|
|
||||||
judge.Feed(ev);
|
|
||||||
});
|
|
||||||
judge.EndFrame();*/
|
|
||||||
UnityEngine.Profiling.Profiler.EndSample();
|
|
||||||
UnityEngine.Profiling.Profiler.BeginSample("ChartPlayer.Forward");
|
UnityEngine.Profiling.Profiler.BeginSample("ChartPlayer.Forward");
|
||||||
UnityEngine.Profiling.Profiler.BeginSample("EventBus.Copy");
|
UnityEngine.Profiling.Profiler.BeginSample("EventBus.Copy");
|
||||||
bbus.CopyTo(2, tbus);
|
bbus.CopyTo(2, tbus);
|
||||||
@@ -410,6 +403,7 @@ namespace Cryville.Crtr {
|
|||||||
Game.AudioSequencer.Playing = true;
|
Game.AudioSequencer.Playing = true;
|
||||||
Thread.Sleep((int)(Game.AudioClient.BufferPosition - Game.AudioClient.Position));
|
Thread.Sleep((int)(Game.AudioClient.BufferPosition - Game.AudioClient.Position));
|
||||||
// TODO SyncTime(cbus.Time);
|
// TODO SyncTime(cbus.Time);
|
||||||
|
inputProxy.SyncTime(cbus.Time);
|
||||||
started = true;
|
started = true;
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
|
@@ -105,9 +105,11 @@ namespace Cryville.Crtr {
|
|||||||
#region Handling
|
#region Handling
|
||||||
public void Activate() {
|
public void Activate() {
|
||||||
_activeCounts.Clear();
|
_activeCounts.Clear();
|
||||||
foreach (var p in _tproxies.Values) _activeCounts.Add(p.Source.Value, 0);
|
|
||||||
_vect.Clear(); _vecs.Clear();
|
_vect.Clear(); _vecs.Clear();
|
||||||
foreach (var src in _sproxies.Keys) src.Handler.Activate();
|
foreach (var src in _sproxies.Keys) {
|
||||||
|
_activeCounts.Add(src, 0);
|
||||||
|
src.Handler.Activate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public void Deactivate() { foreach (var src in _sproxies.Keys) src.Handler.Deactivate(); }
|
public void Deactivate() { foreach (var src in _sproxies.Keys) src.Handler.Deactivate(); }
|
||||||
|
|
||||||
@@ -115,7 +117,8 @@ namespace Cryville.Crtr {
|
|||||||
static readonly int _var_value = IdentifierManager.SharedInstance.Request("value");
|
static readonly int _var_value = IdentifierManager.SharedInstance.Request("value");
|
||||||
static readonly PropOp.Arbitrary _arbop = new PropOp.Arbitrary();
|
static readonly PropOp.Arbitrary _arbop = new PropOp.Arbitrary();
|
||||||
readonly byte[] _vecbuf = new byte[3 * sizeof(float) + sizeof(int)];
|
readonly byte[] _vecbuf = new byte[3 * sizeof(float) + sizeof(int)];
|
||||||
readonly Dictionary<InputSource, int> _activeCounts = new Dictionary<InputSource, int>(); // TODO used for force tick
|
readonly Dictionary<InputHandler, double> _timeOrigins = new Dictionary<InputHandler, double>();
|
||||||
|
readonly Dictionary<InputSource, int> _activeCounts = new Dictionary<InputSource, int>();
|
||||||
readonly Dictionary<InputIdentifier, float> _vect = new Dictionary<InputIdentifier, float>();
|
readonly Dictionary<InputIdentifier, float> _vect = new Dictionary<InputIdentifier, float>();
|
||||||
readonly Dictionary<ProxiedInputIdentifier, PropSrc.Arbitrary> _vecs = new Dictionary<ProxiedInputIdentifier, PropSrc.Arbitrary>();
|
readonly Dictionary<ProxiedInputIdentifier, PropSrc.Arbitrary> _vecs = new Dictionary<ProxiedInputIdentifier, PropSrc.Arbitrary>();
|
||||||
static readonly byte[] _nullvalue = new byte[0];
|
static readonly byte[] _nullvalue = new byte[0];
|
||||||
@@ -124,7 +127,7 @@ namespace Cryville.Crtr {
|
|||||||
InputProxyEntry proxy;
|
InputProxyEntry proxy;
|
||||||
if (_sproxies.TryGetValue(id.Source, out proxy)) {
|
if (_sproxies.TryGetValue(id.Source, out proxy)) {
|
||||||
_etor.ContextCascadeInsert();
|
_etor.ContextCascadeInsert();
|
||||||
float ft, tt = (float)vec.Time;
|
float ft, tt = (float)(vec.Time - _timeOrigins[id.Source.Handler]);
|
||||||
if (!_vect.TryGetValue(id, out ft)) ft = tt;
|
if (!_vect.TryGetValue(id, out ft)) ft = tt;
|
||||||
if (vec.IsNull) {
|
if (vec.IsNull) {
|
||||||
_etor.ContextCascadeUpdate(_var_value, new PropSrc.Arbitrary(PdtInternalType.Null, _nullvalue));
|
_etor.ContextCascadeUpdate(_var_value, new PropSrc.Arbitrary(PdtInternalType.Null, _nullvalue));
|
||||||
@@ -177,6 +180,20 @@ namespace Cryville.Crtr {
|
|||||||
_vecs[pid] = tv;
|
_vecs[pid] = tv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public void SyncTime(double time) {
|
||||||
|
foreach (var s in _sproxies.Keys) {
|
||||||
|
var h = s.Handler;
|
||||||
|
if (!_timeOrigins.ContainsKey(h))
|
||||||
|
_timeOrigins.Add(h, h.GetCurrentTimestamp() - time);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void ForceTick() {
|
||||||
|
foreach (var src in _sproxies.Keys) {
|
||||||
|
if (_activeCounts[src] == 0) {
|
||||||
|
OnInput(new InputIdentifier { Source = src, Id = 0 }, new InputVector(src.Handler.GetCurrentTimestamp()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user