浏览代码

pollEvents() function now does a quick convert of all default pygame events to events sent my the event dispatcher.

master
Bryan Miller 6 年前
父节点
当前提交
6bd8aa7e14
共有 1 个文件被更改,包括 87 次插入4 次删除
  1. +87
    -4
      game/gbe/events.py

+ 87
- 4
game/gbe/events.py 查看文件

@@ -1,4 +1,4 @@
import time
import weakref
import pygame

@@ -57,12 +57,95 @@ class _Events:
Events = _Events()



_ClickDelayMax=500 # in Milliseconds
_DOWNKEYS=[]
_DOWNMBUTTONS=[]
_DOWNJBUTTONS=[]

def _WatchKey(key):
global _DOWNKEYS
for k in _DOWNKEYS:
if k[0] == key:
return # Already watching. Technically, this should never happen.
_DOWNKEYS.append((key, int(round(time.time()*1000))))
def _ReleaseKey(key):
global _DOWNKEYS, _ClickDelayMax
tick = int(round(time.time()*1000))
for k in _DOWNKEYS:
if k[0] == key:
lastTick = k[1]
_DOWNKEYS.remove(k)
if tick - lastTick <= _ClickDelayMax:
Events.emit("KEYPRESSED", {key:key, mod:pygame.key.get_mods()})
return # Done.
# We found nothing, boss.


def _WatchButton(device, button):
global _DOWNMBUTTONS, _DOWNJBUTTONS
tick = int(round(time.time()*1000))
btnsrc = _DOWNMBUTTONS
if device >= 0:
btnsrc = _DOWNJBUTTONS
for b in btnsrc:
if b[0] == device and b[1] == button:
return # Already Watching...
btnsrc.append((device, button, tick))
def _ReleaseButton(device, button):
global _DOWNMBUTTONS, _DOWNJBUTTONS, _ClickDelayMax
tick = int(round(time.time()*1000))
btnsrc = _DOWNMBUTTONS
if device >= 0:
btnsrc = _DOWNJBUTTONS
for b in btnsrc:
if b[0] == device and b[1] == button:
lastTick = b[2]
btnsrc.remove(b)
if tick - lastTick <= _ClickDelayMax:
if device >= 0:
Events.emit("JOYBUTTONPRESSED", {joy:device, button:button})
else:
Events.emit("MOUSEBUTTONPRESSED", {pos:pygame.mouse.get_pos(), button:button})
return # Done.
# We found nothing, boss.

def pollEmitter():
global Events, _WatchKey, _ReleaseKey, _WatchButton, _ReleaseButton
for event in pygame.event.get():
#TODO: For each event obtains, convert it for the above Event dispatcher
pass
if event.type == pygame.QUIT:
Events.emit("QUIT", {})
elif event.type == pygame.KEYDOWN:
_WatchKey(event.key)
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})
_ReleaseKey(event.key)
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})
_ReleaseButton(-1, event.button)
elif event.type == pygame.MOUSEBUTTONDOWN:
_WatchButton(-1, 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})
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})
elif event.type == pygame.JOYBALLMOTION:
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})
elif event.type == pygame.JOYBUTTONUP:
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})
else:
Events.emit("PYGUSER_{}".format(event.code), {})




正在加载...
取消
保存