ekrctb
265dfe5416
Add test case of DHO setting LifetimeStart in OnApply
2021-05-28 21:51:48 +09:00
ekrctb
43bf734816
Reset lifetime on HitObject.DefaultsApplied
2021-05-28 21:35:26 +09:00
ekrctb
1d5e8f4a91
Fix wrong/misleading comment of InitialLifetimeOffset
2021-05-28 17:19:36 +09:00
Dean Herbert
122bb05aa8
Add a mention that OnApply/OnFree
is performed after ApplyDefaults
2021-05-27 15:20:35 +09:00
smoogipoo
7494ddeef4
Fix DHOs not receiving initial skin changed events
2021-05-24 14:07:40 +09:00
ekrctb
0489ae719d
Don't couple PoolableDrawableWithLifetime
lifetime with its entry
...
It turns out the incompatibility with `LifetimeManagementContainer` causes more issues than anticipated.
2021-05-20 14:56:15 +09:00
Dan Balasescu
ef81bdf63f
Merge branch 'master' into always-use-lifetime-entry
2021-05-18 20:10:12 +09:00
Salman Ahmed
cd6d070b4a
Consider "combo offsets" as legacy logic and separate from combo information
2021-05-05 07:43:08 +03:00
Salman Ahmed
eeeb001d62
Refactor combo colour retrieval logic to request skin lookups instead
2021-05-05 07:17:27 +03:00
ekrctb
aa42cf2fc0
Fix setting lifetime during KeepAlive is ignored
2021-05-04 16:56:48 +09:00
ekrctb
36438175a0
Throw an exception if try to modify lifetime of PoolableDrawableWithLifetime without lifetime
2021-05-04 16:04:58 +09:00
Dan Balasescu
e6eea73b8b
Merge branch 'master' into basic-compose-checks
2021-04-30 23:41:46 +09:00
ekrctb
5aa522b1c2
Completely delegate DHO lifetime to Entry lifetime
...
A downside is lifetime update is not caught by LifetimeManagementContainer if used.
2021-04-29 14:38:01 +09:00
ekrctb
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
Dan Balasescu
5fc731967b
Merge pull request #12592 from ekrctb/fix-entry-lifetime
...
Fix Setting DHO's lifetime doesn't update its entry lifetime
2021-04-28 01:38:19 +09:00
ekrctb
b87446a577
Simplify HitObjectLifetimeEntry logic a bit
2021-04-27 19:37:01 +09:00
Derrick Timmermans
3ea55314f2
Update osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs
...
Co-authored-by: Dan Balasescu <smoogipoo@smgi.me>
2021-04-27 11:29:16 +02:00
ekrctb
3899e500d3
Adopt framework change of LifetimeEntry
...
Override SetLifetimeStart/SetLifetimeEnd separately to track individual assignment. It is necessary to ensure real lifetime is not lost when lifetime is partially updated.
2021-04-27 17:54:18 +09:00
ekrctb
c9e6ca5378
Use now-public Entry.SetLifetime method
2021-04-27 15:25:05 +09:00
ekrctb
a2c0951d94
Use overriding instead of hiding in HitObjectLifetimeEntry
...
Hidden properties are used when the type is the base class. It caused issues when `DrawableHitObject` logic is factored out to `PoolableDrawableWithLifetime` because it is using the base `LifetimeEntry`, not `HitObjectLifetimeEntry`.
2021-04-27 15:23:33 +09:00
Naxess
a3570e18dd
Add concurrent objects check
...
Here we use `IHasColumn` to support rulesets with columns, and so I moved that interface out into `osu.Game` from `osu.Game.Rulesets.Mania`.
We also use the same threshold as the unsnap check to ensure that no problems slip through. Specifically where an object is simultaneously not concurrent and not unsnapped but still on the same tick.
2021-04-26 20:17:18 +02:00
Derrick Timmermans
08a232f7fa
Add method to safely refresh DrawableHitObject transforms
2021-04-26 20:08:40 +02:00
ekrctb
6561a7c7d6
Rename DrawableObject -> PoolableDrawableWithLifetime
2021-04-26 12:06:21 +09:00
ekrctb
20e3cadd30
freeIfInUse -> free, and add comments
2021-04-26 12:04:59 +09:00
ekrctb
e6474e6ff7
Remove redundant statement (lifetime is set in base)
2021-04-26 11:47:38 +09:00
ekrctb
b877a29737
Factor out pooling and lifetime management logic of DHO to a base class
2021-04-21 17:37:42 +09:00
ekrctb
bbf2ec369b
Remove SkinReloadableDrawable inheritance from DHO
2021-04-21 17:34:57 +09:00
ekrctb
3fbeadf318
Deprecate old overload of Apply
2021-04-21 14:32:37 +09:00
ekrctb
73d3da1687
Fix wrong InitialLifetimeOffset is used for a non-pooled DHO.
...
HitObjectLifetimeEntry's InitialLifetimeOffset is different from DrawableHitObject's InitialLifetimeOffset.
2021-04-21 11:32:01 +09:00
ekrctb
44ff08cce4
Revert "Fix wrong InitialLifetimeOffset is used for a non-pooled DHO."
...
This reverts commit 67fcfd9d
2021-04-21 10:02:50 +09:00
ekrctb
67fcfd9dbc
Fix wrong InitialLifetimeOffset is used for a non-pooled DHO.
...
HitObjectLifetimeEntry's InitialLifetimeOffset is different from DrawableHitObject's InitialLifetimeOffset.
2021-04-21 09:48:16 +09:00
ekrctb
e80c3c317a
Rename UnmanagedHitObjectEntry -> SyntheticHitObjectEntry
...
"Unmanaged" was confusing because its lifetime is still managed by the HitObjectContainer.
2021-04-21 09:23:23 +09:00
ekrctb
c6ee4e900e
Ensure a non-null hitobject entry has a non-null Result
2021-04-20 15:18:36 +09:00
ekrctb
8a8b9084ef
Make single-argument overloead of DHO.Apply public
2021-04-20 10:11:36 +09:00
ekrctb
1bc63a4c61
Now, DHO.lifetimeEntry can be non-null even it is not fully applied
2021-04-20 09:22:16 +09:00
ekrctb
c1b4aaaa03
Add doc comment
2021-04-20 08:38:02 +09:00
ekrctb
2c487ddb70
Create synthetic LifetimeEntry for a DHO when not supplied
...
Now, a DHO is always associated with a HitObjectLifetimeEntry while used.
Result is always stored in the entry, and not in the DHO.
2021-04-19 21:54:19 +09:00
ekrctb
5afdc3ff66
Make DHO application logic clearer with Entry/HitObject separation
2021-04-19 19:56:17 +09:00
Dean Herbert
d38e294d96
Centralise length validation function
2021-04-16 15:45:24 +09:00
ekrctb
50fad47ebc
Remove usage of Lazy<List<...>> for NestedHitObjects
2021-04-15 18:26:01 +09:00
Dean Herbert
b5954a55ad
Remove empty <returns> xmldoc
2021-04-12 17:46:14 +09:00
smoogipoo
76981f2547
Remove unused using
2021-04-09 13:58:24 +09:00
smoogipoo
8293b06c0a
Remove obsolete code
2021-04-09 13:56:58 +09:00
Dean Herbert
a8839792fd
Merge branch 'master' into circular-arc-freeze
2021-04-08 14:33:03 +09:00
smoogipoo
4b29d0ebe2
Fix last control point starting new segment
2021-04-05 17:49:36 +09:00
Naxess
7b684339ed
Undo public -> internal for PathControlPoint.Changed
...
No longer used.
2021-03-31 20:32:49 +02:00
Naxess
4ae3eaaac6
Move path type correction
...
This is better because `PathControlPointVisualizer` is local to the editor, meaning there is no chance that this could affect gameplay.
2021-03-24 03:02:19 +01:00
Naxess
e922e67c98
Fix inverted return statement
...
Forgot to run tests, all passing now.
2021-03-22 19:48:21 +01:00
Naxess
3fa5852e00
Add method documentation
2021-03-22 19:42:27 +01:00
Naxess
b11fd7972a
Separate condition logic from math logic
2021-03-22 19:41:48 +01:00
Naxess
92f713a30e
Improve fallback conditions
...
It's possible to create a `PerfectCurve` type path with more than 3 points currently, so this accounts for that.
2021-03-22 19:10:56 +01:00
Naxess
80e7c3aba7
Invert if statement
2021-03-22 19:09:28 +01:00
Naxess
6911a1b415
Fix missing newline
2021-03-22 19:03:55 +01:00
Naxess
a7076c329c
Fix null checks
2021-03-22 17:32:55 +01:00
Naxess
323b875cea
Fix newlines/spaces
2021-03-22 17:32:40 +01:00
Naxess
c82218627f
Add path type update logic
...
Only attempts to change points to bezier if points in the slider are modified.
2021-03-22 15:57:57 +01:00
Naxess
7a2cb526e4
Add PointsInSegment method
2021-03-22 15:55:30 +01:00
Naxess
bee2f55d00
Undo subpath limiting
2021-03-22 15:54:33 +01:00
Naxess
fcd1f4930f
Fix freeze due to large circular arc radius
...
Seems to stem from the osu!framework's PathApproximator not catching a few edge cases wherein the radius approaches infinity.
2021-03-21 06:34:55 +01:00
smoogipoo
dff1d80f39
Update HasFlag usages to HasFlagFast
2021-02-25 15:38:56 +09:00
Bartłomiej Dach
9cc63e8dce
Remove obsoleted IHasEndTime
2021-01-06 18:38:24 +01:00
Bartłomiej Dach
539785e422
Remove obsoleted IHasCurve
2021-01-06 18:38:24 +01:00
Bartłomiej Dach
09742998cd
Fix mistaken obsoletion notice
...
It was added in c9f38f7bb6
, which
specified 2021 in another place (and was committed in October of 2020
anyway). Update the year so that it doesn't get culled prematurely.
2021-01-06 18:38:24 +01:00
Bartłomiej Dach
a31e8d137f
Add guard when clearing samples
2020-12-20 15:42:24 +01:00
Dean Herbert
a0f92628ac
Merge branch 'master' into fix-sample-expire
2020-12-04 13:49:08 +09:00
Dean Herbert
5ded4b9faa
Merge branch 'master' into dho-remove-onparentreceived
2020-12-04 11:04:56 +09:00
smoogipoo
0bdf99b97a
Remove OnParentReceived()
2020-12-03 20:08:42 +09:00
smoogipoo
73e99718bc
Change order of OnParentReceived()
2020-12-03 20:06:26 +09:00
ekrctb
6c46046c24
Fix DHO expires while hit sound is playing
2020-12-03 12:32:49 +09:00
smoogipoo
e831c797f3
Merge branch 'master' into hit-sample-pooling
2020-12-02 14:45:24 +09:00
smoogipoo
2150cf1c52
Rename parameters
2020-12-02 10:55:48 +09:00
smoogipoo
e19ef9627a
Fix potentially incorrect override
2020-12-02 10:54:26 +09:00
smoogipoo
2840405112
Volume should be 0 by default
2020-12-01 18:14:14 +09:00
smoogipoo
6b4a6c12c8
Fix bad equality comparer implementations
2020-12-01 18:13:53 +09:00
smoogipoo
17560aeeea
Volume should be 0 by default
2020-12-01 18:09:28 +09:00
smoogipoo
dda4d76d72
Fix bad equality comparer implementations
2020-12-01 18:09:21 +09:00
smoogipoo
4900589af4
Remove unused method
2020-12-01 17:02:45 +09:00
smoogipoo
2bb7484608
Merge branch 'immutable-hit-samples' into hit-sample-pooling
2020-12-01 16:05:28 +09:00
smoogipoo
199710b941
Implement equality comparers for HitSampleInfo
2020-12-01 16:04:08 +09:00
smoogipoo
5760e1c1fc
Make HitSampleInfo immutable
2020-12-01 15:37:51 +09:00
Dean Herbert
51741c4791
Merge branch 'master' into hit-sample-pooling
2020-11-30 22:25:28 +09:00
smoogipoo
4bbeb9ebd4
Merge branch 'master' into hit-sample-pooling
2020-11-30 18:31:58 +09:00
smoogipoo
8f48389f89
Merge branch 'master' into improve-dho-time-offsets
2020-11-30 18:01:48 +09:00
Dan Balasescu
11d1450c76
Merge branch 'master' into fruit-bindables
2020-11-30 16:48:22 +09:00
Dean Herbert
18bb0cb45b
Remove unnecessary schedule logic from Apply's local updateState call
...
There were cases in the editor where rewinding of transforms would
leave the `DrawableHitObject` in a non-`IsPresent` state, resulting in
this scheduled logic never running.
This would in turn cause ghost hitobjects, which disappear under certain
circumstances.
Reproduction:
- Open editor to empty beatmap
- Place single hitcircle at current point in time
- Drag editor timeline backwards to seek before zero, and wait for
return to zero
- Select hitcircle in playfield
- Drag hitcircle to right in timeline, triggering a start time change
2020-11-27 16:32:05 +09:00
Dean Herbert
bcc197f9fe
Merge branch 'master' into improve-dho-time-offsets
2020-11-27 15:03:56 +09:00
ekrctb
e36bb7631d
Fix colour not updated when index changes
2020-11-27 11:41:39 +09:00
ekrctb
57454bbb1c
Remove hitObject argument from OnApply and OnFree
2020-11-27 10:13:05 +09:00
Dean Herbert
b1864670a2
Merge pull request #10961 from smoogipoo/better-dho-rewind
...
Rewind pooled DHOs into better states
2020-11-27 00:42:58 +09:00
smoogipoo
aa4da2a5f8
Add xmldoc on State
2020-11-26 23:42:05 +09:00
smoogipoo
e53f849aa0
Completely separate combo colours from DHOs
2020-11-26 18:14:25 +09:00
smoogipoo
0414e5c550
Add MaximumJudgementOffset to DrawableHitObject, use in more places
2020-11-26 01:12:42 +09:00
smoogipoo
c744db1b57
Rewind pooled DHOs into better states
2020-11-26 00:42:25 +09:00
Dan Balasescu
87ce8a53ff
Merge branch 'master' into on-drawable-hitobject-added
2020-11-24 16:09:57 +09:00
Dean Herbert
19faa2b9bb
Add comment covering intentional call to ClearTransformsAfter
2020-11-23 15:20:59 +09:00
ekrctb
666112cb5a
Address @bdach's minor suggestions
2020-11-22 18:51:16 +09:00
ekrctb
c506b438bf
Remove more code and make some methods private
2020-11-22 18:51:16 +09:00
ekrctb
281ed49332
Add HasInitialized
to DHO
...
As it turned out, `IsLoaded` is not a reliable way.
2020-11-21 11:19:52 +09:00
ekrctb
82aefa3868
Rework and rename to OnNewDrawableHitObject.
...
The semantics is changed and hopefully more clear.
2020-11-21 00:27:19 +09:00
smoogipoo
70cb197957
Cleanups
2020-11-19 20:38:36 +09:00
smoogipoo
730b14b5bb
Add initial hit sample pooling
2020-11-19 19:51:09 +09:00
smoogipoo
cb5d1d0d77
Remove obsolete method
2020-11-18 21:26:35 +09:00
smoogipoo
cead67d512
Add back removed InitialLifetimeOffset removal
2020-11-16 21:49:29 +09:00
Dan Balasescu
09298139e1
Merge pull request #10844 from bdach/spinner-rotation-tracker-state
...
Fix rotation tracker state not being reset on drawable spinner re-use
2020-11-16 17:10:40 +09:00
Bartłomiej Dach
9c0a0031d6
Clear existing transforms on DHO return to pool
2020-11-15 19:50:22 +01:00
Bartłomiej Dach
f8cabbdd21
Clear result when freeing pooled hitobject
2020-11-14 21:09:22 +01:00
smoogipoo
c71b237c4f
Merge all pooling support into Playfield
2020-11-14 00:59:08 +09:00
smoogipoo
36f1833f6e
Move hitobject pooling to Playfield
2020-11-14 00:41:18 +09:00
Dean Herbert
06fd0d08d1
Merge branch 'master' into nested-hitobject-pooling
2020-11-13 16:53:20 +09:00
smoogipoo
35329aa976
Reduce the number of state updates
2020-11-13 14:33:23 +09:00
Dan Balasescu
2840fd0f8f
Merge branch 'master' into hitobject-pooling-base
2020-11-12 23:17:36 +09:00
smoogipoo
261ddd2b4a
Fix samples not being disposed
2020-11-12 18:48:25 +09:00
smoogipoo
a8c2b798ad
Add support for nested hitobject pooling
2020-11-12 17:43:51 +09:00
smoogipoo
606cfacedf
Fix state update exception in a better way
2020-11-11 19:01:12 +09:00
smoogipoo
5d55af5818
Fix hitobjects sometimes not fading in completely with HD mod
2020-11-11 16:35:48 +09:00
smoogipoo
b725c9cce9
Fix possible nullrefs
2020-11-11 00:24:28 +09:00
smoogipoo
e525784cb2
Clear lifetimeEntry after use
2020-11-11 00:24:14 +09:00
smoogipoo
31e4d71852
Rewrite HitObjectContainer with pooling support
2020-11-10 22:49:02 +09:00
smoogipoo
6f3f6dc28b
Add hitobject lifetime support
2020-11-10 20:16:52 +09:00
smoogipoo
757a4b5c31
Add hitobject lifetime model
2020-11-10 19:26:01 +09:00
smoogipoo
88112801eb
Remove result storage from hitobject
2020-11-10 18:56:16 +09:00
smoogipoo
f5076fe3b8
Revert unnecessary change
2020-11-10 18:15:11 +09:00
smoogipoo
d4d3a6621e
Disable automatic lifetime management
2020-11-10 01:30:25 +09:00
smoogipoo
ac47399e6e
Update state after OnApply()
2020-11-10 00:30:23 +09:00
smoogipoo
ec8b726ea8
Re-privatise start time bindable
2020-11-09 21:51:58 +09:00
Dan Balasescu
33c3b07101
Fix events not being bound correctly
...
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2020-11-09 19:06:48 +09:00
smoogipoo
b1e039bcec
Prevent overrides from messing with application/freeing
2020-11-07 00:40:26 +09:00
smoogipoo
3a4bd73823
Fix DHOs being freed when not expected
2020-11-07 00:25:26 +09:00
smoogipoo
7eceda242b
Change derived class to use property
2020-11-06 23:04:28 +09:00
smoogipoo
2d892c7407
Allow Apply() to be called multiple times sequentially
2020-11-06 23:03:29 +09:00
smoogipoo
248d342a2f
Initial Apply()/FreeAfterUse() DHO implementation
2020-11-06 23:02:37 +09:00
Dean Herbert
a0b3379909
Fix judgement offsets being zero when windows are empty
2020-11-05 18:58:37 +09:00
Dean Herbert
0cadb31947
Merge branch 'master' into drawable-hit-object-hit-state-fix
2020-11-05 17:07:52 +09:00
smoogipoo
9a7fcadabc
Use BDL for top-level osu! DHOs
2020-11-05 13:51:46 +09:00
Dean Herbert
68b7efe4d5
Change order of execution to be chronological
2020-11-04 17:14:23 +09:00
Dean Herbert
831325978a
Always execute UpdateHitStateTransforms (even for idle)
2020-11-04 17:14:23 +09:00
Dean Herbert
3b6cf95f49
Remove parameter from StartTime method and add obsoleted previous version
2020-11-04 16:39:52 +09:00
Dean Herbert
7f30140b7e
Add new method handling hit state specifically
...
Until now UpdateStateTransforms was applying results offsets to
StartTime. This didn't cover the case of a HitObject with duration,
where the call would be made with `StartTime + hitOffset` rather than
`EndTime + hitOffset`.
To resolve this, a new method has been added which should be used to
handle hit-specific state transforms.
2020-11-04 16:13:14 +09:00
Berkan Diler
fe3a23750c
Use char overloads for string methods
2020-10-16 11:52:29 +02:00
smoogipoo
372761a46f
More/better commenting
2020-10-12 19:22:34 +09:00
smoogipoo
eb4ef157ca
Fix implicit segments not being constructed correctly
2020-10-12 19:16:37 +09:00
smoogipoo
48c0ae40ef
Fix multi-segment sliders not parsing correctly
2020-10-12 18:04:28 +09:00
smoogipoo
696e3d53af
Fix slider samples being overwritten by the last node
2020-10-09 20:50:09 +09:00
Dean Herbert
eacc7dca9a
Fix SliderPath not handling Clear correctly
2020-10-09 06:31:59 +09:00
Dean Herbert
3c3c1ce885
Don't force playback of (non-looping) DrawableHitObject samples after skin change
2020-10-07 18:18:01 +09:00
Dean Herbert
a8151d5c63
Fix HitWindows getting serialized alongside HitObjects
...
These were being serialized as the base type. On deserialization, due to
the HitWindow of objects being non-null, they would not get correctly
initialised by the CreateHitWindows() virtual method.
- Closes #10403
2020-10-07 13:45:42 +09:00
Dean Herbert
c622adde7a
Rename method back and add xmldoc
2020-10-05 16:24:02 +09:00
Dean Herbert
9f43dedf59
Fix missing line
2020-10-05 15:12:34 +09:00
Dean Herbert
758088672c
Don't stop non-looping samples immediately when pausing
2020-10-05 15:07:46 +09:00
Bartłomiej Dach
2ddfd79923
Replace object pattern match with simple conditional
2020-10-03 08:09:10 +02:00