mirror of
https://github.com/Yonokid/PyTaiko.git
synced 2026-02-04 11:40:13 +01:00
scariest commit ever
This commit is contained in:
@@ -1593,6 +1593,18 @@ class FileNavigator:
|
|||||||
self.calculate_box_positions()
|
self.calculate_box_positions()
|
||||||
logger.info(f"Moved Right to {self.items[self.selected_index].path}")
|
logger.info(f"Moved Right to {self.items[self.selected_index].path}")
|
||||||
|
|
||||||
|
def skip_left(self):
|
||||||
|
if self.items:
|
||||||
|
self.selected_index = (self.selected_index - 10) % len(self.items)
|
||||||
|
self.calculate_box_positions()
|
||||||
|
logger.info(f"Skipped Left to {self.items[self.selected_index].path}")
|
||||||
|
|
||||||
|
def skip_right(self):
|
||||||
|
if self.items:
|
||||||
|
self.selected_index = (self.selected_index + 10) % len(self.items)
|
||||||
|
self.calculate_box_positions()
|
||||||
|
logger.info(f"Skipped Right to {self.items[self.selected_index].path}")
|
||||||
|
|
||||||
def get_current_item(self):
|
def get_current_item(self):
|
||||||
"""Get the currently selected item"""
|
"""Get the currently selected item"""
|
||||||
if self.items and 0 <= self.selected_index < len(self.items):
|
if self.items and 0 <= self.selected_index < len(self.items):
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ from libs.tja import (
|
|||||||
NoteList,
|
NoteList,
|
||||||
NoteType,
|
NoteType,
|
||||||
TJAParser,
|
TJAParser,
|
||||||
|
TimelineObject,
|
||||||
apply_modifiers,
|
apply_modifiers,
|
||||||
calculate_base_score,
|
calculate_base_score,
|
||||||
)
|
)
|
||||||
@@ -545,13 +546,7 @@ class Player:
|
|||||||
self.timeline_index += 1
|
self.timeline_index += 1
|
||||||
'''
|
'''
|
||||||
|
|
||||||
def get_judge_position(self, current_ms: float):
|
def handle_judgeposition(self, current_ms: float, timeline_object: TimelineObject):
|
||||||
"""Get the current judgment circle position based on bar data with on-demand interpolation"""
|
|
||||||
if not self.timeline or self.timeline_index >= len(self.timeline):
|
|
||||||
return
|
|
||||||
|
|
||||||
timeline_object = self.timeline[self.timeline_index]
|
|
||||||
|
|
||||||
if hasattr(timeline_object, 'judge_pos_x'):
|
if hasattr(timeline_object, 'judge_pos_x'):
|
||||||
if timeline_object.load_ms <= current_ms <= timeline_object.hit_ms:
|
if timeline_object.load_ms <= current_ms <= timeline_object.hit_ms:
|
||||||
duration = timeline_object.hit_ms - timeline_object.load_ms
|
duration = timeline_object.hit_ms - timeline_object.load_ms
|
||||||
@@ -573,13 +568,7 @@ class Player:
|
|||||||
next_timeline_object.judge_pos_x = self.judge_x / tex.screen_scale
|
next_timeline_object.judge_pos_x = self.judge_x / tex.screen_scale
|
||||||
next_timeline_object.judge_pos_y = self.judge_y / tex.screen_scale
|
next_timeline_object.judge_pos_y = self.judge_y / tex.screen_scale
|
||||||
|
|
||||||
def handle_scroll_type_commands(self, current_ms: float):
|
def handle_scroll_type_commands(self, current_ms: float, timeline_object: TimelineObject):
|
||||||
if not self.timeline or self.timeline_index >= len(self.timeline):
|
|
||||||
return
|
|
||||||
|
|
||||||
timeline_object = self.timeline[self.timeline_index]
|
|
||||||
should_advance = False
|
|
||||||
|
|
||||||
if hasattr(timeline_object, 'bpmchange') and timeline_object.hit_ms <= current_ms:
|
if hasattr(timeline_object, 'bpmchange') and timeline_object.hit_ms <= current_ms:
|
||||||
hit_ms = timeline_object.hit_ms
|
hit_ms = timeline_object.hit_ms
|
||||||
bpmchange = timeline_object.bpmchange
|
bpmchange = timeline_object.bpmchange
|
||||||
@@ -588,7 +577,7 @@ class Player:
|
|||||||
self.get_load_time(note)
|
self.get_load_time(note)
|
||||||
|
|
||||||
self.bpm *= bpmchange
|
self.bpm *= bpmchange
|
||||||
should_advance = True
|
self.timeline_index += 1
|
||||||
|
|
||||||
if hasattr(timeline_object, 'delay') and timeline_object.hit_ms <= current_ms:
|
if hasattr(timeline_object, 'delay') and timeline_object.hit_ms <= current_ms:
|
||||||
hit_ms = timeline_object.hit_ms
|
hit_ms = timeline_object.hit_ms
|
||||||
@@ -600,19 +589,34 @@ class Player:
|
|||||||
self.delay_start = hit_ms
|
self.delay_start = hit_ms
|
||||||
self.delay_end = hit_ms + delay
|
self.delay_end = hit_ms + delay
|
||||||
|
|
||||||
should_advance = True
|
|
||||||
|
|
||||||
if should_advance:
|
|
||||||
self.timeline_index += 1
|
self.timeline_index += 1
|
||||||
|
|
||||||
def update_bpm(self, current_ms: float):
|
def handle_bpmchange(self, current_ms: float, timeline_object: TimelineObject):
|
||||||
if not self.timeline or self.timeline_index >= len(self.timeline):
|
|
||||||
return
|
|
||||||
timeline_object = self.timeline[self.timeline_index]
|
|
||||||
if hasattr(timeline_object, 'bpm') and timeline_object.hit_ms <= current_ms:
|
if hasattr(timeline_object, 'bpm') and timeline_object.hit_ms <= current_ms:
|
||||||
self.bpm = timeline_object.bpm
|
self.bpm = timeline_object.bpm
|
||||||
self.timeline_index += 1
|
self.timeline_index += 1
|
||||||
|
|
||||||
|
def handle_gogotime(self, current_ms: float, timeline_object: TimelineObject):
|
||||||
|
if hasattr(timeline_object, 'gogo_time') and timeline_object.hit_ms <= current_ms:
|
||||||
|
self.is_gogo_time = timeline_object.gogo_time
|
||||||
|
if self.is_gogo_time:
|
||||||
|
self.gogo_time = GogoTime(self.is_2p)
|
||||||
|
self.chara.set_animation('gogo_start')
|
||||||
|
else:
|
||||||
|
self.gogo_time = None
|
||||||
|
self.chara.set_animation('gogo_stop')
|
||||||
|
self.timeline_index += 1
|
||||||
|
|
||||||
|
def handle_timeline(self, current_ms: float):
|
||||||
|
if not self.timeline or self.timeline_index >= len(self.timeline):
|
||||||
|
return
|
||||||
|
timeline_object = self.timeline[self.timeline_index]
|
||||||
|
|
||||||
|
self.handle_scroll_type_commands(current_ms, timeline_object)
|
||||||
|
self.handle_bpmchange(current_ms, timeline_object)
|
||||||
|
self.handle_judgeposition(current_ms, timeline_object)
|
||||||
|
self.handle_gogotime(current_ms, timeline_object)
|
||||||
|
|
||||||
def animation_manager(self, animation_list: list, current_time: float):
|
def animation_manager(self, animation_list: list, current_time: float):
|
||||||
if not animation_list:
|
if not animation_list:
|
||||||
return
|
return
|
||||||
@@ -754,7 +758,6 @@ class Player:
|
|||||||
self.bar_manager(current_ms)
|
self.bar_manager(current_ms)
|
||||||
self.play_note_manager(current_ms, background)
|
self.play_note_manager(current_ms, background)
|
||||||
self.draw_note_manager(current_ms)
|
self.draw_note_manager(current_ms)
|
||||||
#self.handle_tjap3_extended_commands(current_ms)
|
|
||||||
|
|
||||||
def note_correct(self, note: Note, current_time: float):
|
def note_correct(self, note: Note, current_time: float):
|
||||||
"""Removes a note from the appropriate separated list"""
|
"""Removes a note from the appropriate separated list"""
|
||||||
@@ -1060,8 +1063,7 @@ class Player:
|
|||||||
if self.lane_hit_effect is not None:
|
if self.lane_hit_effect is not None:
|
||||||
self.lane_hit_effect.update(current_time)
|
self.lane_hit_effect.update(current_time)
|
||||||
self.animation_manager(self.draw_drum_hit_list, current_time)
|
self.animation_manager(self.draw_drum_hit_list, current_time)
|
||||||
self.get_judge_position(ms_from_start)
|
self.handle_timeline(ms_from_start)
|
||||||
self.handle_scroll_type_commands(ms_from_start)
|
|
||||||
if self.delay_start is not None and self.delay_end is not None:
|
if self.delay_start is not None and self.delay_end is not None:
|
||||||
# Currently, a delay is active: notes should be frozen at ms = delay_start
|
# Currently, a delay is active: notes should be frozen at ms = delay_start
|
||||||
# Check if it ended
|
# Check if it ended
|
||||||
@@ -1071,7 +1073,6 @@ class Player:
|
|||||||
note.load_ms += delay
|
note.load_ms += delay
|
||||||
self.delay_start = None
|
self.delay_start = None
|
||||||
self.delay_end = None
|
self.delay_end = None
|
||||||
self.update_bpm(ms_from_start)
|
|
||||||
|
|
||||||
# More efficient arc management
|
# More efficient arc management
|
||||||
finished_arcs = []
|
finished_arcs = []
|
||||||
@@ -1125,7 +1126,6 @@ class Player:
|
|||||||
start_position += self.judge_x
|
start_position += self.judge_x
|
||||||
end_position += self.judge_x
|
end_position += self.judge_x
|
||||||
moji_y = tex.skin_config["moji"].y
|
moji_y = tex.skin_config["moji"].y
|
||||||
moji_x = -(tex.textures["notes"]["moji"].width//2) + (tex.textures["notes"]["1"].width//2)
|
|
||||||
if head.display:
|
if head.display:
|
||||||
tex.draw_texture('notes', "8", frame=is_big, x=start_position, y=y+(self.is_2p*tex.skin_config["2p_offset"].y), x2=length+tex.skin_config["drumroll_width_offset"].width, color=color)
|
tex.draw_texture('notes', "8", frame=is_big, x=start_position, y=y+(self.is_2p*tex.skin_config["2p_offset"].y), x2=length+tex.skin_config["drumroll_width_offset"].width, color=color)
|
||||||
if is_big:
|
if is_big:
|
||||||
@@ -1134,9 +1134,9 @@ class Player:
|
|||||||
tex.draw_texture('notes', "drumroll_tail", x=end_position, y=y+(self.is_2p*tex.skin_config["2p_offset"].y), color=color)
|
tex.draw_texture('notes', "drumroll_tail", x=end_position, y=y+(self.is_2p*tex.skin_config["2p_offset"].y), color=color)
|
||||||
tex.draw_texture('notes', str(head.type), frame=current_eighth % 2, x=start_position - tex.textures["notes"]["1"].width//2, y=y+(self.is_2p*tex.skin_config["2p_offset"].y)+self.judge_y, color=color)
|
tex.draw_texture('notes', str(head.type), frame=current_eighth % 2, x=start_position - tex.textures["notes"]["1"].width//2, y=y+(self.is_2p*tex.skin_config["2p_offset"].y)+self.judge_y, color=color)
|
||||||
|
|
||||||
tex.draw_texture('notes', 'moji_drumroll_mid', x=start_position + tex.textures["notes"]["1"].width//2, y=moji_y+(self.is_2p*tex.skin_config["2p_offset"].y)+self.judge_y, x2=length)
|
tex.draw_texture('notes', 'moji_drumroll_mid', x=start_position, y=moji_y+(self.is_2p*tex.skin_config["2p_offset"].y)+self.judge_y, x2=length)
|
||||||
tex.draw_texture('notes', 'moji', frame=head.moji, x=start_position + moji_x, y=moji_y+(self.is_2p*tex.skin_config["2p_offset"].y)+self.judge_y)
|
tex.draw_texture('notes', 'moji', frame=head.moji, x=start_position - (tex.textures["notes"]["moji"].width//2), y=moji_y+(self.is_2p*tex.skin_config["2p_offset"].y)+self.judge_y)
|
||||||
tex.draw_texture('notes', 'moji', frame=tail.moji, x=end_position + moji_x, y=moji_y+(self.is_2p*tex.skin_config["2p_offset"].y)+self.judge_y)
|
tex.draw_texture('notes', 'moji', frame=tail.moji, x=end_position - (tex.textures["notes"]["moji"].width//2), y=moji_y+(self.is_2p*tex.skin_config["2p_offset"].y)+self.judge_y)
|
||||||
|
|
||||||
def draw_balloon(self, current_ms: float, head: Balloon, current_eighth: int):
|
def draw_balloon(self, current_ms: float, head: Balloon, current_eighth: int):
|
||||||
"""Draws a balloon in the player's lane"""
|
"""Draws a balloon in the player's lane"""
|
||||||
@@ -1193,7 +1193,10 @@ class Player:
|
|||||||
if note.type == NoteType.TAIL:
|
if note.type == NoteType.TAIL:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
eighth_in_ms = 0 if self.bpm == 0 else (60000 * 4 / self.bpm) / 8
|
||||||
current_eighth = 0
|
current_eighth = 0
|
||||||
|
if self.combo >= 50 and eighth_in_ms != 0:
|
||||||
|
current_eighth = int(current_ms // eighth_in_ms)
|
||||||
if hasattr(note, 'sudden_appear_ms') and hasattr(note, 'sudden_moving_ms'):
|
if hasattr(note, 'sudden_appear_ms') and hasattr(note, 'sudden_moving_ms'):
|
||||||
appear_ms = note.hit_ms - note.sudden_appear_ms
|
appear_ms = note.hit_ms - note.sudden_appear_ms
|
||||||
moving_start_ms = note.hit_ms - note.sudden_moving_ms
|
moving_start_ms = note.hit_ms - note.sudden_moving_ms
|
||||||
|
|||||||
@@ -115,13 +115,11 @@ class SongSelectScreen(Screen):
|
|||||||
current_time = get_current_ms()
|
current_time = get_current_ms()
|
||||||
if action == "skip_left":
|
if action == "skip_left":
|
||||||
self.reset_demo_music()
|
self.reset_demo_music()
|
||||||
for _ in range(10):
|
self.navigator.skip_left()
|
||||||
self.navigator.navigate_left()
|
|
||||||
self.last_moved = current_time
|
self.last_moved = current_time
|
||||||
elif action == "skip_right":
|
elif action == "skip_right":
|
||||||
self.reset_demo_music()
|
self.reset_demo_music()
|
||||||
for _ in range(10):
|
self.navigator.skip_right()
|
||||||
self.navigator.navigate_right()
|
|
||||||
self.last_moved = current_time
|
self.last_moved = current_time
|
||||||
elif action == "navigate_left":
|
elif action == "navigate_left":
|
||||||
self.reset_demo_music()
|
self.reset_demo_music()
|
||||||
@@ -1161,7 +1159,7 @@ class ModifierSelector:
|
|||||||
self.is_confirmed = True
|
self.is_confirmed = True
|
||||||
self.move.restart()
|
self.move.restart()
|
||||||
|
|
||||||
def _start_text_animation(self, direction, old_value):
|
def _start_text_animation(self, direction):
|
||||||
self.move_sideways.start()
|
self.move_sideways.start()
|
||||||
self.fade_sideways.start()
|
self.fade_sideways.start()
|
||||||
self.direction = direction
|
self.direction = direction
|
||||||
@@ -1202,15 +1200,15 @@ class ModifierSelector:
|
|||||||
current_value = getattr(global_data.modifiers[self.player_num], current_mod.name)
|
current_value = getattr(global_data.modifiers[self.player_num], current_mod.name)
|
||||||
if current_mod.type is bool:
|
if current_mod.type is bool:
|
||||||
setattr(global_data.modifiers[self.player_num], current_mod.name, not current_value)
|
setattr(global_data.modifiers[self.player_num], current_mod.name, not current_value)
|
||||||
self._start_text_animation(-1, current_value)
|
self._start_text_animation(-1)
|
||||||
elif current_mod.name == 'speed':
|
elif current_mod.name == 'speed':
|
||||||
new_value = max(1, (current_value*10 - 1))/10
|
new_value = max(1, (current_value*10 - 1))/10
|
||||||
setattr(global_data.modifiers[self.player_num], current_mod.name, new_value)
|
setattr(global_data.modifiers[self.player_num], current_mod.name, new_value)
|
||||||
self._start_text_animation(-1, current_value)
|
self._start_text_animation(-1)
|
||||||
elif current_mod.name == 'random':
|
elif current_mod.name == 'random':
|
||||||
new_value = max(0, current_value-1)
|
new_value = max(0, current_value-1)
|
||||||
setattr(global_data.modifiers[self.player_num], current_mod.name, new_value)
|
setattr(global_data.modifiers[self.player_num], current_mod.name, new_value)
|
||||||
self._start_text_animation(-1, current_value)
|
self._start_text_animation(-1)
|
||||||
|
|
||||||
def right(self):
|
def right(self):
|
||||||
if self.is_confirmed:
|
if self.is_confirmed:
|
||||||
@@ -1219,15 +1217,15 @@ class ModifierSelector:
|
|||||||
current_value = getattr(global_data.modifiers[self.player_num], current_mod.name)
|
current_value = getattr(global_data.modifiers[self.player_num], current_mod.name)
|
||||||
if current_mod.type is bool:
|
if current_mod.type is bool:
|
||||||
setattr(global_data.modifiers[self.player_num], current_mod.name, not current_value)
|
setattr(global_data.modifiers[self.player_num], current_mod.name, not current_value)
|
||||||
self._start_text_animation(1, current_value)
|
self._start_text_animation(1)
|
||||||
elif current_mod.name == 'speed':
|
elif current_mod.name == 'speed':
|
||||||
new_value = (current_value*10 + 1)/10
|
new_value = (current_value*10 + 1)/10
|
||||||
setattr(global_data.modifiers[self.player_num], current_mod.name, new_value)
|
setattr(global_data.modifiers[self.player_num], current_mod.name, new_value)
|
||||||
self._start_text_animation(1, current_value)
|
self._start_text_animation(1)
|
||||||
elif current_mod.name == 'random':
|
elif current_mod.name == 'random':
|
||||||
new_value = (current_value+1) % 3
|
new_value = (current_value+1) % 3
|
||||||
setattr(global_data.modifiers[self.player_num], current_mod.name, new_value)
|
setattr(global_data.modifiers[self.player_num], current_mod.name, new_value)
|
||||||
self._start_text_animation(1, current_value)
|
self._start_text_animation(1)
|
||||||
|
|
||||||
def _draw_animated_text(self, text_primary: OutlinedText, text_secondary: OutlinedText, x: float, y: float, should_animate: bool):
|
def _draw_animated_text(self, text_primary: OutlinedText, text_secondary: OutlinedText, x: float, y: float, should_animate: bool):
|
||||||
if should_animate and not self.move_sideways.is_finished:
|
if should_animate and not self.move_sideways.is_finished:
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ uniform vec2 textureSize;
|
|||||||
uniform float outlineSize;
|
uniform float outlineSize;
|
||||||
uniform vec4 outlineColor;
|
uniform vec4 outlineColor;
|
||||||
uniform float alpha;
|
uniform float alpha;
|
||||||
uniform float smoothness = 1.0; // Add this uniform for control (0.0-1.0)
|
uniform float smoothness = 1.0;
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -15,7 +15,6 @@ void main()
|
|||||||
vec4 texel = texture(texture0, fragTexCoord);
|
vec4 texel = texture(texture0, fragTexCoord);
|
||||||
vec2 texelScale = vec2(outlineSize/textureSize.x, outlineSize/textureSize.y);
|
vec2 texelScale = vec2(outlineSize/textureSize.x, outlineSize/textureSize.y);
|
||||||
|
|
||||||
// Calculate outline
|
|
||||||
float outline = 0.0;
|
float outline = 0.0;
|
||||||
int ringSamples = 16;
|
int ringSamples = 16;
|
||||||
int rings = 2;
|
int rings = 2;
|
||||||
|
|||||||
Reference in New Issue
Block a user