71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
#Input_Manager.py
|
|
#
|
|
|
|
from sys import exit
|
|
import pygame.event as event
|
|
import pygame.key as key
|
|
from pygame import QUIT,KEYDOWN,KEYUP,MOUSEBUTTONDOWN,MOUSEBUTTONUP
|
|
from keypress import KeyPress
|
|
from mousepress import MousePress
|
|
|
|
|
|
#inputlist: [Input]
|
|
#Input = {Key_Id, Key_Behaviour, Action}
|
|
#Key_Id: Id of a pygame key or a String matching the pygame key
|
|
#Key_Behaviour: OnPress OnRelease etc
|
|
#Action: A function to perform when the given input occurs.
|
|
|
|
#Key_Dictionary: A dictionary of Strings for the corresponding pygame key id:s
|
|
#To speed up input lookups a store a dictionary where each key corresponds to an input or a set of inputs
|
|
#for each update, lookup each key input in dict to get the affected inputs only
|
|
|
|
#Each Input subclass name must begin with Key
|
|
|
|
|
|
#Functions
|
|
#add: Add an input to the list of inputs
|
|
#remove: Remove an input from the list of inputs
|
|
#Process: For all inputs, check if any of them is occuring and trigger the corresponding action
|
|
|
|
|
|
#Defect: Press two keys at the same time and release them. Should some time give 2 KeyUp events but sometimes only gets one.
|
|
|
|
class InputManager(object):
|
|
#param: [Input]
|
|
#requires:Pygame is initialized
|
|
inputs = None
|
|
def __init__(self, inputs):
|
|
self.inputs = []
|
|
for i in inputs: #LAST UPDATED HERE!!!
|
|
if i[0] is "Key":
|
|
key_behaviour = "Key" + i[2]
|
|
#key_behaviour = key_behaviour + "." + key_behaviour
|
|
self.inputs.append(eval(key_behaviour)(i[1],i[3]))
|
|
elif i[0] is "Mouse":
|
|
mouse_behaviour = "Mouse" + i[2]
|
|
#mouse_behaviour = mouse_behaviour + "." + mouse_behaviour
|
|
self.inputs.append(eval(mouse_behaviour)(i[1],i[3]))
|
|
#desc: Look up the refreshed current input state and call the affected methods
|
|
def update(self):
|
|
for e in event.get():
|
|
if e.type == QUIT: exit()
|
|
if e.type is KEYDOWN:
|
|
for i in self.inputs:
|
|
if i.id == e.key:
|
|
i.update("Down")
|
|
if e.type is KEYUP:
|
|
for i in self.inputs:
|
|
if i.id == e.key:
|
|
i.update("Up")
|
|
if e.type is MOUSEBUTTONDOWN:
|
|
for i in self.inputs:
|
|
if i.id == e.button:
|
|
i.update("Down")
|
|
if e.type is MOUSEBUTTONUP:
|
|
for i in self.inputs:
|
|
if i.id == e.button:
|
|
i.update("Up")
|
|
|
|
for i in self.inputs:
|
|
i.notify()
|
|
#chec for keyUpdates
|