Mercurial > nagslang
comparison nagslang/protagonist.py @ 333:3dd32686dbc3
Better wolf claw attack.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Fri, 06 Sep 2013 10:49:19 +0200 |
parents | 768e1d06155f |
children | a3f1b2f0e3fb |
comparison
equal
deleted
inserted
replaced
332:ffefb93127c5 | 333:3dd32686dbc3 |
---|---|
4 | 4 |
5 from nagslang import render | 5 from nagslang import render |
6 from nagslang.constants import ( | 6 from nagslang.constants import ( |
7 COLLISION_TYPE_PLAYER, ZORDER_MID, WEREWOLF_SOAK_FACTOR, | 7 COLLISION_TYPE_PLAYER, ZORDER_MID, WEREWOLF_SOAK_FACTOR, |
8 PROTAGONIST_HEALTH_MIN_LEVEL, PROTAGONIST_HEALTH_MAX_LEVEL, | 8 PROTAGONIST_HEALTH_MIN_LEVEL, PROTAGONIST_HEALTH_MAX_LEVEL, |
9 NON_GAME_OBJECT_COLLIDERS, COLLISION_TYPE_WEREWOLF_ATTACK) | 9 NON_GAME_OBJECT_COLLIDERS, BULLET_DAMAGE, CLAW_DAMAGE) |
10 from nagslang.events import FireEvent, ClawEvent | 10 from nagslang.events import FireEvent, ClawEvent |
11 from nagslang.game_object import GameObject, Physicser, make_body | 11 from nagslang.game_object import GameObject, Physicser, make_body |
12 from nagslang.mutators import FLIP_H | 12 from nagslang.mutators import FLIP_H |
13 from nagslang.resources import resources | 13 from nagslang.resources import resources |
14 from nagslang.events import ScreenChange | 14 from nagslang.events import ScreenChange |
57 self.zorder = ZORDER_MID | 57 self.zorder = ZORDER_MID |
58 | 58 |
59 self.health_level = 100 | 59 self.health_level = 100 |
60 | 60 |
61 self.go_human() | 61 self.go_human() |
62 self._time = 0 | |
63 | 62 |
64 def _make_physics(self, space, position): | 63 def _make_physics(self, space, position): |
65 body = make_body(10, pymunk.inf, position, 0.8) | 64 body = make_body(10, pymunk.inf, position, 0.8) |
66 body.velocity_limit = 1000 | 65 body.velocity_limit = 1000 |
67 | 66 |
260 if not self.has_item('gun'): | 259 if not self.has_item('gun'): |
261 return | 260 return |
262 vec = Vec2d.unit() | 261 vec = Vec2d.unit() |
263 vec.angle = self.angle | 262 vec.angle = self.angle |
264 vec.length = 1000 | 263 vec.length = 1000 |
265 FireEvent.post(self.physicser.position, vec, 10, COLLISION_TYPE_PLAYER) | 264 FireEvent.post( |
265 self.physicser.position, vec, BULLET_DAMAGE, COLLISION_TYPE_PLAYER) | |
266 | 266 |
267 def claw(self): | 267 def claw(self): |
268 vec = Vec2d.unit() | 268 vec = Vec2d.unit() |
269 vec.angle = self.angle | 269 vec.angle = self.angle |
270 vec.length = 100 | 270 vec.length = 30 |
271 ClawEvent.post(self.physicser.position, vec, | 271 ClawEvent.post(self.physicser.position, vec, CLAW_DAMAGE) |
272 COLLISION_TYPE_WEREWOLF_ATTACK) | |
273 print "Claw", self.physicser.position, vec | |
274 | 272 |
275 def in_wolf_form(self): | 273 def in_wolf_form(self): |
276 return self.form == self.WOLF_FORM | 274 return self.form == self.WOLF_FORM |
277 | 275 |
278 def in_human_form(self): | 276 def in_human_form(self): |
308 self.health_level += amount | 306 self.health_level += amount |
309 if self.health_level > PROTAGONIST_HEALTH_MAX_LEVEL: | 307 if self.health_level > PROTAGONIST_HEALTH_MAX_LEVEL: |
310 self.health_level = PROTAGONIST_HEALTH_MAX_LEVEL | 308 self.health_level = PROTAGONIST_HEALTH_MAX_LEVEL |
311 | 309 |
312 def update(self, dt): | 310 def update(self, dt): |
313 last_secs = int(self._time) | 311 if int(self.lifetime + dt) > int(self.lifetime): |
314 self._time += dt | 312 if self.form == self.WOLF_FORM: |
315 secs = int(self._time) | 313 self.gain_health(1) |
316 if self.form == self.WOLF_FORM and secs > last_secs: | |
317 self.gain_health(1) | |
318 super(Protagonist, self).update(dt) | 314 super(Protagonist, self).update(dt) |