Commit Graph

53 Commits

Author SHA1 Message Date
812a4b412a Move judgement result revert logic to Playfield
Previously, some judgement results were not reverted
when the source DHO is not alive (e.g. frames skipped in editor).
Now, all results are reverted in the exact reverse order.
2023-01-19 19:57:13 +09:00
7bc8908ca9 Partial everything 2022-11-27 00:00:27 +09:00
105aa01e7d Update usages of RemoveInternal 2022-08-29 15:57:40 +09:00
f8830c6850 Automated #nullable processing 2022-06-17 16:37:17 +09:00
b321b20e9d Remove OnAdd/OnRemove of HitObjectContainer
Instead, override `AddDrawable`/`RemoveDrawable`.
2021-06-03 15:00:16 +09:00
2c9e5b6c7e Replace EntryCrossedBoundary with more useful RemoveRewoundEntry property
It can be used for dynamically added entries.
2021-06-03 15:00:16 +09:00
fe2934db1d Factor out lifetime management logic of HitObjectContainer 2021-06-03 14:57:28 +09:00
ff04942295 Change timing of HitObjectContainer.OnAdd/OnRemove
Now, `OnAdd` is always invoked after the DHO is added to the container.
This change is required by `ScrollingHitObjectContainer` to compute origin adjusted lifetime when origin position is relative to the parent drawable size.
2021-05-31 20:56:25 +09:00
913fc8c3bc Revert the change of not adding non-pooled DHO to HOC until alive 2021-05-04 16:44:48 +09:00
c83c804057 Expose lifetime entries from HOC 2021-04-29 14:42:41 +09:00
d262956146 Always use LifetimeEntry to manage hit objects in HitObjectContainer
Previously, non-pooled DHOs were immediately added as children of the HOC when Add is called. Also, non-pooled DHOs were always attached to the HOC as children.
New behavior is that non-pooled DHOs are only added after CheckChildLifetime, and only attached to the HOC while the DHOs are alive.

- LifetimeManagementContainer inheritance of HOC is removed, as it is now all DHOs are "unmanaged" (previously `AddInternal(false)`).
- The signature of `Clear` is changed, and it is now always not disposing the children immediately.
2021-04-29 14:38:01 +09:00
f4a31287bf Add/use IHitObjectContainer interface instead of IEnumerables 2021-02-08 20:11:06 +09:00
1d9aaac2c2 Fix HOC not propagating DHO results applied on kill
`DrawableHitObject.OnKilled()` calls `UpdateResult()` to clean up a
hitobject's state definitively with regards to the judgement result
before returning the DHO back to the pool.

As it turns out, if a consumer was relying on this code path (as taiko
was in the case of nested strong hit objects), it would not work
properly with pooling, due to `HitObjectContainer` unsubscribing from
`On{New,Revert}Result` *before* calling the DHO's `OnKilled()`.

This in turn would lead to users potentially getting stuck in gameplay,
due to `ScoreProcessor` not receiving all results via that event path.

To resolve, change the call ordering to allow hit result changes applied
in `OnKilled()` to propagate normally.
2021-01-21 00:05:37 +01:00
73e99718bc Change order of OnParentReceived() 2020-12-03 20:06:26 +09:00
6e40de58e9 Use new OnAdd and OnRemove to invalidate DHO 2020-11-27 13:36:40 +09:00
f6faf95e33 Revert changes to HitObjectUsageBegan, not use it. 2020-11-26 14:01:46 +09:00
b8a5cd94f7 Invoke HitObjectUsageFinished before removal 2020-11-24 19:46:57 +09:00
e34a205104 Rewrite hit object management, take three 2020-11-24 18:56:05 +09:00
610ed99ae3 Add null checks to unguarded resolved-as-null fields 2020-11-14 14:52:58 +01:00
c71b237c4f Merge all pooling support into Playfield 2020-11-14 00:59:08 +09:00
36f1833f6e Move hitobject pooling to Playfield 2020-11-14 00:41:18 +09:00
d83b479c81 Internalise lifetime extensions and events too 2020-11-13 19:21:45 +09:00
8aaa500431 Add lifetime extensions 2020-11-12 18:34:50 +09:00
243e913e4a Add hitobject usage events 2020-11-12 18:32:20 +09:00
e44a8b3934 Resort as early as possible 2020-11-12 17:07:20 +09:00
cf91962865 Fix test failures due to on-the-fly starttime changes 2020-11-12 16:58:40 +09:00
16e4e8d032 Fix possible nullref 2020-11-12 14:54:33 +09:00
f652eb9982 Remove GetDrawableRepresentation() override, add null hinting 2020-11-12 13:18:44 +09:00
d7d77460fb Small refactorings 2020-11-12 12:55:42 +09:00
a8929b0764 Revert unnecessary change of casting 2020-11-11 19:27:07 +09:00
7d02018134 Remove some unnecessary implementations for now 2020-11-11 18:54:40 +09:00
66213f2ed0 Add pooling support to DrawableRuleset + Playfield 2020-11-10 23:56:32 +09:00
31e4d71852 Rewrite HitObjectContainer with pooling support 2020-11-10 22:49:02 +09:00
91c627c22d Revert HOC changes 2020-11-07 00:57:33 +09:00
248d342a2f Initial Apply()/FreeAfterUse() DHO implementation 2020-11-06 23:02:37 +09:00
3ea27e23e8 Update namespace references 2020-10-29 15:20:10 +09:00
dd5b15c64f Fix HitObjectContainer not correctly unbinding from startTime fast enough 2020-09-21 18:27:15 +09:00
86ef73aa27 Implement HitObjectContainer.Clear() 2020-04-23 11:16:59 +09:00
5664ce3109 Add hitobject container regression test 2019-12-18 18:51:12 +09:00
df8f8ffd0d Fix potential exception during removal 2019-12-18 12:03:15 +09:00
bcc19e29f2 Fix editor crashing after re-ordering objects 2019-12-18 02:56:29 +09:00
f1423b8cb5 Add more brackets 2019-07-18 00:03:04 +09:00
a9286fee07 Recycle slider paths when the parenting slider dies 2019-07-17 16:20:27 +09:00
8955d5de04 Update hit object result when lifetime is end 2019-01-29 15:25:27 +09:00
504e79b968 Merge branch 'master' into use-lifetime-optimization 2019-01-29 12:15:02 +09:00
8617aaa2a7 Update licence header (and remove year) 2019-01-24 17:43:03 +09:00
6f8a2e6ff2 Use LifetimeManagementContainer
This is a significant performance boost for gameplay,
especially for long or stroyboard-heavy maps.
2018-12-13 15:23:06 +09:00
368ceec47c Simplify creation of a playfield 2018-09-21 14:35:50 +09:00
3567823759 Reverse order of exposed objects in HitObjectContainer
Closes #2740.
2018-06-06 15:03:47 +09:00
32a74f95a5 Normalize all the line endings 2018-04-13 18:26:38 +09:00