From 30c592e1386f476b8343dce8a74a7f5930e7e207 Mon Sep 17 00:00:00 2001 From: Matteo Benedetto Date: Mon, 18 Aug 2025 23:25:17 +0200 Subject: [PATCH] Add KeyTester class for key press and release handling --- .gitignore | 3 +- key.py | 55 +++++++++++++++++++++++++ units/__pycache__/rat.cpython-313.pyc | Bin 9704 -> 9434 bytes units/__pycache__/unit.cpython-313.pyc | Bin 1207 -> 2959 bytes 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 key.py diff --git a/.gitignore b/.gitignore index ecbb66e..874e073 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ build/ dist/ rats rats.spec -.env \ No newline at end of file +.env +release/ \ No newline at end of file diff --git a/key.py b/key.py new file mode 100644 index 0000000..127c745 --- /dev/null +++ b/key.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 + +import sys +import os +sys.path.append(os.path.dirname(os.path.abspath(__file__))) + +from engine import sdl2 as engine + +class KeyTester: + def __init__(self): + self.render_engine = engine.GameWindow(800, 600, 1, "Key Tester", + key_callback=(self.key_pressed, self.key_released, None)) + self.pressed_keys = [] + self.last_key = "None" + + def key_pressed(self, key): + self.last_key = f"PRESSED: {key}" + if key not in self.pressed_keys: + self.pressed_keys.append(key) + print(f"Key pressed: {key}") + + def key_released(self, key): + self.last_key = f"RELEASED: {key}" + if key in self.pressed_keys: + self.pressed_keys.remove(key) + print(f"Key released: {key}") + + def update_display(self): + # Mostra l'ultimo tasto premuto/rilasciato + self.render_engine.draw_text(f"Last action: {self.last_key}", + self.render_engine.fonts[20], (10, 10), + engine.sdl2.ext.Color(255, 255, 255)) + + # Mostra tutti i tasti attualmente premuti + pressed_text = "Currently pressed: " + ", ".join(self.pressed_keys) if self.pressed_keys else "Currently pressed: None" + self.render_engine.draw_text(pressed_text, + self.render_engine.fonts[16], (10, 40), + engine.sdl2.ext.Color(255, 255, 255)) + + # Istruzioni + self.render_engine.draw_text("Press any key to test. ESC to quit.", + self.render_engine.fonts[14], (10, 80), + engine.sdl2.ext.Color(200, 200, 200)) + + # Continua il loop + self.render_engine.new_cycle(60, self.update_display) + + def run(self): + print("Key Tester started. Press keys to see them displayed.") + print("Press ESC to quit.") + self.render_engine.mainloop(update=self.update_display) + +if __name__ == "__main__": + tester = KeyTester() + tester.run() \ No newline at end of file diff --git a/units/__pycache__/rat.cpython-313.pyc b/units/__pycache__/rat.cpython-313.pyc index 1ff24fda64caf37311e0315af9bff4f6a8cf40d1..bb861f245897133f25725d4daace9d50607d5902 100644 GIT binary patch delta 3805 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 delta 3787 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