-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGameEvent.py
50 lines (35 loc) · 1.09 KB
/
GameEvent.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import enum
import typing
class EventType(enum.Enum):
LBUTTONDOWN = (1,)
MOUSEMOVE = (2,)
RBUTTONDOWN = (3,)
class Event:
def __init__(self, type: EventType):
self.type = type
def __str__(self) -> str:
keys = [k for k in dir(self) if not k.startswith("__")]
assert "type" in keys
kvs = dict([(k, getattr(self, k)) for k in keys if k != "type"])
return (
f'Event {self.type.name} {", ".join([f"{k}={v}" for k, v in kvs.items()])}'
)
class MouseEvent(Event):
def __init__(self, type: EventType, pos: tuple[int, int]):
self.pos = pos
super().__init__(type)
class GameEventBase:
def __init__(self):
self.__events = []
def add_event(self, event: Event):
self.__events.append(event)
@property
def events(self) -> typing.List[Event]:
_events = self.__events[:]
self.__events.clear()
return _events
if __name__ == "__main__":
base = GameEventBase()
base.add_event(MouseEvent(EventType.LBUTTONDOWN, (1, 2)))
for e in base.events:
print(e)