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

@@ -3,7 +3,7 @@ import weakref
import pygame

def _getWeakRef(fn):
if not hasattr(fn, "__func__"):
if not hasattr(fn, "__call__"):
return None
if hasattr(fn, "__self__"):
return weakref.WeakMethod(fn)
@@ -18,11 +18,10 @@ class _Events:
self._signals = {}

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):
ref = _getWeakRef(fn)
@@ -31,7 +30,7 @@ class _Events:
if not signal in self._signals:
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):
ref = _getWeakRef(fn)
@@ -46,12 +45,12 @@ class _Events:
del self._signals[signal]

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()
if fn is not None:
fn(signal, data)
self._ClearUnreferenced()
fn(signal, data)
self._ClearUnreferenced()

# Create the actual Events instance :)
Events = _Events()
@@ -76,7 +75,7 @@ def _ReleaseKey(key):
lastTick = k[1]
_DOWNKEYS.remove(k)
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.
# We found nothing, boss.

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

@@ -116,37 +115,39 @@ def pollEmitter():
Events.emit("QUIT", {})
elif event.type == pygame.KEYDOWN:
_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:
Events.emit("KEYUP", {key:event.key, mod:event.mod})
Events.emit("KEYUP", {"key":event.key, "mod":event.mod})
_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:
Events.emit("MOUSEBUTTONUP", {pos:event.pos, button:event.button})
Events.emit("MOUSEBUTTONUP", {"pos":event.pos, "button":event.button})
_ReleaseButton(-1, event.button)
elif event.type == pygame.MOUSEBUTTONDOWN:
_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:
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:
Events.emit("VIDEOEXPOSE", {})
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:
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:
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:
Events.emit("JOYBUTTONUP", {joy:event.joy, button:event.button})
Events.emit("JOYBUTTONUP", {"joy":event.joy, "button":event.button})
_ReleaseButton(event.joy, event.button)
elif event.type == pygame.JOYBUTTONDOWN:
_WatchButton(event.joy, event.button)
Events.emit("JOYBUTTONDOWN", {joy:event.joy, button:event.button})
Events.emit("JOYBUTTONDOWN", {"joy":event.joy, "button":event.button})
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