From 4b1c6e15cf29a683ad18a78bcd7b9418c11b8e7c Mon Sep 17 00:00:00 2001 From: John Chen Date: Fri, 30 Jan 2026 23:58:06 -0800 Subject: [PATCH] Move harp folder to python server and sample code for mapping keys to sounds --- .../assets}/sounds/nes_harp/nes_harp_A4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_As4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_B4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_C4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_Cs4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_D4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_Ds4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_E4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_F4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_Fs4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_G4.wav | Bin .../assets}/sounds/nes_harp/nes_harp_Gs4.wav | Bin py/samples/fighting_game.py | 29 +++++++++++++++++- 13 files changed, 28 insertions(+), 1 deletion(-) rename {assets => py/assets}/sounds/nes_harp/nes_harp_A4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_As4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_B4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_C4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_Cs4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_D4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_Ds4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_E4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_F4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_Fs4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_G4.wav (100%) rename {assets => py/assets}/sounds/nes_harp/nes_harp_Gs4.wav (100%) diff --git a/assets/sounds/nes_harp/nes_harp_A4.wav b/py/assets/sounds/nes_harp/nes_harp_A4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_A4.wav rename to py/assets/sounds/nes_harp/nes_harp_A4.wav diff --git a/assets/sounds/nes_harp/nes_harp_As4.wav b/py/assets/sounds/nes_harp/nes_harp_As4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_As4.wav rename to py/assets/sounds/nes_harp/nes_harp_As4.wav diff --git a/assets/sounds/nes_harp/nes_harp_B4.wav b/py/assets/sounds/nes_harp/nes_harp_B4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_B4.wav rename to py/assets/sounds/nes_harp/nes_harp_B4.wav diff --git a/assets/sounds/nes_harp/nes_harp_C4.wav b/py/assets/sounds/nes_harp/nes_harp_C4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_C4.wav rename to py/assets/sounds/nes_harp/nes_harp_C4.wav diff --git a/assets/sounds/nes_harp/nes_harp_Cs4.wav b/py/assets/sounds/nes_harp/nes_harp_Cs4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_Cs4.wav rename to py/assets/sounds/nes_harp/nes_harp_Cs4.wav diff --git a/assets/sounds/nes_harp/nes_harp_D4.wav b/py/assets/sounds/nes_harp/nes_harp_D4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_D4.wav rename to py/assets/sounds/nes_harp/nes_harp_D4.wav diff --git a/assets/sounds/nes_harp/nes_harp_Ds4.wav b/py/assets/sounds/nes_harp/nes_harp_Ds4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_Ds4.wav rename to py/assets/sounds/nes_harp/nes_harp_Ds4.wav diff --git a/assets/sounds/nes_harp/nes_harp_E4.wav b/py/assets/sounds/nes_harp/nes_harp_E4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_E4.wav rename to py/assets/sounds/nes_harp/nes_harp_E4.wav diff --git a/assets/sounds/nes_harp/nes_harp_F4.wav b/py/assets/sounds/nes_harp/nes_harp_F4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_F4.wav rename to py/assets/sounds/nes_harp/nes_harp_F4.wav diff --git a/assets/sounds/nes_harp/nes_harp_Fs4.wav b/py/assets/sounds/nes_harp/nes_harp_Fs4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_Fs4.wav rename to py/assets/sounds/nes_harp/nes_harp_Fs4.wav diff --git a/assets/sounds/nes_harp/nes_harp_G4.wav b/py/assets/sounds/nes_harp/nes_harp_G4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_G4.wav rename to py/assets/sounds/nes_harp/nes_harp_G4.wav diff --git a/assets/sounds/nes_harp/nes_harp_Gs4.wav b/py/assets/sounds/nes_harp/nes_harp_Gs4.wav similarity index 100% rename from assets/sounds/nes_harp/nes_harp_Gs4.wav rename to py/assets/sounds/nes_harp/nes_harp_Gs4.wav diff --git a/py/samples/fighting_game.py b/py/samples/fighting_game.py index cda1d19..c9a2f0e 100644 --- a/py/samples/fighting_game.py +++ b/py/samples/fighting_game.py @@ -46,6 +46,7 @@ class FightingCharacter(GameObject): self.jump_sound: SoundComponent = None # type: ignore[assignment] self.hit_sound: SoundComponent = None # type: ignore[assignment] self.die_sound: SoundComponent = None # type: ignore[assignment] + self.guitar_hero_components: None self.fall_through = False self.fall_through_timer = 0.0 self.fall_through_duration = 0.2 @@ -95,6 +96,17 @@ class FightingCharacter(GameObject): self.hit_sound = self.sounds.add_component("hit", SoundComponent, "assets/sounds/hit.wav") self.die_sound = self.sounds.add_component("die", SoundComponent, "assets/sounds/die.wav") + # TODO, james add more buttons + guitar_hero_key_bindings = { + rl.GAMEPAD_BUTTON_RIGHT_FACE_UP: "assets/sounds/nes_harp/nes_harp_A4.wav", + rl.GAMEPAD_BUTTON_RIGHT_FACE_DOWN: "assets/sounds/nes_harp/nes_harp_C4.wav", + rl.GAMEPAD_BUTTON_RIGHT_FACE_LEFT: "assets/sounds/nes_harp/nes_harp_D4.wav", + rl.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT: "assets/sounds/nes_harp/nes_harp_G4.wav", + } + self.guitar_hero_components = {} + for key_press, wav_file in guitar_hero_key_bindings.items(): + self.guitar_hero_components[key_press] = self.sounds.add_component(key_press, SoundComponent, wav_file) + self.animation = self.add_component(AnimationController(self.body)) if self.player_number == 1: self.animation.add_animation_from_files("run", @@ -188,6 +200,20 @@ class FightingCharacter(GameObject): Returns: None """ + + # Add more buttons here + gamepad_buttons = [ + rl.GAMEPAD_BUTTON_RIGHT_FACE_UP, + rl.GAMEPAD_BUTTON_RIGHT_FACE_DOWN, + rl.GAMEPAD_BUTTON_RIGHT_FACE_LEFT, + rl.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, + ] + for button in gamepad_buttons: + if rl.is_gamepad_button_pressed(self.gamepad, button): + self.guitar_hero_components[button].play() + + + return deadzone = 0.1 jump_pressed = rl.is_key_pressed(rl.KEY_W) or rl.is_gamepad_button_pressed(self.gamepad, rl.GAMEPAD_BUTTON_RIGHT_FACE_DOWN) jump_held = rl.is_key_down(rl.KEY_W) or rl.is_gamepad_button_down(self.gamepad, rl.GAMEPAD_BUTTON_RIGHT_FACE_DOWN) @@ -276,6 +302,7 @@ class FightingCharacter(GameObject): Returns: True to enable contact, False to disable it. """ + return True normal = contact.worldManifold.normal other = None sign = 0.0 @@ -375,7 +402,7 @@ class FightingScene(Scene): self.physics.world.contactListener = FightingContactListener(self) player_entities = self.level.get_entities_by_name("Start") - for i, player_entity in enumerate(player_entities[:4]): + for i, player_entity in enumerate(player_entities[:1]): params = CharacterParams() params.position = self.level.convert_to_pixels(player_entity.getPosition()) params.width = 16 -- 2.43.0