mirror of
https://github.com/Yonokid/PyTaiko.git
synced 2026-02-04 11:40:13 +01:00
add progress bar to practice mode
This commit is contained in:
@@ -199,7 +199,7 @@ class TextureWrapper:
|
||||
def draw_texture(self, subset: str, texture: str, color: ray.Color=ray.WHITE, frame: int = 0, scale: float = 1.0, center: bool = False,
|
||||
mirror: str = '', x: float = 0, y: float = 0, x2: float = 0, y2: float = 0,
|
||||
origin: ray.Vector2 = ray.Vector2(0,0), rotation: float = 0, fade: float = 1.1,
|
||||
index: int = 0, src: Optional[ray.Rectangle] = None) -> None:
|
||||
index: int = 0, src: Optional[ray.Rectangle] = None, controllable: bool = False) -> None:
|
||||
"""
|
||||
Wrapper function for raylib's draw_texture_pro().
|
||||
Parameters:
|
||||
@@ -219,6 +219,7 @@ class TextureWrapper:
|
||||
fade (float): The fade factor to apply to the texture.
|
||||
index (int): The index of the position data for the texture. Only used if the texture has multiple positions.
|
||||
src (Optional[ray.Rectangle]): The source rectangle of the texture.
|
||||
controllable (bool): Whether the texture is controllable.
|
||||
"""
|
||||
mirror_x = -1 if mirror == 'horizontal' else 1
|
||||
mirror_y = -1 if mirror == 'vertical' else 1
|
||||
@@ -246,7 +247,7 @@ class TextureWrapper:
|
||||
if isinstance(tex_object.texture, list):
|
||||
raise Exception("Texture is multiframe but was called as 1 texture")
|
||||
ray.draw_texture_pro(tex_object.texture, source_rect, dest_rect, origin, rotation, final_color)
|
||||
if tex_object.controllable[index]:
|
||||
if tex_object.controllable[index] or controllable:
|
||||
self.control(tex_object)
|
||||
|
||||
tex = TextureWrapper()
|
||||
|
||||
@@ -9,7 +9,7 @@ from libs.animation import Animation
|
||||
from libs.audio import audio
|
||||
from libs.background import Background
|
||||
from libs.global_data import Modifiers, global_data
|
||||
from libs.tja import Balloon, Drumroll, TJAParser, apply_modifiers
|
||||
from libs.tja import Balloon, Drumroll, Note, TJAParser, apply_modifiers
|
||||
from libs.utils import get_current_ms, get_key_code
|
||||
from libs.texture import tex
|
||||
from scenes.game import GameScreen, JudgeCounter, Player, SCREEN_WIDTH
|
||||
@@ -36,6 +36,18 @@ class PracticeGameScreen(GameScreen):
|
||||
self.scrobble_time = self.bars[self.scrobble_index].hit_ms
|
||||
self.scrobble_move = Animation.create_move(200, total_distance=0)
|
||||
|
||||
self.markers = self.get_gogotime_markers(self.scrobble_note_list)
|
||||
|
||||
def get_gogotime_markers(self, note_list: deque[Note | Drumroll | Balloon]):
|
||||
marker_list = []
|
||||
for i, note in enumerate(note_list):
|
||||
if i == 0 and note.gogo_time:
|
||||
marker_list.append(note.hit_ms)
|
||||
elif i > 0 and note.gogo_time:
|
||||
if not note_list[i-1].gogo_time:
|
||||
marker_list.append(note.hit_ms)
|
||||
return marker_list
|
||||
|
||||
def pause_song(self):
|
||||
self.paused = not self.paused
|
||||
self.player_1.paused = self.paused
|
||||
@@ -231,6 +243,14 @@ class PracticeGameScreen(GameScreen):
|
||||
if self.paused:
|
||||
self.draw_scrobble_list()
|
||||
self.player_1.draw_overlays(self.mask_shader)
|
||||
tex.draw_texture('practice', 'progress_bar_bg')
|
||||
if self.paused:
|
||||
progress = (self.scrobble_time + self.scrobble_move.attribute - self.bars[0].hit_ms) / self.player_1.end_time
|
||||
else:
|
||||
progress = self.current_ms / self.player_1.end_time
|
||||
tex.draw_texture('practice', 'progress_bar', x2=progress * 890)
|
||||
for marker in self.markers:
|
||||
tex.draw_texture('practice', 'gogo_marker', x=((marker - self.bars[0].hit_ms) / self.player_1.end_time) * 890)
|
||||
self.draw_overlay()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user