Commit Graph

112 Commits

Author SHA1 Message Date
2c6fd1ec6e Fix `GameplayClockContainer potentially resetting external seeks 2022-08-18 18:54:10 +09:00
6003afafc7 Use FramedBeatmapClock in GameplayClockContainer 2022-08-18 18:54:10 +09:00
61a8873266 Ensure GameplayClockContainer's FramedClock is always non-null 2022-08-15 20:22:36 +09:00
1696a905ba Reduce exposed properties in GameplayClockContainer 2022-08-15 20:22:36 +09:00
704568ae3b Remove remaining usage of GameplayClock 2022-08-15 20:22:36 +09:00
27569e2ed5 Remove FrameStableClock (and redirect usages to FrameStabilityContainer) 2022-08-15 19:19:19 +09:00
cc982d374c Cache self rather than GameplayClock 2022-08-15 18:30:53 +09:00
c5f8529d20 Mark unused methods as NotImplemented for safety 2022-08-15 18:30:53 +09:00
f81c7644b4 Make GameplayClockContainer also an IGameplayClock and expose to remaining tests 2022-08-15 18:30:53 +09:00
c8764cb333 Move all usage of GameplayClock to IGameplayClock 2022-08-15 18:30:53 +09:00
6d78218142 Update usages of GameplayClockContainer.GameplayClock to access properties directly 2022-08-15 18:08:49 +09:00
224f3eaa84 Make GameplayClockContainer non-abstract and use in MultiSpectatorPlayer 2022-08-15 18:08:49 +09:00
905bbdc8ee Remove caching of GameplayClockContainer in favour of GameplayClock
Also fixes `SongProgress` being displayed in skin editor on non-gameplay
screens, due to `GameplayClock` not marked as a required dependency.
2022-07-29 16:45:29 +03:00
3f72e76348 Expose StartTime from gameplay clock 2022-07-29 16:18:05 +03:00
6bfd351dec Add logging of GameplayClockContainer seeks 2022-06-28 15:23:29 +09:00
f8830c6850 Automated #nullable processing 2022-06-17 16:37:17 +09:00
d4286255a0 Expose and set GameplayStartTime directly, rather than via Reset parameter 2022-04-13 13:58:44 +09:00
808f0ecb74 Ensure running state is updated before performing Seek in GameplayClockContainer.Reset 2022-04-11 14:10:50 +09:00
f09a946722 Start GameplayClockContainer paused for better state control 2022-03-18 15:28:22 +09:00
e3ab5de8cd Tidy up constructor logic overlap with gameplayStartTime 2022-03-18 01:35:50 +09:00
a4a0241800 Use a more explicit flow to set and reset GameplayClockContainer start time 2022-03-17 20:57:30 +09:00
3ec193d47e Fix spectator clock container incorrectly starting catch-up clock 2022-01-30 01:46:10 +03:00
9a1db04920 Resolve GameplayClockContainer instead of Player 2021-09-20 10:28:58 -04:00
3b876a43c2 Merge branch 'master' into multiplayer-spectator-screen 2021-04-26 14:12:35 +09:00
e937b778f6 Fix potential failure in ensureSourceClockSet()
`ensureSourceClockSet()` was intended to only run when the adjustable
source hasn't been set at all yet. As it turns out permitting it to run
unconditionally can break the state of the underlying interpolated
clock. This is caused by the following factors:

* While the decoupleable clock is running, its `CurrentTime` does not
  come from either the source clock, or the internal stopwatch; it is
  instead calculated using the base `InterpolatingFramedClock` logic.

* A source change of a decoupleable clock seeks the provided source
  clock to the decoupleable's current time.

* When an interpolating clock is seeked (decoupleable clock is also
  an interpolating one), its interpolation state
  (`{Last,Current}InterpolatedTime`) are reset to 0.

* If the interpolating clock determines that its current time is too
  far away from the source's time (which was set when the source is
  changed), it will ignore the source and instead continue to use
  its current time until the source clock has caught up.

Overall, the source change is not really necessary if a source is
already there. The only reason to ensure it was set was to make sure
the first seek of the gameplay clock wasn't performed in decoupled
mode. Therefore, add a guard to make sure the source is only set if
there isn't one already.
2021-04-24 14:19:39 +02:00
fdb5490e51 Attempt to explain source initialisation better 2021-04-23 21:56:08 +02:00
ae2fd2f2e1 Ensure source is set on reset 2021-04-23 18:46:59 +09:00
f32d00c0d9 Fix post-merge errors 2021-04-21 17:13:01 +09:00
e78ef05fcf Merge branch 'gcc-abstraction' into multiplayer-spectator-screen 2021-04-21 17:11:14 +09:00
ec080fcb32 Move seekOffset back to MasterGameplayClockContainer 2021-04-20 18:25:46 +09:00
a683e5ec34 Seek using local method 2021-04-20 17:40:11 +09:00
97fb90d9f4 Move clock processing to base.Seek() 2021-04-20 17:35:59 +09:00
3d6d26039a Remove unused usings 2021-04-20 14:09:54 +09:00
88ded95e75 Ensure clock is set in GCC.Start() 2021-04-20 13:56:13 +09:00
a92ae8ce76 Fix Reset() potentially not resetting to the intended start position 2021-04-20 13:01:42 +09:00
acbf4580a4 Only set initial source in Reset() 2021-04-19 19:57:00 +09:00
c7183f92f7 Rename Restart() -> Reset() 2021-04-19 19:57:00 +09:00
c8d38f9983 Merge branch 'gcc-abstraction' into multiplayer-spectator-screen 2021-04-16 20:51:00 +09:00
3a78c19f96 More refactoring/xmldocs 2021-04-16 20:33:29 +09:00
6301111fa3 Remove ClockToProcess, always process underlying clock 2021-04-16 20:17:21 +09:00
a7aa3cb263 Merge branch 'gcc-abstraction' into multiplayer-spectator-screen 2021-04-16 20:16:26 +09:00
f98ffbb1b3 Remove ClockToProcess, always process underlying clock 2021-04-16 20:15:42 +09:00
fe3ba2b80e Implement IAdjustableClock on GameplayClockContainer 2021-04-15 19:07:25 +09:00
f56125bd68 Update clock from base class 2021-04-14 21:15:14 +09:00
18c69cdaf7 Split out files 2021-04-14 19:50:22 +09:00
b53b30c1a9 Fix incorrect offset due to another intermediate Decoupleable clock 2021-04-14 19:33:55 +09:00
2935f87e70 Fix IsPaused not being bound 2021-04-14 18:29:34 +09:00
1aa36818df Abstractify GameplayClockContainer 2021-04-14 17:47:11 +09:00
20d04d6933 Fix Storyboard's FirstEventTime not finding the true earliest event 2021-01-04 15:16:01 +09:00
2dd5911256 Rename method to better match purpose 2020-12-11 14:44:01 +09:00