Implement Scene subclass on_key callback support
Scene subclasses can now define on_key(self, key, state) methods that
receive keyboard events, matching the existing on_enter, on_exit, and
update lifecycle callbacks.
Changes:
- Rename call_on_keypress to call_on_key (consistent naming with property)
- Add triggerKeyEvent helper in McRFPy_API
- Call triggerKeyEvent from GameEngine when key_callable is not set
- Fix condition to check key_callable.isNone() (not just pointer existence)
- Handle both bound methods and instance-assigned callables
Usage:
class GameScene(mcrfpy.Scene):
def on_key(self, key, state):
if key == "Escape" and state == "end":
quit_game()
Property assignment (scene.on_key = callable) still works and takes
precedence when key_callable is set via the property setter.
Includes comprehensive test: tests/unit/scene_subclass_on_key_test.py
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
b6eb70748a
commit
1d11b020b0
5 changed files with 118 additions and 10 deletions
|
|
@ -36,7 +36,7 @@ public:
|
|||
// Lifecycle callbacks (called from C++)
|
||||
static void call_on_enter(PySceneObject* self);
|
||||
static void call_on_exit(PySceneObject* self);
|
||||
static void call_on_keypress(PySceneObject* self, std::string key, std::string action);
|
||||
static void call_on_key(PySceneObject* self, const std::string& key, const std::string& action);
|
||||
static void call_update(PySceneObject* self, float dt);
|
||||
static void call_on_resize(PySceneObject* self, int width, int height);
|
||||
|
||||
|
|
@ -75,7 +75,7 @@ namespace mcrfpydef {
|
|||
"Lifecycle Callbacks (override in subclass):\n"
|
||||
" on_enter(): Called when scene becomes active via activate().\n"
|
||||
" on_exit(): Called when scene is deactivated (another scene activates).\n"
|
||||
" on_keypress(key: str, action: str): Called for keyboard events. Alternative to on_key property.\n"
|
||||
" on_key(key: str, action: str): Called for keyboard events (subclass method).\n"
|
||||
" update(dt: float): Called every frame with delta time in seconds.\n"
|
||||
" on_resize(width: int, height: int): Called when window is resized.\n\n"
|
||||
"Example:\n"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue