Mercurial > nagslang
annotate nagslang/protagonist.py @ 313:768e1d06155f
PEP8
author | David Sharpe |
---|---|
date | Fri, 06 Sep 2013 00:45:52 +0200 |
parents | 72aca01c87ed |
children | 3dd32686dbc3 |
rev | line source |
---|---|
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
1 import pymunk |
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
2 import pymunk.pygame_util |
229
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
3 from pymunk.vec2d import Vec2d |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
4 |
207 | 5 from nagslang import render |
281
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
6 from nagslang.constants import ( |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
7 COLLISION_TYPE_PLAYER, ZORDER_MID, WEREWOLF_SOAK_FACTOR, |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
8 PROTAGONIST_HEALTH_MIN_LEVEL, PROTAGONIST_HEALTH_MAX_LEVEL, |
312
72aca01c87ed
Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents:
309
diff
changeset
|
9 NON_GAME_OBJECT_COLLIDERS, COLLISION_TYPE_WEREWOLF_ATTACK) |
313 | 10 from nagslang.events import FireEvent, ClawEvent |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
11 from nagslang.game_object import GameObject, Physicser, make_body |
76 | 12 from nagslang.mutators import FLIP_H |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
13 from nagslang.resources import resources |
285 | 14 from nagslang.events import ScreenChange |
28
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
15 |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
16 |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
17 class ProtagonistPhysicser(Physicser): |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
18 def __init__(self, space, form_shapes): |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
19 self._space = space |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
20 self._form_shapes = form_shapes |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
21 |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
22 def switch_form(self, old_form, new_form): |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
23 self._space.remove(self._form_shapes[old_form]) |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
24 shape = self._form_shapes[new_form] |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
25 self._space.add(shape) |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
26 for attr, value in shape.protagonist_body_props.iteritems(): |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
27 setattr(shape.body, attr, value) |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
28 |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
29 def get_shape(self): |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
30 return self._form_shapes[self.game_object.form] |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
31 |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
32 |
218
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
33 class ProtagonistFormSelectionRenderer(render.RendererSelectionRenderer): |
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
34 def select_renderer(self): |
229
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
35 return self.game_object.form |
218
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
36 |
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
37 |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
38 class Protagonist(GameObject): |
28
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
39 """Representation of our fearless protagonist. |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
40 |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
41 TODO: Factor out a bunch of this stuff when we need it for other objects. |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
42 """ |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
43 |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
44 HUMAN_FORM = 'human' |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
45 WOLF_FORM = 'wolf' |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
46 |
277
56e42c00da25
Protagonist and enemies should see the world
Neil Muller <drnlmuller@gmail.com>
parents:
276
diff
changeset
|
47 def __init__(self, space, world, position): |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
48 physicser = self._make_physics(space, position) |
218
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
49 renderer = self._make_renderer() |
28
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
50 self.inventory = {} |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
51 self.form = self.HUMAN_FORM |
218
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
52 self.angle = 0 |
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
53 self.is_moving = False |
277
56e42c00da25
Protagonist and enemies should see the world
Neil Muller <drnlmuller@gmail.com>
parents:
276
diff
changeset
|
54 self.world = world |
28
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
55 |
218
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
56 super(Protagonist, self).__init__(physicser, renderer) |
107 | 57 self.zorder = ZORDER_MID |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
58 |
246 | 59 self.health_level = 100 |
60 | |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
61 self.go_human() |
309
2b0494b3ce6a
Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents:
305
diff
changeset
|
62 self._time = 0 |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
63 |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
64 def _make_physics(self, space, position): |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
65 body = make_body(10, pymunk.inf, position, 0.8) |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
66 body.velocity_limit = 1000 |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
67 |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
68 human = pymunk.Poly(body, [(-15, -30), (15, -30), (15, 30), (-15, 30)]) |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
69 human.elasticity = 1.0 |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
70 human.collision_type = COLLISION_TYPE_PLAYER |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
71 human.protagonist_body_props = { |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
72 'mass': 10, |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
73 'damping': 0.8, |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
81
diff
changeset
|
74 } |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
75 |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
76 wolf = pymunk.Circle(body, 30) |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
77 wolf.elasticity = 1.0 |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
78 wolf.collision_type = COLLISION_TYPE_PLAYER |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
79 wolf.protagonist_body_props = { |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
80 'mass': 100, |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
81 'damping': 0.9, |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
82 } |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
83 |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
84 return ProtagonistPhysicser(space, { |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
85 self.HUMAN_FORM: human, |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
86 self.WOLF_FORM: wolf, |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
87 }) |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
88 |
66 | 89 def _get_image(self, name, *transforms): |
90 return resources.get_image('creatures', name, transforms=transforms) | |
91 | |
276
3153196517fc
Move protagonist to the world
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
92 def change_space(self, new_space): |
3153196517fc
Move protagonist to the world
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
93 self.physicser.remove_from_space() |
3153196517fc
Move protagonist to the world
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
94 self.physicser.set_space(new_space) |
3153196517fc
Move protagonist to the world
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
95 self.physicser.add_to_space() |
3153196517fc
Move protagonist to the world
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
96 |
285 | 97 def reset(self): |
98 self.health_level = 100 | |
99 self.is_moving = False | |
100 | |
101 self.go_human() | |
102 | |
218
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
103 def _make_renderer(self): |
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
104 return ProtagonistFormSelectionRenderer({ |
217
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
215
diff
changeset
|
105 self.HUMAN_FORM: render.FacingSelectionRenderer( |
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
215
diff
changeset
|
106 { |
229
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
107 'N': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
108 [self._get_image('human_N_1.png'), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
109 self._get_image('human_N_2.png')], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
110 'S': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
111 [self._get_image('human_S_1.png'), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
112 self._get_image('human_S_2.png')], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
113 'W': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
114 [self._get_image('human_W_1.png'), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
115 self._get_image('human_W_2.png')], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
116 'E': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
117 [self._get_image('human_W_1.png', FLIP_H), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
118 self._get_image('human_W_2.png', FLIP_H)], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
119 'NW': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
120 [self._get_image('human_NW_1.png'), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
121 self._get_image('human_NW_2.png')], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
122 'NE': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
123 [self._get_image('human_NW_1.png', FLIP_H), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
124 self._get_image('human_NW_2.png', FLIP_H)], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
125 'SW': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
126 [self._get_image('human_SW_1.png'), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
127 self._get_image('human_SW_2.png')], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
128 'SE': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
129 [self._get_image('human_SW_1.png', FLIP_H), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
130 self._get_image('human_SW_2.png', FLIP_H)], 3), |
217
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
215
diff
changeset
|
131 }), |
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
215
diff
changeset
|
132 self.WOLF_FORM: render.FacingSelectionRenderer( |
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
215
diff
changeset
|
133 { |
229
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
134 'N': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
135 [self._get_image('werewolf_N_1.png'), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
136 self._get_image('werewolf_N_2.png')], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
137 'S': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
138 [self._get_image('werewolf_S_1.png'), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
139 self._get_image('werewolf_S_2.png')], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
140 'W': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
141 [self._get_image('werewolf_W_1.png'), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
142 self._get_image('werewolf_W_2.png')], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
143 'E': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
144 [self._get_image('werewolf_W_1.png', FLIP_H), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
145 self._get_image('werewolf_W_2.png', FLIP_H)], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
146 'NW': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
147 [self._get_image('werewolf_NW_1.png'), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
148 self._get_image('werewolf_NW_2.png')], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
149 'NE': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
150 [self._get_image('werewolf_NW_1.png', FLIP_H), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
151 self._get_image('werewolf_NW_2.png', FLIP_H)], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
152 'SW': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
153 [self._get_image('werewolf_SW_1.png'), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
154 self._get_image('werewolf_SW_2.png')], 3), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
155 'SE': render.MovementAnimatedRenderer( |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
156 [self._get_image('werewolf_SW_1.png', FLIP_H), |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
157 self._get_image('werewolf_SW_2.png', FLIP_H)], 3), |
217
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
215
diff
changeset
|
158 }), |
218
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
159 }) |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
160 |
28
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
161 @classmethod |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
162 def from_saved_state(cls, saved_state): |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
163 """Create an instance from the provided serialised state. |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
164 """ |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
165 obj = cls() |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
166 # TODO: Update from saved state. |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
167 return obj |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
168 |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
81
diff
changeset
|
169 def get_render_angle(self): |
229
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
170 # No image rotation when rendering, please. |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
171 return 0 |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
172 |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
173 def get_facing_direction(self): |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
174 # It's easier to work with a vector than an angle here. |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
175 vec = Vec2d.unit() |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
176 vec.angle = self.angle |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
177 # We probably don't have exactly -1, 0, or 1 here. |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
178 x = int(round(vec.x)) |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
179 y = int(round(vec.y)) |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
180 |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
181 return { |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
182 (0, 1): 'N', |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
183 (0, -1): 'S', |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
184 (-1, 0): 'W', |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
185 (1, 0): 'E', |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
186 (1, 1): 'NE', |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
187 (1, -1): 'SE', |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
188 (-1, 1): 'NW', |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
189 (-1, -1): 'SW', |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
190 }[(x, y)] |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
81
diff
changeset
|
191 |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
192 def go_werewolf(self): |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
193 self.physicser.switch_form(self.form, self.WOLF_FORM) |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
194 self.form = self.WOLF_FORM |
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
195 self.impulse_factor = 4000 |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
196 |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
197 def go_human(self): |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
198 self.physicser.switch_form(self.form, self.HUMAN_FORM) |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
199 self.form = self.HUMAN_FORM |
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
200 self.impulse_factor = 500 |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
201 |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
202 def set_direction(self, dx, dy): |
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
203 if (dx, dy) == (0, 0): |
218
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
204 self.is_moving = False |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
205 return |
218
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
206 self.is_moving = True |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
81
diff
changeset
|
207 self.angle = pymunk.Vec2d((dx, dy)).angle |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
208 self.physicser.apply_impulse( |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
209 (dx * self.impulse_factor, dy * self.impulse_factor)) |
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
210 |
179
1ee8756888e4
Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents:
156
diff
changeset
|
211 def set_position(self, position): |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
212 self.physicser.position = position |
179
1ee8756888e4
Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents:
156
diff
changeset
|
213 |
1ee8756888e4
Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents:
156
diff
changeset
|
214 def copy_state(self, old_protagonist): |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
215 self.physicser.position = old_protagonist.physicser.position |
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
216 self.physicser.switch_form(self.form, old_protagonist.form) |
217
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
215
diff
changeset
|
217 self.impulse_factor = old_protagonist.impulse_factor |
179
1ee8756888e4
Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents:
156
diff
changeset
|
218 self.form = old_protagonist.form |
1ee8756888e4
Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents:
156
diff
changeset
|
219 self.angle = old_protagonist.angle |
1ee8756888e4
Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents:
156
diff
changeset
|
220 self.inventory = old_protagonist.inventory |
1ee8756888e4
Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents:
156
diff
changeset
|
221 |
65
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
222 def toggle_form(self): |
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
223 if self.form == self.WOLF_FORM: |
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
224 self.go_human() |
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
225 else: |
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
226 self.go_werewolf() |
a99ac95a2940
Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents:
28
diff
changeset
|
227 |
281
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
228 def get_current_interactible(self): |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
229 for shape in self.get_space().shape_query(self.get_shape()): |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
230 if shape.collision_type in NON_GAME_OBJECT_COLLIDERS: |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
231 # No game object here. |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
232 continue |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
233 interactible = shape.physicser.game_object.interactible |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
234 if interactible is not None: |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
235 return interactible |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
236 return None |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
237 |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
238 def perform_action(self): |
28
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
239 """Perform an action on the target. |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
240 """ |
281
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
241 interactible = self.get_current_interactible() |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
242 if interactible is None: |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
243 # Nothing to interact with. |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
244 return |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
245 action = interactible.select_action(self) |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
246 if action is None: |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
247 # Nothing to do with it. |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
248 return |
9b56e954c674
Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents:
277
diff
changeset
|
249 return action.perform(self) |
28
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
250 |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
251 def attack(self): |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
252 """Attempt to hurt something. |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
253 """ |
265 | 254 if self.in_wolf_form(): |
312
72aca01c87ed
Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents:
309
diff
changeset
|
255 self.claw() |
265 | 256 else: |
286
248b8fdb160c
Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents:
285
diff
changeset
|
257 self.shoot() |
248b8fdb160c
Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents:
285
diff
changeset
|
258 |
248b8fdb160c
Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents:
285
diff
changeset
|
259 def shoot(self): |
248b8fdb160c
Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents:
285
diff
changeset
|
260 if not self.has_item('gun'): |
248b8fdb160c
Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents:
285
diff
changeset
|
261 return |
248b8fdb160c
Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents:
285
diff
changeset
|
262 vec = Vec2d.unit() |
248b8fdb160c
Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents:
285
diff
changeset
|
263 vec.angle = self.angle |
291 | 264 vec.length = 1000 |
305 | 265 FireEvent.post(self.physicser.position, vec, 10, COLLISION_TYPE_PLAYER) |
28
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
266 |
312
72aca01c87ed
Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents:
309
diff
changeset
|
267 def claw(self): |
72aca01c87ed
Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents:
309
diff
changeset
|
268 vec = Vec2d.unit() |
72aca01c87ed
Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents:
309
diff
changeset
|
269 vec.angle = self.angle |
72aca01c87ed
Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents:
309
diff
changeset
|
270 vec.length = 100 |
72aca01c87ed
Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents:
309
diff
changeset
|
271 ClawEvent.post(self.physicser.position, vec, |
72aca01c87ed
Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents:
309
diff
changeset
|
272 COLLISION_TYPE_WEREWOLF_ATTACK) |
72aca01c87ed
Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents:
309
diff
changeset
|
273 print "Claw", self.physicser.position, vec |
72aca01c87ed
Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents:
309
diff
changeset
|
274 |
28
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
275 def in_wolf_form(self): |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
276 return self.form == self.WOLF_FORM |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
277 |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
278 def in_human_form(self): |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
279 return self.form == self.HUMAN_FORM |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
280 |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
281 def has_item(self, item): |
c03982fe3c70
Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
282 return item in self.inventory |
73
e118458a4e9c
Added environmental motion effects to protagonist.
davidsharpe@185.4.16.172.in-addr.arpa
parents:
66
diff
changeset
|
283 |
e118458a4e9c
Added environmental motion effects to protagonist.
davidsharpe@185.4.16.172.in-addr.arpa
parents:
66
diff
changeset
|
284 def environmental_movement(self, dx, dy): |
e118458a4e9c
Added environmental motion effects to protagonist.
davidsharpe@185.4.16.172.in-addr.arpa
parents:
66
diff
changeset
|
285 if (dx, dy) == (0, 0): |
e118458a4e9c
Added environmental motion effects to protagonist.
davidsharpe@185.4.16.172.in-addr.arpa
parents:
66
diff
changeset
|
286 return |
215
325c317cbfa1
Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
287 self.physicser.apply_impulse((dx, dy)) |
246 | 288 |
289 def get_health_level(self): | |
249 | 290 """Return current health level |
291 """ | |
246 | 292 return self.health_level |
293 | |
285 | 294 def die(self): |
295 # Handle player death - may be called due to other reasons | |
296 # than zero health | |
297 ScreenChange.post('dead') | |
298 | |
246 | 299 def lose_health(self, amount): |
300 if self.in_human_form(): | |
301 self.health_level -= amount | |
302 else: | |
303 self.health_level -= amount / WEREWOLF_SOAK_FACTOR | |
285 | 304 if self.health_level <= PROTAGONIST_HEALTH_MIN_LEVEL: |
305 self.die() | |
246 | 306 |
307 def gain_health(self, amount): | |
308 self.health_level += amount | |
309 if self.health_level > PROTAGONIST_HEALTH_MAX_LEVEL: | |
248 | 310 self.health_level = PROTAGONIST_HEALTH_MAX_LEVEL |
309
2b0494b3ce6a
Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents:
305
diff
changeset
|
311 |
2b0494b3ce6a
Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents:
305
diff
changeset
|
312 def update(self, dt): |
2b0494b3ce6a
Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents:
305
diff
changeset
|
313 last_secs = int(self._time) |
2b0494b3ce6a
Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents:
305
diff
changeset
|
314 self._time += dt |
2b0494b3ce6a
Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents:
305
diff
changeset
|
315 secs = int(self._time) |
2b0494b3ce6a
Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents:
305
diff
changeset
|
316 if self.form == self.WOLF_FORM and secs > last_secs: |
2b0494b3ce6a
Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents:
305
diff
changeset
|
317 self.gain_health(1) |
2b0494b3ce6a
Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents:
305
diff
changeset
|
318 super(Protagonist, self).update(dt) |