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