From 317034d987adab5cbe1c1d1eb97b123e934affd2 Mon Sep 17 00:00:00 2001 From: Yonokid <37304577+Yonokid@users.noreply.github.com> Date: Fri, 2 May 2025 16:35:04 -0400 Subject: [PATCH] Update python-app.yml --- .github/workflows/python-app.yml | 2 +- PyTaiko.py | 107 +++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 PyTaiko.py diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 5a8c843..474f44b 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -37,7 +37,7 @@ jobs: - name: Build Executable uses: Nuitka/Nuitka-Action@main with: - nuitka-version: main + nuitka-version: 2.6.7 script-name: PyTaiko.py mode: app include-module: raylib,moviepy,numpy,scipy,sounddevice diff --git a/PyTaiko.py b/PyTaiko.py new file mode 100644 index 0000000..606d70b --- /dev/null +++ b/PyTaiko.py @@ -0,0 +1,107 @@ +import pyray as ray + +from libs.audio import audio +from libs.utils import get_config +from scenes.entry import EntryScreen +from scenes.game import GameScreen +from scenes.result import ResultScreen +from scenes.song_select import SongSelectScreen +from scenes.title import TitleScreen + + +class Screens: + TITLE = "TITLE" + ENTRY = "ENTRY" + SONG_SELECT = "SONG_SELECT" + GAME = "GAME" + RESULT = "RESULT" + +def main(): + screen_width: int = get_config()["video"]["screen_width"] + screen_height: int = get_config()["video"]["screen_height"] + render_width, render_height = ray.get_render_width(), ray.get_render_height() + dpi_scale = ray.get_window_scale_dpi() + if dpi_scale.x == 0: + dpi_scale = (ray.get_render_width(), ray.get_render_height()) + dpi_scale = screen_width, screen_height + else: + dpi_scale = int(render_width/dpi_scale.x), int(render_height/dpi_scale.y) + + if get_config()["video"]["vsync"]: + ray.set_config_flags(ray.ConfigFlags.FLAG_VSYNC_HINT) + ray.set_config_flags(ray.ConfigFlags.FLAG_MSAA_4X_HINT) + + ray.set_window_max_size(screen_width, screen_height) + ray.set_window_min_size(screen_width, screen_height) + ray.init_window(screen_width, screen_height, "PyTaiko") + if get_config()["video"]["borderless"]: + ray.toggle_borderless_windowed() + ray.clear_window_state(ray.ConfigFlags.FLAG_WINDOW_TOPMOST) + if get_config()["video"]["fullscreen"]: + ray.maximize_window() + + current_screen = Screens.TITLE + _frames_counter = 0 + + audio.init_audio_device() + + title_screen = TitleScreen(screen_width, screen_height) + entry_screen = EntryScreen(screen_width, screen_height) + song_select_screen = SongSelectScreen(screen_width, screen_height) + game_screen = GameScreen(screen_width, screen_height) + result_screen = ResultScreen(screen_width, screen_height) + + screen_mapping = { + Screens.ENTRY: entry_screen, + Screens.TITLE: title_screen, + Screens.SONG_SELECT: song_select_screen, + Screens.GAME: game_screen, + Screens.RESULT: result_screen + } + target = ray.load_render_texture(screen_width, screen_height) + ray.set_texture_filter(target.texture, ray.TextureFilter.TEXTURE_FILTER_TRILINEAR) + ray.gen_texture_mipmaps(target.texture) + #lmaooooooooooooo + #rl_set_blend_factors_separate(RL_SRC_ALPHA, RL_ONE_MINUS_SRC_ALPHA, RL_ONE, RL_ONE_MINUS_SRC_ALPHA, RL_FUNC_ADD, RL_FUNC_ADD) + ray.rl_set_blend_factors_separate(0x302, 0x303, 1, 0x303, 0x8006, 0x8006) + ray.set_exit_key(ray.KeyboardKey.KEY_A) + while not ray.window_should_close(): + + ray.begin_texture_mode(target) + ray.begin_blend_mode(ray.BlendMode.BLEND_CUSTOM_SEPARATE) + screen = screen_mapping[current_screen] + + if ray.is_key_pressed(ray.KeyboardKey.KEY_F11): + ray.toggle_fullscreen() + + next_screen = screen.update() + screen.draw() + if screen == title_screen: + ray.clear_background(ray.BLACK) + else: + ray.clear_background(ray.WHITE) + + if next_screen is not None: + current_screen = next_screen + + if get_config()["general"]["fps_counter"]: + ray.draw_fps(20, 20) + ray.end_blend_mode() + ray.end_texture_mode() + ray.begin_drawing() + ray.clear_background(ray.WHITE) + #Thanks to rnoiz proper render height + ray.draw_texture_pro( + target.texture, + ray.Rectangle(0, 0, target.texture.width, -target.texture.height), + ray.Rectangle(0, 0, dpi_scale[0], dpi_scale[1]), + ray.Vector2(0,0), + 0, + ray.WHITE + ) + ray.end_drawing() + ray.close_window() + audio.close_audio_device() + +if __name__ == "__main__": + main()