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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
1 """Game engine and top-level game loop."""
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
2
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
3 import pygame.event
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
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
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
6
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
7
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
8 class Engine(object):
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
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
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
14
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
15 def run(self):
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
16 """Game loop."""
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
17 get_events = pygame.event.get
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
18 flip = pygame.display.flip
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
19 while True:
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
20 events = get_events()
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
21 for ev in events:
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
22 if ev.type is QUIT:
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
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
0196455fa432 Minimal event loop.
Simon Cross <hodgestar@gmail.com>
parents: 6
diff changeset
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