1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-19 20:02:54 +08:00
Commit Graph

1680 Commits

Author SHA1 Message Date
iiSaLMaN
2670a23e6f Assign to field and move to load complete 2019-09-27 08:15:24 +03:00
iiSaLMaN
7904f77cd5 Bind event to activation delay change 2019-09-27 02:59:42 +03:00
iiSaLMaN
911094e790 Replace menu button text with "press for menu" on 0ms activation delay 2019-09-26 01:42:56 +03:00
Dean Herbert
f11156c2dc Fix tests not working correctly 2019-09-25 19:30:25 +09:00
Craftplacer
9a687ae8e2
Merge branch 'master' into muted-notification 2019-09-23 01:59:37 +02:00
smoogipoo
db24cfbead Merge remote-tracking branch 'origin/master' into auto-restart-mod-perfect
# Conflicts:
#	osu.Game/Screens/Play/Player.cs
2019-09-19 17:57:04 +09:00
smoogipoo
c76e27549a Remove spacing 2019-09-19 14:56:52 +09:00
iiSaLMaN
da4d83063e Simplify LINQ expression 2019-09-19 08:31:11 +03:00
iiSaLMaN
e793854735 Invert BypassFail usage 2019-09-19 08:00:41 +03:00
iiSaLMaN
9de0bcae1e Check for blocking fail mods by default 2019-09-19 07:58:54 +03:00
Craftplacer
c3221e1a36 Prepare classes for player loader test scene 2019-09-18 23:27:26 +02:00
iiSaLMaN
775b90e066 Bypass fail on replays 2019-09-18 22:49:48 +03:00
iiSaLMaN
ecd721e8c5 Add bypass fail property to Player 2019-09-18 22:49:28 +03:00
Dean Herbert
2fcc8c2d72 Simplify implementation, play fail animation during restart 2019-09-19 01:45:59 +09:00
Dean Herbert
ff3a7c1d13 Merge remote-tracking branch 'upstream/master' into auto-restart-mod-perfect 2019-09-19 01:36:29 +09:00
Dean Herbert
ec5f420818
Merge branch 'master' into key-counter-fixes 2019-09-17 22:56:34 +09:00
Dean Herbert
77947e8309 Fix rewind tests failing 2019-09-17 22:33:27 +09:00
Dean Herbert
38d85e44be Merge branch 'master' into key-counter-fixes 2019-09-17 22:33:15 +09:00
smoogipoo
f0bcb2b933 Debounce user-requested replay seeks 2019-09-17 16:12:18 +09:00
Craftplacer
220fdd0a04 Make muteWarningShownOnce static
... so it will actually get an instance per osu session.
2019-09-16 06:56:52 +02:00
Craftplacer
cb033591c4
Merge branch 'master' into muted-notification 2019-09-15 17:59:27 +02:00
Craftplacer
ecce12981e Use block body for constructor to fix remaining code inspection issue 2019-09-15 17:47:44 +02:00
Craftplacer
e3884658af Resolve code inspection errors 2019-09-15 17:36:53 +02:00
Dean Herbert
2381b4c003 Move video behind storyboard 2019-09-16 00:20:56 +09:00
Craftplacer
ec788ac09d Make notification only show up once per session 2019-09-15 17:20:07 +02:00
Craftplacer
811a08d18f Use Bindable instead of bool 2019-09-15 16:50:01 +02:00
Craftplacer
00e46fdefe Add check if game is muted by MuteButton 2019-09-15 16:32:23 +02:00
Craftplacer
4a10e6c44e Use ResolvedAttribute for NotificationOverlay 2019-09-15 16:11:45 +02:00
Craftplacer
78931c8e23 Implement notification when user has track or master volume muted
This took around under a hour to implement, it has the same behavior and content from osu!stable.
A notification will show up when the user has either its master or track volume set to the minimum, clicking it will set it to the default values.
2019-09-15 15:59:46 +02:00
Andrei Zavatski
9febeb1f3d Add black background 2019-09-14 06:32:00 +03:00
Andrei Zavatski
a36c808682 Use Fit FillFode 2019-09-14 06:28:59 +03:00
Andrei Zavatski
9a94405b3a Fix video playback is stretched on client resize 2019-09-14 06:05:09 +03:00
Dan Balasescu
b10ce0b12d
Merge branch 'master' into key-counter-fixes 2019-09-13 19:43:33 +09:00
Andrei Zavatski
437e121056 Merge remote-tracking branch 'refs/remotes/ppy/master' into beatmap-video 2019-09-13 13:39:58 +03:00
smoogipoo
cf2f841b4d Fix player not correctly exiting after an unpause 2019-09-13 15:42:58 +09:00
Dean Herbert
831d04f339 Don't use gameplay clock in KeyCounter 2019-09-12 15:48:07 +09:00
Dean Herbert
0cdf125c1e Handle key counter rewinding in a better way
Use ElapsedFrameTime rather than storing state data
2019-09-12 15:42:14 +09:00
Dean Herbert
cb0cf6e2c5 Remove reset functions 2019-09-12 14:27:52 +09:00
Dean Herbert
158737e001 Remove FadeTime customisation
Also adjusts fade transitions to feel better, especially in fast forward scenarios.
2019-09-12 14:27:29 +09:00
Dean Herbert
f9c969788a Fix keys not reaching full brightness as soon as they should 2019-09-12 13:56:23 +09:00
Dean Herbert
88d0756107 Allow global actions to propagate through pause screen 2019-09-06 17:17:30 +09:00
Dean Herbert
f925e781a9 Refactor HitWindows for legibility 2019-09-06 15:24:14 +09:00
Dean Herbert
986ac08397
Fix pause menu keyboard navigation being affected by initial cu… (#6002)
Fix pause menu keyboard navigation being affected by initial cursor hover
2019-09-05 17:27:48 +09:00
Dean Herbert
a1d7291ffa Fix pause menu keyboard navigation being affected by initial cursor hover 2019-09-05 16:31:10 +09:00
smoogipoo
a87a1e6031 Don't redraw certain buffered containers on scale change 2019-09-04 19:38:12 +09:00
Dean Herbert
1802d2efaf Merge remote-tracking branch 'upstream/master' into fix-gameplay-menu-button-hover-ani 2019-09-04 10:35:14 +09:00
Dean Herbert
4cad55cee6 Move hit windows lookup to DrawableRuleset 2019-09-03 13:05:03 +09:00
smoogipoo
0c73c5acf3 Expose full hitobject rather than hit windows 2019-09-02 17:14:40 +09:00
smoogipoo
f2bdf94a1d Add HitWindows to JudgementResult to indicate timing errors 2019-09-02 16:28:14 +09:00
smoogipoo
0a89603e79 Fix hit error potentially not displaying with null hitwindows 2019-09-02 16:07:16 +09:00
Dean Herbert
7ca51d3866 Fix resume overlay being drawn below cursor
Closes #5905.
2019-09-02 11:20:55 +09:00
Andrei Zavatski
94512fea8e Apply naming suggestions 2019-08-31 16:20:33 +03:00
Andrei Zavatski
d2f7a653a8 Fix nullref 2019-08-31 16:10:07 +03:00
Andrei Zavatski
28b19e8d54 Merge remote-tracking branch 'refs/remotes/ppy/master' into beatmap-video 2019-08-31 15:49:21 +03:00
Dean Herbert
1ddf292ad6 Fix vertical alignment of hit error display ticks
Wasn't correctly centered before.
2019-08-31 12:20:50 +09:00
Andrei Zavatski
d4291556ee Remove unused using 2019-08-31 02:57:14 +03:00
Andrei Zavatski
fd958ec1ab Remove unused property accessor 2019-08-31 02:56:41 +03:00
Andrei Zavatski
fa3591e5ec Add setting to turn on/off the video 2019-08-31 00:42:20 +03:00
Andrei Zavatski
5dd688a51b Fix video doesn't use gameplay clock 2019-08-31 00:09:23 +03:00
Andrei Zavatski
d55be4d59c Implement DimmableVideo component 2019-08-30 23:48:38 +03:00
Andrei Zavatski
58a0b4e19b Add basic layout for player 2019-08-30 23:19:55 +03:00
Dean Herbert
8f5dc06d55 Merge remote-tracking branch 'upstream/master' into accuracy-bar 2019-08-30 20:18:25 +09:00
Dean Herbert
f1db6c7039 Fix likely nullref 2019-08-30 20:18:21 +09:00
smoogipoo
fc813347ac Make JudgementLine private 2019-08-30 19:54:36 +09:00
smoogipoo
dfccc60361 Reorder HitErrorDisplay 2019-08-30 19:53:38 +09:00
smoogipoo
fab12fa9cd Centre align the icons
Seems to look better this way.
2019-08-30 19:53:38 +09:00
Dean Herbert
665fc95d49 Handle no hitobjects / no hitwindows (osu!catch) 2019-08-30 19:37:20 +09:00
Dean Herbert
80671cefd7 Final visual polish 2019-08-30 19:14:07 +09:00
Dean Herbert
c3abf0ccb7 Improve visuals 2019-08-30 18:50:38 +09:00
Dean Herbert
8fc177b743 Fix namespacing and hitwindow source 2019-08-30 18:46:42 +09:00
Dean Herbert
741bd0a5cf Fix incorrect colour sizes and simplify alignment specification 2019-08-30 18:35:17 +09:00
Dean Herbert
54696eef39 Reverse display, add animation and reduce width 2019-08-30 17:06:23 +09:00
Dean Herbert
a73d672c2f Tidy up judgement line logic (and fix it displaying at the wrong place) 2019-08-30 16:40:39 +09:00
Dean Herbert
6640161bc1 Simplify event propagation 2019-08-30 15:51:36 +09:00
Dean Herbert
bdbfa7bd2f Fix class naming 2019-08-30 15:32:47 +09:00
Dean Herbert
835ee0aa2f Code quality fixes 2019-08-30 15:29:13 +09:00
Joehu
73fd3cf03c Fix gameplay menu button initial hover animation 2019-08-28 19:00:01 -07:00
Dean Herbert
7aeeb65ae7 Tidy up Player's container loading logic
Fixes drawable ruleset being loaded before skin sources are finished, by loading them as a separate operation (to avoid children being loaded first).
2019-08-27 18:27:21 +09:00
Dean Herbert
5e362d10b1 Add ruleset-specific legacy skin providers
This moves implementation of osu! skinnables to OsuLegacySkin.
2019-08-26 12:21:49 +09:00
Andrei Zavatski
0ccfaeb8d9 Simplify moving average 2019-08-21 10:13:59 +03:00
Andrei Zavatski
a5acc913ea CI fixes 2019-08-21 09:58:47 +03:00
Andrei Zavatski
a994ad9c84 Use moving average to calculate arrow position 2019-08-21 09:40:15 +03:00
Andrei Zavatski
71cbc3525d Add/remove displays only if necessary 2019-08-21 09:16:09 +03:00
Andrei Zavatski
f72edb8bf8 Add missing blank line 2019-08-20 09:03:31 +03:00
Andrei Zavatski
596ee150c6 Add xmldoc for not obvious const 2019-08-20 08:51:41 +03:00
Andrei Zavatski
9f64e09625 Move HitErrorDisplayOverlay back to the HUD 2019-08-20 08:45:51 +03:00
Andrei Zavatski
d337f9b482 DefaultHitErrorDisplay -> BarHitErrorDisplay 2019-08-20 08:03:17 +03:00
Andrei Zavatski
c4251d512e Simplify bar building 2019-08-20 08:00:09 +03:00
Andrei Zavatski
415f180261 Delete extra semicolon 2019-08-19 22:53:28 +03:00
Andrei Zavatski
50c47568e4 Don't present Meh hit windows if it has no value 2019-08-19 22:45:27 +03:00
Andrei Zavatski
f1c3a60660 Add ability to select side 2019-08-19 22:04:27 +03:00
Andrei Zavatski
1bff103d32 CI fixes 2019-08-19 21:25:14 +03:00
Andrei Zavatski
6d3aa0520b Make HitErrorDisplay an abstract class 2019-08-19 20:44:06 +03:00
Andrei Zavatski
70084b5553 Move HitErrorDisplay outside of the HUD 2019-08-19 20:28:03 +03:00
Andrei Zavatski
4c817b18b7 Use direct cast 2019-08-18 17:03:11 +03:00
Andrei Zavatski
dd6351b8ca Apply suggested changes 2019-08-18 16:51:16 +03:00
Andrei Zavatski
6c60db550f Fix crash if ruleset has no Meh hit windows 2019-08-18 16:24:13 +03:00
Andrei Zavatski
55cd1cecdf Add missing blank line 2019-08-18 15:53:42 +03:00
Andrei Zavatski
8740ebd13f Simplify layout 2019-08-18 15:45:18 +03:00
Andrei Zavatski
a59a14c9e6 Add setting to enable/disable hit error visibility 2019-08-18 15:01:04 +03:00
Andrei Zavatski
ee5568e596 Use Queue instead of List for stored Judgements 2019-08-18 14:43:34 +03:00
Andrei Zavatski
50133ba863 naming adjustments 2019-08-18 02:57:12 +03:00
Andrei Zavatski
906984ad95 Fix the math 2019-08-18 02:49:07 +03:00
Andrei Zavatski
f7024b513e Visual improvements 2019-08-18 01:43:43 +03:00
Andrei Zavatski
94dbd6386f Merge remote-tracking branch 'refs/remotes/ppy/master' into accuracy-bar 2019-08-18 01:14:27 +03:00
Dean Herbert
d0f2d22995
Merge branch 'master' into fix-storyboard-not-shown-on-disabled-user-dim 2019-08-12 05:46:15 +09:00
Andrei Zavatski
e7964c165f Make judgement lines alive for a bit longer 2019-08-11 19:09:50 +03:00
Andrei Zavatski
3136d46c7f Do not generate new judgement line on miss 2019-08-11 19:04:56 +03:00
Andrei Zavatski
5e0ac28ca8 Add basic colours 2019-08-11 18:30:03 +03:00
Andrei Zavatski
177a317a48 rename AccuracyBar to HitErrorDisplay 2019-08-11 18:11:49 +03:00
Andrei Zavatski
2a35c3c3e2 Calculate real position for judgement lines 2019-08-11 18:04:54 +03:00
Andrei Zavatski
0a255fe4d1 Add moving arrow 2019-08-11 16:38:03 +03:00
Andrei Zavatski
ed409d113b Add judgement lines generator 2019-08-11 15:53:15 +03:00
Andrei Zavatski
fd334e0319 Implement basic layout for AccuracyBar 2019-08-11 14:57:21 +03:00
Dean Herbert
90b1fe81f3 Update cached usage in line with framework changes 2019-08-09 19:12:29 +09:00
iiSaLMaN
0fcc6c1676 Add DimLevel property 2019-08-08 22:13:48 +03:00
iiSaLMaN
bedb744a2e Add parentheses 2019-08-08 17:11:26 +03:00
iiSaLMaN
88b9942b2a Move EnableUserDim check to defualt value of ShowDimContent 2019-08-08 17:07:06 +03:00
Dean Herbert
2172c5a52b
Merge branch 'master' into use-bindable-break-time-in-player 2019-08-08 14:24:52 +09:00
Dean Herbert
7d42561da9 Remove linq usage in BreakOverlay update 2019-08-08 12:58:20 +09:00
Salman Ahmed
3f9f9e7bc9
Merge branch 'master' into use-bindable-break-time-in-player 2019-08-08 05:36:45 +03:00
Dean Herbert
99f5ca07ce Remove redundant comment 2019-08-08 10:42:54 +09:00
Dean Herbert
40a33b3382 Move IsLoaded check to more correct place 2019-08-08 10:41:23 +09:00
Dean Herbert
a2e3ab6463
Merge branch 'master' into add-bindable-for-break-times 2019-08-08 10:13:14 +09:00
iiSaLMaN
ba269a49ee Expose break fade duration and add it in the calculation 2019-08-07 16:59:35 +03:00
iiSaLMaN
d3657d82cd Simplify final check for break time 2019-08-07 16:28:16 +03:00
iiSaLMaN
c2b3c28c79 Use IsBreakTime for checking if currently in a break
Rather than iterating over all breaks to find which is in current time
2019-08-07 16:15:53 +03:00
Dean Herbert
dda078277a Minor variable name changes 2019-08-06 23:05:12 +09:00
iiSaLMaN
2a68bb2749 onCompletionEvent -> pushResults 2019-08-06 14:11:43 +03:00
iiSaLMaN
dd701eaa62 Safely cancel the completion task on restart or immediate exit 2019-08-06 14:10:03 +03:00
iiSaLMaN
e6e315e07b Expose current break index 2019-07-30 13:29:41 +03:00
iiSaLMaN
5bf0277fd4 Remove unnecessary quick check
Not saving for anything
2019-07-28 09:17:13 +03:00
iiSaLMaN
1dd3a66300 Remove unnecessary index resets 2019-07-28 09:16:19 +03:00
iiSaLMaN
95b568eb46 Remove unnecessary condition 2019-07-27 15:52:30 +03:00
iiSaLMaN
6c580ac9d5 Use while loops instead 2019-07-27 15:52:01 +03:00
Salman Ahmed
934439e138
Merge branch 'master' into add-bindable-for-break-times 2019-07-26 12:57:52 +03:00
iiSaLMaN
4c9e8527d8 Modify global index directly in the for loop
Moves the global index to a near break if not in a break yet
2019-07-26 09:24:53 +03:00
iiSaLMaN
5a94a22314 Add a quick check if we're not in a break with current index 2019-07-26 09:17:39 +03:00
iiSaLMaN
3fa6804501 Use better loops for moving index
Easy to read, suggested by peppy
2019-07-26 08:12:32 +03:00
iiSaLMaN
806d41daf4 Add function to reset break index 2019-07-26 08:11:13 +03:00
iiSaLMaN
91fa8a6552 Simplify null and any check 2019-07-26 08:09:18 +03:00
iiSaLMaN
44895c4b69 Use IReadOnlyList for break periods list 2019-07-26 05:41:10 +03:00
iiSaLMaN
b4c93b1777 Use lookup direction than 2 while loops 2019-07-26 05:11:01 +03:00
iiSaLMaN
a08d54eb06 Remove unnecessary checks 2019-07-26 03:11:59 +03:00
Shane Woolcock
1d6c321e14 Ensure we don't ping-pong nearestBreakIndex between breaks 2019-07-26 08:34:18 +09:30
Shane Woolcock
5e51012800 Rewrite updateBreakTimeBindable 2019-07-25 22:54:05 +09:30
iiSaLMaN
cdda264c49 Use global index and move it to find if break time
Avoid using iterations
2019-07-25 12:28:21 +03:00
iiSaLMaN
5a55433d6c Return if breaks are null
Fixes a test
2019-07-25 11:53:32 +03:00
iiSaLMaN
172a9ce33a Use a for loop instead of foreach
avoid allocating an iterator
2019-07-25 11:40:45 +03:00
iiSaLMaN
9bd66b6e7a Better xmldoc 2019-07-25 11:27:32 +03:00
iiSaLMaN
69d2f57f4f Avoid using LINQ 2019-07-25 11:27:01 +03:00
iiSaLMaN
0ea0a10ca4 Expose as IBindable<bool> 2019-07-25 11:26:38 +03:00
iiSaLMaN
7b82d184bd Add bindable boolean for break times 2019-07-25 11:07:53 +03:00
Dan Balasescu
986031e127
Merge branch 'master' into storyboard-clock-di 2019-07-12 23:14:12 +09:30
Dean Herbert
8b67f88d16 Don't expose dimmable container creation in player 2019-07-12 12:04:45 +09:00
Dean Herbert
46f7bb885b Move classes to local namespaces
Also renames test scene to more appropriate name.
2019-07-12 11:50:06 +09:00
Dean Herbert
ecbd0f7eff
Merge branch 'master' into fix-skip-button-clickability 2019-07-11 23:10:28 +09:00
David Zhao
6c0de0b436 Merge remote-tracking branch 'upstream/master' into storyboard-clock-di 2019-07-11 13:33:35 +09:00
David Zhao
321266e96f Make UserDimContainer abstract 2019-07-11 13:17:28 +09:00
David Zhao
7929104b8a move default into StoryboardContainer, fix load bug, remove comment 2019-07-10 12:24:05 +09:00
David Zhao
41afe89c0b
delete no longer needed bindable 2019-07-10 00:46:34 +09:00
Dean Herbert
27e79d56ec
Merge branch 'master' into collapse-graph-option 2019-07-09 23:40:43 +09:00
David Zhao
5bb21ecae0 remove storyboard region 2019-07-09 16:50:37 +09:00
David Zhao
89cb8a0cac Move storyboard initialization to new StoryboardContainer 2019-07-09 16:23:59 +09:00
Dean Herbert
8a98aff318
Merge branch 'master' into replay-local-mods 2019-07-08 22:38:02 +09:00
Dean Herbert
54f5e6aedf Add assertion and comment about lease logic 2019-07-08 22:37:39 +09:00
David Zhao
0cf4bf2352 Manually set clock for storyboard if loading before being given a parent 2019-07-08 18:46:12 +09:00
David Zhao
d489a77fe1 remove new container and comment 2019-07-08 17:57:29 +09:00
David Zhao
fbd300e664 Move ruleset into ReplayPlayerLoader as well 2019-07-08 17:37:20 +09:00
David Zhao
e78e326f34 remove unused using 2019-07-08 17:02:42 +09:00
David Zhao
ef22ab9340 remove bindable 2019-07-08 16:32:11 +09:00
David Zhao
6a86f62d17 Get mods from score info 2019-07-08 16:13:03 +09:00
David Zhao
5853a877c2 create base dependencies before caching, create player in playerloader 2019-07-08 15:40:10 +09:00
David Zhao
2747d7692b Create ReplayPlayerLoader for local mod caching 2019-07-08 14:55:05 +09:00
Dean Herbert
8f2ec73626 Move logic inside of HUDOverlay
Add vertical offset adjust.
2019-07-07 05:30:53 +09:00
Salman Ahmed
dfabed3d85
Merge branch 'master' into applicable-to-hud 2019-07-06 16:30:02 +03:00
Dan Balasescu
3a9f16ccf2
Merge branch 'master' into idle-still-starts 2019-07-06 00:08:59 +09:30
Unknown
d05512a12a invert usage corresponding to previous description change 2019-07-05 09:16:50 +02:00
Unknown
ee44caf964 better setting description 2019-07-05 08:52:44 +02:00
Unknown
2d5fd7f1c4 remove unnecessarily setting value of bindable that was already bound to 2019-07-05 08:49:56 +02:00
Unknown
b425df6c75 various fixes
- make AllowSeeking a Bindable which fixes incorrect initial position and removes unnecessary variables
- make SongProgressInfo fixed height
2019-07-05 08:48:40 +02:00
Dean Herbert
b902457f8d Allow PlayerLoader to proceed even if the mouse is hovering an overlay panel 2019-07-05 15:32:07 +09:00
Unknown
ed22c23f37 mask SongProgress 2019-07-05 08:30:32 +02:00
Unknown
e69160a0ce fix graph not completely hiding 2019-07-05 08:05:18 +02:00
iiSaLMaN
d624157c45 Remove unnecessary fading 2019-07-05 05:17:36 +03:00
Unknown
608223cbb4 Add setting to collapse the song progress graph 2019-07-04 11:59:38 +02:00
Dean Herbert
db24ac28ec Add tests 2019-07-04 16:53:08 +09:00
Dean Herbert
a20d5baa57 Fix skip button not being clickable after fade out 2019-07-04 16:21:01 +09:00
Dean Herbert
23acddcb56 Rename download buttons to avoid ambiguity 2019-07-03 12:02:35 +09:00
Salman Ahmed
8b4ef52c13
Revert unnecessary changes 2019-07-03 07:27:24 +03:00
naoey
eaa19d5a49
Remove unused/unnecessary fields 2019-07-02 16:13:47 +05:30
naoey
ee516d2515
Make direct panel download and replay buttons share UI 2019-07-02 15:55:30 +05:30
Dean Herbert
6539c6da17
Merge branch 'master' into watch-replays-4 2019-07-02 13:24:16 +09:00
Salman Ahmed
744e651a37
Merge branch 'master' into applicable-to-hud 2019-07-02 05:24:56 +03:00
Salman Ahmed
6a79349f4a Move health display out of the visibility container 2019-07-02 02:19:59 +03:00
Dean Herbert
60ea3d4e1a Fix skinning support for combobreak 2019-06-30 21:58:30 +09:00
naoey
bfcbb47b77
Clean up some more leftover code 2019-06-30 10:56:20 +05:30
welsar55
d6561531a3
Merge branch 'master' into combobreak 2019-06-29 11:55:10 -05:00
Welsar55
a22c166575 Make ComboEffects its own class 2019-06-29 11:28:40 -05:00
naoey
d8f6bbc90e
Disable replay button when replay is unavailable 2019-06-29 12:49:03 +05:30