Browse Source

Fixed a number of syntaxtical and logical bugs.

master
Bryan Miller 6 years ago
parent
commit
eeb19a594f
1 changed files with 29 additions and 28 deletions
  1. +29
    -28
      game/gbe/events.py

+ 29
- 28
game/gbe/events.py View File

import pygame import pygame


def _getWeakRef(fn): def _getWeakRef(fn):
if not hasattr(fn, "__func__"):
if not hasattr(fn, "__call__"):
return None return None
if hasattr(fn, "__self__"): if hasattr(fn, "__self__"):
return weakref.WeakMethod(fn) return weakref.WeakMethod(fn)
self._signals = {} self._signals = {}


def _ClearUnreferenced(self): def _ClearUnreferenced(self):
def isempty(r):
return r() is not None

for signal, sigs in self._signals:
self._signals[signal] = filter(isempty, sigs)
for signal in self._signals:
removal = [s for s in self._signals[signal] if s() is None]
for r in removal:
self._signals[signal].remove(r)


def listen(self, signal, fn): def listen(self, signal, fn):
ref = _getWeakRef(fn) ref = _getWeakRef(fn)
if not signal in self._signals: if not signal in self._signals:
self._signals[signal] = [] self._signals[signal] = []
if not ref in self._signals[signal]: if not ref in self._signals[signal]:
self._signal[signal].append(ref)
self._signals[signal].append(ref)


def unlisten(self, signal, fn): def unlisten(self, signal, fn):
ref = _getWeakRef(fn) ref = _getWeakRef(fn)
del self._signals[signal] del self._signals[signal]


def emit(self, signal, data): def emit(self, signal, data):
if signal in self._signals:
for r in self._signals[signal]:
if signal in self._signals:
for r in self._signals[signal]:
fn = r() fn = r()
if fn is not None: if fn is not None:
fn(signal, data)
self._ClearUnreferenced()
fn(signal, data)
self._ClearUnreferenced()


# Create the actual Events instance :) # Create the actual Events instance :)
Events = _Events() Events = _Events()
lastTick = k[1] lastTick = k[1]
_DOWNKEYS.remove(k) _DOWNKEYS.remove(k)
if tick - lastTick <= _ClickDelayMax: if tick - lastTick <= _ClickDelayMax:
Events.emit("KEYPRESSED", {key:key, mod:pygame.key.get_mods()})
Events.emit("KEYPRESSED", {"key":key, "mod":pygame.key.get_mods()})
return # Done. return # Done.
# We found nothing, boss. # We found nothing, boss.


btnsrc.remove(b) btnsrc.remove(b)
if tick - lastTick <= _ClickDelayMax: if tick - lastTick <= _ClickDelayMax:
if device >= 0: if device >= 0:
Events.emit("JOYBUTTONPRESSED", {joy:device, button:button})
Events.emit("JOYBUTTONPRESSED", {"joy":device, "button":button})
else: else:
Events.emit("MOUSEBUTTONPRESSED", {pos:pygame.mouse.get_pos(), button:button})
Events.emit("MOUSEBUTTONPRESSED", {"pos":pygame.mouse.get_pos(), "button":button})
return # Done. return # Done.
# We found nothing, boss. # We found nothing, boss.


Events.emit("QUIT", {}) Events.emit("QUIT", {})
elif event.type == pygame.KEYDOWN: elif event.type == pygame.KEYDOWN:
_WatchKey(event.key) _WatchKey(event.key)
Events.emit("KEYDOWN", {unicode:event.unicode, key:event.key, mod:event.mod})
Events.emit("KEYDOWN", {"unicode":event.unicode, "key":event.key, "mod":event.mod})
elif event.type == pygame.KEYUP: elif event.type == pygame.KEYUP:
Events.emit("KEYUP", {key:event.key, mod:event.mod})
Events.emit("KEYUP", {"key":event.key, "mod":event.mod})
_ReleaseKey(event.key) _ReleaseKey(event.key)
elif event.type == pygame.MOUSEMOTION:
Events.emit("MOUSEMOTION", {pos:event.pos, rel:event.rel, buttons:event.buttons})
elif event.type == pygame.MOUSEMOTION:
Events.emit("MOUSEMOTION", {"pos":event.pos, "rel":event.rel, "buttons":event.buttons})
elif event.type == pygame.MOUSEBUTTONUP: elif event.type == pygame.MOUSEBUTTONUP:
Events.emit("MOUSEBUTTONUP", {pos:event.pos, button:event.button})
Events.emit("MOUSEBUTTONUP", {"pos":event.pos, "button":event.button})
_ReleaseButton(-1, event.button) _ReleaseButton(-1, event.button)
elif event.type == pygame.MOUSEBUTTONDOWN: elif event.type == pygame.MOUSEBUTTONDOWN:
_WatchButton(-1, event.button) _WatchButton(-1, event.button)
Events.emit("MOUSEBUTTONDOWN", {pos:event.pos, button:event.button})
Events.emit("MOUSEBUTTONDOWN", {"pos":event.pos, "button":event.button})
elif event.type == pygame.VIDEORESIZE: elif event.type == pygame.VIDEORESIZE:
Events.emit("VIDEORESIZE", {size:event.size, w:event.w, h:event.h})
Events.emit("VIDEORESIZE", {"size":event.size, "w":event.w, "h":event.h})
elif event.type == pygame.VIDEOEXPOSE: elif event.type == pygame.VIDEOEXPOSE:
Events.emit("VIDEOEXPOSE", {}) Events.emit("VIDEOEXPOSE", {})
elif event.type == pygame.JOYAXISMOTION: elif event.type == pygame.JOYAXISMOTION:
Events.emit("JOYAXISMOTION", {joy:event.joy, axis:event.axis, value:event.value})
Events.emit("JOYAXISMOTION", {"joy":event.joy, "axis":event.axis, "value":event.value})
elif event.type == pygame.JOYBALLMOTION: elif event.type == pygame.JOYBALLMOTION:
Events.emit("JOYBALLMOTION", {joy:event.joy, ball:event.ball, res:event.rel})
Events.emit("JOYBALLMOTION", {"joy":event.joy, "ball":event.ball, "res":event.rel})
elif event.type == pygame.JOYHATMOTION: elif event.type == pygame.JOYHATMOTION:
Events.emit("JOYHATMOTION", {joy:event.joy, hat:event.hat, value:event.value})
Events.emit("JOYHATMOTION", {"joy":event.joy, "hat":event.hat, "value":event.value})
elif event.type == pygame.JOYBUTTONUP: elif event.type == pygame.JOYBUTTONUP:
Events.emit("JOYBUTTONUP", {joy:event.joy, button:event.button})
Events.emit("JOYBUTTONUP", {"joy":event.joy, "button":event.button})
_ReleaseButton(event.joy, event.button) _ReleaseButton(event.joy, event.button)
elif event.type == pygame.JOYBUTTONDOWN: elif event.type == pygame.JOYBUTTONDOWN:
_WatchButton(event.joy, event.button) _WatchButton(event.joy, event.button)
Events.emit("JOYBUTTONDOWN", {joy:event.joy, button:event.button})
Events.emit("JOYBUTTONDOWN", {"joy":event.joy, "button":event.button})
else: else:
Events.emit("PYGUSER_{}".format(event.code), {})

if hasattr(event, "code"):
Events.emit("PYGUSER_{}".format(event.code), {})
else:
print("Unkown pygame event type '{}'".format(event.type))







Loading…
Cancel
Save