# HG changeset patch # User Stefano Rivera # Date 1378334190 -7200 # Node ID db7c8e74efb427c0bb264b98c88fb2a6feeb176c # Parent e723b313c9582174b8f30cdaf058639b85578d2d (really rubbish) bullets diff -r e723b313c958 -r db7c8e74efb4 data/images/objects/bullet.png Binary file data/images/objects/bullet.png has changed diff -r e723b313c958 -r db7c8e74efb4 nagslang/constants.py --- a/nagslang/constants.py Thu Sep 05 00:32:56 2013 +0200 +++ b/nagslang/constants.py Thu Sep 05 00:36:30 2013 +0200 @@ -15,6 +15,7 @@ COLLISION_TYPE_BOX = 4 COLLISION_TYPE_ENEMY = 5 COLLISION_TYPE_DOOR = 6 +COLLISION_TYPE_PROJECTILE = 7 SWITCH_PUSHERS = [COLLISION_TYPE_PLAYER, COLLISION_TYPE_BOX] diff -r e723b313c958 -r db7c8e74efb4 nagslang/events.py --- a/nagslang/events.py Thu Sep 05 00:32:56 2013 +0200 +++ b/nagslang/events.py Thu Sep 05 00:36:30 2013 +0200 @@ -44,3 +44,9 @@ @classmethod def post(cls, destination, dest_pos): super(DoorEvent, cls).post(destination=destination, dest_pos=dest_pos) + + +class FireEvent(UserEvent): + @classmethod + def post(cls, source, impulse): + super(FireEvent, cls).post(source=source, impulse=impulse) diff -r e723b313c958 -r db7c8e74efb4 nagslang/game_object.py --- a/nagslang/game_object.py Thu Sep 05 00:32:56 2013 +0200 +++ b/nagslang/game_object.py Thu Sep 05 00:36:30 2013 +0200 @@ -5,7 +5,7 @@ from nagslang import render from nagslang.constants import ( SWITCH_PUSHERS, COLLISION_TYPE_SWITCH, COLLISION_TYPE_BOX, ZORDER_LOW, - ZORDER_FLOOR, COLLISION_TYPE_DOOR) + ZORDER_FLOOR, COLLISION_TYPE_DOOR, COLLISION_TYPE_PROJECTILE) from nagslang.resources import resources from nagslang.events import DoorEvent @@ -292,3 +292,15 @@ def requires(cls): return [("name", "string"), ("end1", "coordinates"), ("end2", "coordinates"), ("key_state", "puzzler")] + + +class Bullet(GameObject): + def __init__(self, space, position, impulse): + body = make_body(1, pymunk.inf, position) + self.shape = pymunk.Circle(body, 1) + self.shape.collision_type = COLLISION_TYPE_PROJECTILE + super(Bullet, self).__init__( + SingleShapePhysicser(space, self.shape), + render.ImageRenderer(resources.get_image('objects', 'bullet.png')), + ) + self.physicser.apply_impulse(impulse) diff -r e723b313c958 -r db7c8e74efb4 nagslang/protagonist.py --- a/nagslang/protagonist.py Thu Sep 05 00:32:56 2013 +0200 +++ b/nagslang/protagonist.py Thu Sep 05 00:36:30 2013 +0200 @@ -6,6 +6,7 @@ from nagslang.constants import COLLISION_TYPE_PLAYER, ZORDER_MID, \ WEREWOLF_SOAK_FACTOR, PROTAGONIST_HEALTH_MIN_LEVEL, \ PROTAGONIST_HEALTH_MAX_LEVEL +from nagslang.events import FireEvent from nagslang.game_object import GameObject, Physicser, make_body from nagslang.mutators import FLIP_H from nagslang.resources import resources @@ -218,7 +219,11 @@ def attack(self): """Attempt to hurt something. """ - pass + vec = Vec2d.unit() + vec.angle = self.angle + vec.length = 100 + FireEvent.post(self.physicser.position, vec) + print "Biff", self.physicser.position, vec def in_wolf_form(self): return self.form == self.WOLF_FORM diff -r e723b313c958 -r db7c8e74efb4 nagslang/screens/area.py --- a/nagslang/screens/area.py Thu Sep 05 00:32:56 2013 +0200 +++ b/nagslang/screens/area.py Thu Sep 05 00:36:30 2013 +0200 @@ -6,10 +6,11 @@ from nagslang.constants import COLLISION_TYPE_PLAYER, CALLBACK_COLLIDERS, \ COLLISION_TYPE_ENEMY -from nagslang.events import ScreenChange, DoorEvent +from nagslang.events import ScreenChange, DoorEvent, FireEvent from nagslang.level import Level from nagslang.protagonist import Protagonist from nagslang.screens.base import Screen +from nagslang.game_object import Bullet class ControlKeys(object): @@ -130,6 +131,9 @@ if ev.key == pygame.locals.K_c: self.protagonist.toggle_form() self.world.transformations += 1 + if ev.key == pygame.locals.K_SPACE: + self.world.attacks += 1 + self.protagonist.attack() elif DoorEvent.matches(ev): self.protagonist.set_position(ev.dest_pos) if ev.destination != self.name: @@ -140,6 +144,9 @@ return # else we're teleporting within the screen, and just the # position change is enough + elif FireEvent.matches(ev): + bullet = Bullet(self.space, ev.source, ev.impulse) + self._drawables.add(bullet) self.keys.handle_event(ev) def _calc_viewport(self, level_surface, display_surface): diff -r e723b313c958 -r db7c8e74efb4 nagslang/world.py --- a/nagslang/world.py Thu Sep 05 00:32:56 2013 +0200 +++ b/nagslang/world.py Thu Sep 05 00:36:30 2013 +0200 @@ -14,6 +14,7 @@ self.reset() def reset(self): + self.attacks = 0 self.transformations = 0 self.kills = 0 self.rooms = 0 diff -r e723b313c958 -r db7c8e74efb4 source/images/objects/bullet.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/source/images/objects/bullet.svg Thu Sep 05 00:36:30 2013 +0200 @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + +