Re: Earwax

@72
What you want to do is already sort of unintentionally implemented. You can use Pyglet's own event system, as the Game and Level classes both inherit from pyglet.event.EventDispatcher. The below code will hopefully show you how to do that, and also hopefully show you why it's not a great idea:

from pyglet.event import EVENT_HANDLED, EVENT_UNHANDLED
from pyglet.window import Window, key

from earwax import ActionMenu, Game, Level, tts

keys = (
    key._1, key._2, key._3, key._4, key._5, key._6, key._7, key._8, key._9,
    key._0
)

game = Game()
window = Window(caption='Testing')

level = Level(game)


@game.event
def on_key_press(symbol, modifiers):
    if symbol in keys and not modifiers:
        tts.speak(f'Position {keys.index(symbol)}.')
        return EVENT_HANDLED
    elif symbol == key.ESCAPE and not modifiers and game.level is level:
        window.dispatch_event('on_close')
    else:
        return EVENT_UNHANDLED


@level.action('Cause problems', symbol=key._0)
def problem():
    raise RuntimeError('This should never happen.')


@level.action('Show help', symbol=key.SLASH, modifiers=key.MOD_SHIFT)
def get_help():
    game.push_level(ActionMenu(game, 'Actions'))


if __name__ == '__main__':
    game.run(window, initial_level=level)

The custom keys don't show up in the actions list, and code like that would be extremely hard to maintain, in addition to being error prone.

If you need something like a message reviewer where you press number keys to review the last 10 messages or whatever, you can do this more sensibly with a for loop.

If you run this code, you'll see the entries find their way into the actions menu (unlike the previous code), and everything is more readable and easy to maintain.

from pyglet.window import Window, key

from earwax import ActionMenu, Game, Level, tts

game = Game()

level = Level(game)

for i, x in enumerate(
    (
        key._1, key._2, key._3, key._4, key._5, key._6, key._7, key._8, key._9,
        key._0
    )
):
    @level.action(f'Read message {i + 1}', symbol=x)
    def speak(pos=i):
        tts.speak(f'Position {pos}.')


@level.action('Show help', symbol=key.SLASH, modifiers=key.MOD_SHIFT)
def get_help():
    game.push_level(ActionMenu(game, 'Actions'))


if __name__ == '__main__':
    window = Window(caption='Testing')
    game.run(window, initial_level=level)

Thanks to your post, I've finally made a proper examples directory where I've put both of these scripts, and will continue to add stuff that I think is useful.

Let me know if you've got any problems.

-- 
Audiogames-reflector mailing list
Audiogames-reflector@sabahattin-gucukoglu.com
https://sabahattin-gucukoglu.com/cgi-bin/mailman/listinfo/audiogames-reflector
  • ... AudioGames . net Forum — Developers room : chrisnorman7 via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : mechaSkyGuardian via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : chrisnorman7 via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : Orin via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : Ethin via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : pauliyobo via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : chrisnorman7 via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : ashleygrobler04 via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : chrisnorman7 via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : ashleygrobler04 via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : chrisnorman7 via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : chrisnorman7 via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : mechaSkyGuardian via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : TJ . Breitenfeldt via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : cartertemm via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : cartertemm via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : camlorn via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : cartertemm via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : camlorn via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : Orin via Audiogames-reflector
  • ... AudioGames . net Forum — Developers room : cartertemm via Audiogames-reflector

Reply via email to