This repository has been archived on 2025-08-18. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
GGS/games/tic-tac-toe/inputmanager.py

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