mirror of
https://github.com/Yonokid/PyTaiko.git
synced 2026-02-04 19:50:12 +01:00
171 lines
7.5 KiB
Python
171 lines
7.5 KiB
Python
from libs.file_navigator import SongFile
|
|
from libs.transition import Transition
|
|
from scenes.song_select import DiffSortSelect, SongSelectPlayer, SongSelectScreen, State
|
|
from libs.utils import get_current_ms, global_data
|
|
from libs.audio import audio
|
|
|
|
class TwoPlayerSongSelectScreen(SongSelectScreen):
|
|
def on_screen_start(self):
|
|
if not self.screen_init:
|
|
super().on_screen_start()
|
|
self.player_1 = SongSelectPlayer('1', self.text_fade_in)
|
|
self.player_2 = SongSelectPlayer('2', self.text_fade_in)
|
|
|
|
def finalize_song(self):
|
|
global_data.selected_song = self.navigator.get_current_item().path
|
|
global_data.session_data[0].genre_index = self.navigator.get_current_item().box.name_texture_index
|
|
|
|
def handle_input_browsing(self):
|
|
"""Handle input for browsing songs."""
|
|
action = self.player_1.handle_input_browsing(self.last_moved, self.navigator.items[self.navigator.selected_index] if self.navigator.items else None)
|
|
if action is None:
|
|
action = self.player_2.handle_input_browsing(self.last_moved, self.navigator.items[self.navigator.selected_index] if self.navigator.items else None)
|
|
if action is None:
|
|
return
|
|
|
|
current_time = get_current_ms()
|
|
if action == "skip_left":
|
|
self.reset_demo_music()
|
|
for _ in range(10):
|
|
self.navigator.navigate_left()
|
|
self.last_moved = current_time
|
|
elif action == "skip_right":
|
|
self.reset_demo_music()
|
|
for _ in range(10):
|
|
self.navigator.navigate_right()
|
|
self.last_moved = current_time
|
|
elif action == "navigate_left":
|
|
self.reset_demo_music()
|
|
self.navigator.navigate_left()
|
|
self.last_moved = current_time
|
|
elif action == "navigate_right":
|
|
self.reset_demo_music()
|
|
self.navigator.navigate_right()
|
|
self.last_moved = current_time
|
|
elif action == "go_back":
|
|
self.navigator.go_back()
|
|
elif action == "diff_sort":
|
|
self.state = State.DIFF_SORTING
|
|
self.diff_sort_selector = DiffSortSelect(self.navigator.diff_sort_statistics, self.navigator.diff_sort_diff, self.navigator.diff_sort_level)
|
|
self.text_fade_in.start()
|
|
self.text_fade_out.start()
|
|
elif action == "select_song":
|
|
selected_song = self.navigator.select_current_item()
|
|
if selected_song:
|
|
self.state = State.SONG_SELECTED
|
|
self.player_1.on_song_selected(selected_song)
|
|
audio.play_sound('don', 'sound')
|
|
audio.play_sound('voice_select_diff', 'voice')
|
|
self.move_away.start()
|
|
self.diff_fade_out.start()
|
|
self.text_fade_out.start()
|
|
self.text_fade_in.start()
|
|
self.player_1.selected_diff_bounce.start()
|
|
self.player_1.selected_diff_fadein.start()
|
|
self.player_2.selected_diff_bounce.start()
|
|
self.player_2.selected_diff_fadein.start()
|
|
elif action == "add_favorite":
|
|
self.navigator.add_favorite()
|
|
current_box = self.navigator.get_current_item().box
|
|
current_box.is_favorite = not current_box.is_favorite
|
|
|
|
def handle_input_selected(self):
|
|
"""Handle input for selecting difficulty."""
|
|
p2_result = False
|
|
result = self.player_1.handle_input_selected(self.navigator.get_current_item())
|
|
if result is None:
|
|
result = self.player_2.handle_input_selected(self.navigator.get_current_item())
|
|
if result is None:
|
|
return
|
|
p2_result = True
|
|
if result is not None:
|
|
print(result, p2_result)
|
|
if result == "cancel":
|
|
self._cancel_selection()
|
|
elif result == "confirm":
|
|
if p2_result:
|
|
self._confirm_selection(2)
|
|
else:
|
|
self._confirm_selection(1)
|
|
elif result == "ura_toggle":
|
|
if p2_result:
|
|
self.ura_switch_animation.start(not self.player_2.is_ura)
|
|
else:
|
|
self.ura_switch_animation.start(not self.player_1.is_ura)
|
|
|
|
def handle_input_diff_sort(self):
|
|
"""
|
|
Handle input for sorting difficulty.
|
|
"""
|
|
if self.diff_sort_selector is None:
|
|
raise Exception("Diff sort selector was not able to be created")
|
|
|
|
result = self.player_1.handle_input_diff_sort(self.diff_sort_selector)
|
|
|
|
if result is not None:
|
|
diff, level = result
|
|
self.diff_sort_selector = None
|
|
self.state = State.BROWSING
|
|
self.text_fade_out.reset()
|
|
self.text_fade_in.reset()
|
|
if diff != -1:
|
|
if level != -1:
|
|
self.navigator.diff_sort_diff = diff
|
|
self.navigator.diff_sort_level = level
|
|
self.navigator.select_current_item()
|
|
|
|
def _cancel_selection(self):
|
|
"""Reset to browsing state"""
|
|
super()._cancel_selection()
|
|
self.player_2.selected_song = None
|
|
|
|
def _confirm_selection(self, player_selected: int):
|
|
"""Confirm song selection and create game transition"""
|
|
audio.play_sound('don', 'sound')
|
|
audio.play_sound(f'voice_start_song_{global_data.player_num}p', 'voice')
|
|
if player_selected == 1:
|
|
global_data.session_data[0].selected_difficulty = self.player_1.selected_difficulty
|
|
self.player_1.selected_diff_highlight_fade.start()
|
|
self.player_1.selected_diff_text_resize.start()
|
|
self.player_1.selected_diff_text_fadein.start()
|
|
elif player_selected == 2:
|
|
global_data.session_data[1].selected_difficulty = self.player_2.selected_difficulty
|
|
self.player_2.selected_diff_highlight_fade.start()
|
|
self.player_2.selected_diff_text_resize.start()
|
|
self.player_2.selected_diff_text_fadein.start()
|
|
|
|
def check_for_selection(self):
|
|
if (self.player_1.selected_diff_highlight_fade.is_finished and
|
|
self.player_2.selected_diff_highlight_fade.is_finished and
|
|
not audio.is_sound_playing(f'voice_start_song_{global_data.player_num}p') and self.game_transition is None):
|
|
selected_song = self.navigator.get_current_item()
|
|
if not isinstance(selected_song, SongFile):
|
|
raise Exception("picked directory")
|
|
|
|
title = selected_song.tja.metadata.title.get(
|
|
global_data.config['general']['language'], '')
|
|
subtitle = selected_song.tja.metadata.subtitle.get(
|
|
global_data.config['general']['language'], '')
|
|
self.game_transition = Transition(title, subtitle)
|
|
self.game_transition.start()
|
|
|
|
def update_players(self, current_time):
|
|
self.player_1.update(current_time)
|
|
self.player_2.update(current_time)
|
|
if self.text_fade_out.is_finished:
|
|
self.player_1.selected_song = True
|
|
self.player_2.selected_song = True
|
|
return "GAME_2P"
|
|
|
|
def draw_background_diffs(self):
|
|
self.player_1.draw_background_diffs(self.state)
|
|
self.player_2.draw_background_diffs(self.state)
|
|
|
|
def draw_players(self):
|
|
if self.player_1.selected_difficulty == self.player_2.selected_difficulty:
|
|
self.player_1.draw(self.state, True)
|
|
self.player_2.draw(self.state, True)
|
|
else:
|
|
self.player_1.draw(self.state, False)
|
|
self.player_2.draw(self.state, False)
|