Mercurial > nagslang
comparison nagslang/game_object.py @ 59:b412704a6737
Start of game object stuff.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sun, 01 Sep 2013 18:48:55 +0200 |
parents | |
children | 34a87ec12124 |
comparison
equal
deleted
inserted
replaced
58:cee0b845dedc | 59:b412704a6737 |
---|---|
1 | |
2 class Physicser(object): | |
3 def add_to_space(self, space): | |
4 raise NotImplementedError() | |
5 | |
6 def remove_from_space(self, space): | |
7 raise NotImplementedError() | |
8 | |
9 def render_position(self): | |
10 raise NotImplementedError() | |
11 | |
12 | |
13 class NullPhysicser(Physicser): | |
14 def add_to_space(self, space): | |
15 pass | |
16 | |
17 def remove_from_space(self, space): | |
18 pass | |
19 | |
20 def render_position(self): | |
21 return (0, 0) | |
22 | |
23 | |
24 class SingleShapePhysicser(Physicser): | |
25 def __init__(self, shape): | |
26 self._shape = shape | |
27 | |
28 def add_to_space(self, space): | |
29 space.add(self._shape, self._shape.body) | |
30 | |
31 def remove_from_space(self, space): | |
32 space.remove(self._shape, self._shape.body) | |
33 | |
34 def render_position(self, surface): | |
35 pos = self._shape.body.position | |
36 import pymunk.pygame_util | |
37 return pymunk.pygame_util.to_pygame(pos, surface) | |
38 return (int(pos.x), int(pos.y)) | |
39 | |
40 | |
41 class Renderer(object): | |
42 def render(self, surface, pos): | |
43 raise NotImplementedError() | |
44 | |
45 | |
46 class ImageRenderer(Renderer): | |
47 def __init__(self, image): | |
48 self._image = image | |
49 | |
50 def render(self, surface, pos): | |
51 surface.blit(self._image, pos) | |
52 | |
53 | |
54 class ShapeRenderer(Renderer): | |
55 def __init__(self, shape): | |
56 self._shape = shape | |
57 | |
58 def render(self, surface, pos): | |
59 import pymunk.pygame_util | |
60 pymunk.pygame_util.draw(surface, self._shape) | |
61 | |
62 | |
63 class GameObject(object): | |
64 """A representation of a thing in the game world. | |
65 | |
66 This has a rendery thing, physicsy things and maybe some other things. | |
67 """ | |
68 | |
69 def __init__(self, renderer, physicser=None): | |
70 self.renderer = renderer | |
71 if physicser is None: | |
72 physicser = NullPhysicser() | |
73 self.physicser = physicser | |
74 | |
75 def add_to_space(self, space): | |
76 self.physicser.add_to_space(space) | |
77 | |
78 def render(self, surface): | |
79 return self.renderer.render(surface, self.physicser.render_position(surface)) |