annotate nagslang/protagonist.py @ 313:768e1d06155f

PEP8
author David Sharpe
date Fri, 06 Sep 2013 00:45:52 +0200
parents 72aca01c87ed
children 3dd32686dbc3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents: 200
diff changeset
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
David Sharpe
parents: 312
diff changeset
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
Stefano Rivera <stefano@rivera.za.net>
parents: 73
diff changeset
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
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
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
b90d01e4d9d4 Layered drawing.
Jeremy Thurgood <firxen@gmail.com>
parents: 104
diff changeset
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
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
59 self.health_level = 100
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
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
8bf0459ebc56 Clean up a few things.
Jeremy Thurgood <firxen@gmail.com>
parents: 65
diff changeset
89 def _get_image(self, name, *transforms):
8bf0459ebc56 Clean up a few things.
Jeremy Thurgood <firxen@gmail.com>
parents: 65
diff changeset
90 return resources.get_image('creatures', name, transforms=transforms)
8bf0459ebc56 Clean up a few things.
Jeremy Thurgood <firxen@gmail.com>
parents: 65
diff changeset
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
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
97 def reset(self):
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
98 self.health_level = 100
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
99 self.is_moving = False
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
100
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
101 self.go_human()
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
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
8a695b8ecd6c Correcting damage application
David Sharpe
parents: 261
diff changeset
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
8a695b8ecd6c Correcting damage application
David Sharpe
parents: 261
diff changeset
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
c0e563fdfd90 Faster bullet
Stefano Rivera <stefano@rivera.za.net>
parents: 286
diff changeset
264 vec.length = 1000
305
ce11e1cae0ed Enemies now die
Stefano Rivera <stefano@rivera.za.net>
parents: 293
diff changeset
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
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
288
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
289 def get_health_level(self):
249
David Sharpe
parents: 248
diff changeset
290 """Return current health level
David Sharpe
parents: 248
diff changeset
291 """
246
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
292 return self.health_level
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
293
285
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
294 def die(self):
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
295 # Handle player death - may be called due to other reasons
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
296 # than zero health
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
297 ScreenChange.post('dead')
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
298
246
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
299 def lose_health(self, amount):
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
300 if self.in_human_form():
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
301 self.health_level -= amount
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
302 else:
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
303 self.health_level -= amount / WEREWOLF_SOAK_FACTOR
285
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
304 if self.health_level <= PROTAGONIST_HEALTH_MIN_LEVEL:
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
305 self.die()
246
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
306
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
307 def gain_health(self, amount):
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
308 self.health_level += amount
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
309 if self.health_level > PROTAGONIST_HEALTH_MAX_LEVEL:
248
b86a88ed87a1 More pep8
David Sharpe
parents: 246
diff changeset
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)