nise/nise-circleguard/src/keypresses.py

90 lines
3.1 KiB
Python
Raw Normal View History

from brparser import Keypress, Key, apply_mods_to_time, diff_range, HitCircleOsu, SliderOsu, SpinnerOsu
def get_keypresses(replay):
keypresses = []
button_1 = False
button_2 = False
for event in replay.replay_data:
if (event.keys & Key.M1):
if not button_1:
button_1 = True
init_1 = event.time
else:
if button_1:
button_1 = False
keypresses.append(Keypress(init_1, event.time))
if (event.keys & Key.M2):
if not button_2:
button_2 = True
init_2 = event.time
else:
if button_2:
button_2 = False
keypresses.append(Keypress(init_2, event.time))
return keypresses
def get_kp_sliders(replay, beatmap):
keypresses = get_keypresses(replay)
hw_50 = int(diff_range(beatmap.od, 200, 150, 100, replay.mods))
keypress_times = []
sliderend_release_times = []
hit_objs = beatmap.hit_objects
kp_i = 0
ho_i = 0
while ho_i < len(hit_objs) and kp_i < len(keypresses):
ho = hit_objs[ho_i]
kp = keypresses[kp_i]
if isinstance(ho, HitCircleOsu):
end_time = ho.start_time + hw_50 + 1
else:
end_time = ho.end_time
if kp.key_down < ho.start_time - 400:
kp_i += 1
continue
if kp.key_down <= ho.start_time - hw_50:
if isinstance(ho, SliderOsu):
release_time = kp.key_up - ho.end_time
sliderend_release_times.append(
apply_mods_to_time(release_time, replay.mods))
while keypresses[kp_i].key_down < ho.end_time:
kp_i += 1
if kp_i >= len(keypresses):
break
else:
if isinstance(ho, HitCircleOsu):
keypress_time = kp.key_up - kp.key_down
keypress_times.append(apply_mods_to_time(keypress_time,
replay.mods))
kp_i += 1
ho_i += 1
elif kp.key_down >= end_time:
ho_i += 1
else:
if kp.key_down < ho.start_time + hw_50 and not isinstance(ho, SpinnerOsu):
if isinstance(ho, SliderOsu):
release_time = kp.key_up - ho.end_time
sliderend_release_times.append(
apply_mods_to_time(release_time, replay.mods))
while keypresses[kp_i].key_down < ho.end_time:
kp_i += 1
if kp_i >= len(keypresses):
break
else:
keypress_time = kp.key_up - kp.key_down
keypress_times.append(apply_mods_to_time(keypress_time,
replay.mods))
kp_i += 1
ho_i += 1
else:
kp_i += 1
return keypress_times, sliderend_release_times