Mercurial > mamba
annotate mamba/engine.py @ 15:ad2bcbf492bf
Hook up top-level habitat support.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sun, 11 Sep 2011 13:34:18 +0200 |
parents | f5846a46e9c5 |
children | 6d195a3a4557 |
rev | line source |
---|---|
12 | 1 """Game engine and top-level game loop.""" |
2 | |
3 import pygame.event | |
4 import pygame.display | |
13
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
5 from pygame.locals import QUIT, USEREVENT |
12 | 6 |
7 | |
8 class Engine(object): | |
9 def __init__(self): | |
15
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
10 self._habitat = None |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
11 |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
12 def set_habitat(self, habitat): |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
13 self._habitat = habitat |
12 | 14 |
15 def run(self): | |
16 """Game loop.""" | |
17 get_events = pygame.event.get | |
18 flip = pygame.display.flip | |
19 while True: | |
20 events = get_events() | |
21 for ev in events: | |
22 if ev.type is QUIT: | |
23 return | |
15
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
24 self._habitat.dispatch(ev) |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
25 self._habitat.draw() |
12 | 26 flip() |
13
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
27 |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
28 |
15
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
29 class Habitat(object): |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
30 def dispatch(self, ev): |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
31 pass |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
32 |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
33 def draw(self): |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
34 pass |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
35 |
ad2bcbf492bf
Hook up top-level habitat support.
Simon Cross <hodgestar@gmail.com>
parents:
13
diff
changeset
|
36 |
13
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
37 class UserEvent(object): |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
38 |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
39 utype = "UNKNOWN" |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
40 |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
41 @classmethod |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
42 def post(cls, **kws): |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
43 ev = pygame.event.Event(USEREVENT, utype=cls.utype, **kws) |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
44 pygame.event.post(ev) |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
45 |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
46 @classmethod |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
47 def matches(cls, ev): |
f5846a46e9c5
Add base class for user events.
Simon Cross <hodgestar@gmail.com>
parents:
12
diff
changeset
|
48 return ev.type is USEREVENT and ev.utype == cls.utype |