Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
time + duration,
hitsound,
Curve.from_kind_and_points(slider_type, points, pixel_length),
repeat,
pixel_length,
ticks,
num_beats,
slider_tick_rate,
ms_per_beat,
edge_sounds,
edge_additions,
*rest,
)
class HoldNote(HitObject):
"""A HoldNote hit element.
Parameters
----------
position : Position
Where this HoldNote appears on the screen.
time : timedelta
When this HoldNote appears in the map.
Notes
-----
A ``HoldNote`` can only appear in an osu!mania map.
"""
type_code = 128
@classmethod
Slider._parse,
timing_points=timing_points,
slider_multiplier=slider_multiplier,
slider_tick_rate=slider_tick_rate,
)
elif type_ & Spinner.type_code:
parse = Spinner._parse
elif type_ & HoldNote.type_code:
parse = HoldNote._parse
else:
raise ValueError(f'unknown type code {type_!r}')
return parse(Position(x, y), time, hitsound, rest)
class Circle(HitObject):
"""A circle hit element.
Parameters
----------
position : Position
Where this circle appears on the screen.
time : timedelta
When this circle appears in the map.
"""
type_code = 1
@classmethod
def _parse(cls, position, time, hitsound, rest):
if len(rest) > 1:
raise ValueError('extra data: {rest!r}')
position : Position
Where this circle appears on the screen.
time : timedelta
When this circle appears in the map.
"""
type_code = 1
@classmethod
def _parse(cls, position, time, hitsound, rest):
if len(rest) > 1:
raise ValueError('extra data: {rest!r}')
return cls(position, time, hitsound, *rest)
class Spinner(HitObject):
"""A spinner hit element
Parameters
----------
position : Position
Where this spinner appears on the screen.
time : timedelta
When this spinner appears in the map.
end_time : timedelta
When this spinner ends in the map.
addition : str
Hitsound additions.
"""
type_code = 8
time_related_attributes = frozenset({'time', 'end_time'})
'Difficulty',
'OverallDifficulty',
),
approach_rate=_get_as_float(
groups,
'Difficulty',
'ApproachRate',
# old maps didn't have an AR so the OD is used as a default
default=od,
),
slider_multiplier=slider_multiplier,
slider_tick_rate=slider_tick_rate,
timing_points=timing_points,
hit_objects=list(map(
partial(
HitObject.parse,
timing_points=timing_points,
slider_multiplier=slider_multiplier,
slider_tick_rate=slider_tick_rate,
),
groups['HitObjects'],
)),
end_time, *rest = rest
except ValueError:
raise ValueError('missing end_time')
try:
end_time = timedelta(milliseconds=int(end_time))
except ValueError:
raise ValueError(f'end_time should be an int, got {end_time!r}')
if len(rest) > 1:
raise ValueError(f'extra data: {rest!r}')
return cls(position, time, hitsound, end_time, *rest)
class Slider(HitObject):
"""A slider hit element.
Parameters
----------
position : Position
Where this slider appears on the screen.
time : datetime.timedelta
When this slider appears in the map.
end_time : datetime.timedelta
When this slider ends in the map
hitsound : int
The sound played on the ticks of the slider.
curve : Curve
The slider's curve function.
length : int
The length of this slider in osu! pixels.