def test_hit_objects_hard_rock(beatmap):
    # Only hit object 0 tested for now
    hit_objects_hard_rock_0 = beatmap.hit_objects(hard_rock=True,
                                                  stacking=False)[0]
    assert hit_objects_hard_rock_0.position == Position(x=243, y=220)
    assert hit_objects_hard_rock_0.curve.points == [Position(x=243, y=220),
                                                    Position(x=301, y=209)]
def test_parse_section_hit_objects(beatmap):
    # Only hit object 0 tested for now
    hit_objects_0 = beatmap.hit_objects(stacking=False)[0]
    assert hit_objects_0.position == Position(x=243, y=164)
    assert hit_objects_0.time == timedelta(milliseconds=1076)
    # Hit object note `type` is done by subclassing HitObject
    assert isinstance(hit_objects_0, slider.beatmap.Slider)
    # Slider specific parameters
    assert hit_objects_0.end_time == timedelta(milliseconds=1173)
    assert hit_objects_0.hitsound == 0
    assert isinstance(hit_objects_0.curve, slider.curve.Linear)
    assert hit_objects_0.curve.points == [Position(x=243, y=164),
                                          Position(x=301, y=175)]
    assert round(hit_objects_0.curve.req_length) == 45
    assert isclose(hit_objects_0.length, 45.0000017166138)
    assert hit_objects_0.ticks == 2
    assert hit_objects_0.num_beats == 0.3125
    assert hit_objects_0.tick_rate == 1.0
    assert isclose(hit_objects_0.ms_per_beat, 307.692307692308)
    assert hit_objects_0.edge_sounds == [2, 0]
    assert hit_objects_0.edge_additions == ['0:0', '0:0']
    assert hit_objects_0.addition == "0:0:0:0:"
Exemple #3
0
def test_hit_objects_stacking():
    hit_objects = [
        slider.beatmap.Circle(Position(128, 128),
                              timedelta(milliseconds=x * 10),
                              hitsound=1) for x in range(10)
    ]

    beatmap = slider.Beatmap(format_version=14,
                             audio_filename="audio.mp3",
                             audio_lead_in=timedelta(),
                             preview_time=timedelta(),
                             countdown=False,
                             sample_set="soft",
                             stack_leniency=1,
                             mode=0,
                             letterbox_in_breaks=False,
                             widescreen_storyboard=False,
                             bookmarks=[0],
                             distance_spacing=1,
                             beat_divisor=1,
                             grid_size=1,
                             timeline_zoom=1,
                             title="title",
                             title_unicode="title",
                             artist="artist",
                             artist_unicode="artist",
                             creator="creator",
                             version="1.0",
                             source="source",
                             tags=["tags"],
                             beatmap_id=0,
                             beatmap_set_id=0,
                             hp_drain_rate=5,
                             circle_size=5,
                             overall_difficulty=5,
                             approach_rate=5,
                             slider_multiplier=1,
                             slider_tick_rate=1,
                             timing_points=[],
                             hit_objects=hit_objects)
    radius = slider.beatmap.circle_radius(5)
    stack_offset = radius / 10

    for i, ob in enumerate(reversed(beatmap.hit_objects(stacking=True))):
        assert ob.position.y == 128 - (i * stack_offset)
Exemple #4
0
def test_beatmap_parameters():
    beatmap = Beatmap.from_path(tatoe_path)
    assert beatmap.format_version == 14
    assert beatmap.display_name == \
           "AKINO from bless4 & CHiCO with HoneyWorks - MIIRO " + \
           "vs. Ai no Scenario [Tatoe]"

    # [General]
    assert beatmap.audio_filename == "tatoe.mp3"
    assert beatmap.audio_lead_in == timedelta()
    assert beatmap.preview_time == timedelta(milliseconds=6538)
    assert beatmap.countdown == False
    assert beatmap.sample_set == "Normal"
    assert beatmap.stack_leniency == 0.7
    assert beatmap.mode == 0
    assert beatmap.letterbox_in_breaks == False
    assert beatmap.widescreen_storyboard == False

    # [Editor]
    assert beatmap.distance_spacing == 1.1
    assert beatmap.beat_divisor == 6
    assert beatmap.grid_size == 4
    assert beatmap.timeline_zoom == 1.8

    # [Metadata]
    assert beatmap.title == "MIIRO vs. Ai no Scenario"
    assert beatmap.title_unicode == "海色 vs. アイのシナリオ"
    assert beatmap.artist == "AKINO from bless4 & CHiCO with HoneyWorks"
    assert beatmap.artist_unicode == \
           "AKINO from bless4 & CHiCO with HoneyWorks"
    assert beatmap.creator == "monstrata"
    assert beatmap.version == "Tatoe"
    assert beatmap.source == ""
    assert beatmap.tags == \
           ['kyshiro', 'sukinathan', 'ktgster', 'pishifat', 'smoothie',
            'world', 'walaowey', 'toybot', 'sheela901', 'yuii-', 'Sharkie',
            'みいろ', 'tv', 'size', 'opening', 'kantai', 'collection',
            'kancolle', 'fleet', 'girls', 'magic', 'kaito', '1412',
            'まじっく快斗1412', '艦隊これくしょん', '-艦これ-']
    assert beatmap.beatmap_id == 735272
    assert beatmap.beatmap_set_id == 325158

    # [Difficulty]
    assert beatmap.hp_drain_rate == 6.5
    assert beatmap.circle_size == 4
    assert beatmap.overall_difficulty == 9
    assert beatmap.approach_rate == 9.5
    assert beatmap.slider_multiplier == 1.8
    assert beatmap.slider_tick_rate == 1

    # [Events] (skipped)
    # [TimingPoints] (the first one at least)
    timing_points_0 = beatmap.timing_points[0]
    assert timing_points_0.offset == timedelta()
    assert isclose(timing_points_0.ms_per_beat, 307.692307692308)
    assert timing_points_0.meter == 4
    # sample_set and sample_type omitted, see #56
    assert timing_points_0.volume == 60
    # inherited is not in class parameter
    assert timing_points_0.kiai_mode == 0

    # [Colours] (skipped)
    # [HitObjects]
    # Only hit object 0 tested for now
    hit_objects_0 = beatmap.hit_objects[0]
    assert hit_objects_0.position == Position(x=243, y=164)
    assert hit_objects_0.time == timedelta(milliseconds=1076)
    # Hit object note `type` is done by subclassing HitObject
    assert isinstance(hit_objects_0, slider.beatmap.Slider)
    # Slider specific parameters
    assert hit_objects_0.end_time == timedelta(milliseconds=1173)
    assert hit_objects_0.hitsound == 0
    assert isinstance(hit_objects_0.curve, slider.curve.Linear)
    assert hit_objects_0.curve.points == [
        Position(x=243, y=164), Position(x=301, y=175)
    ]
    assert round(hit_objects_0.curve.req_length) == 45
    assert isclose(hit_objects_0.length, 45.0000017166138)
    assert hit_objects_0.ticks == 2
    assert hit_objects_0.num_beats == 0.3125
    assert hit_objects_0.tick_rate == 1.0
    assert isclose(hit_objects_0.ms_per_beat, 307.692307692308)
    assert hit_objects_0.edge_sounds == [2, 0]
    assert hit_objects_0.edge_additions == ['0:0', '0:0']
    assert hit_objects_0.addition == "0:0:0:0:"