# HG changeset patch # User Jeremy Thurgood # Date 1378392205 -7200 # Node ID 248b8fdb160ce062fb1e2e52331172f820c7a947 # Parent ef4f6375c0b5c56c28c734eb7541f39e8f18edff Collect gun (which currently looks like a bullet) to shoot. diff -r ef4f6375c0b5 -r 248b8fdb160c data/levels/level1 --- a/data/levels/level1 Thu Sep 05 16:34:17 2013 +0200 +++ b/data/levels/level1 Thu Sep 05 16:43:25 2013 +0200 @@ -17,6 +17,9 @@ classname: ToggleSwitch name: door_switch - args: + - [300, 600] + classname: Gun +- args: - [300, 500] - light_switch classname: FloorLight diff -r ef4f6375c0b5 -r 248b8fdb160c nagslang/game_object.py --- a/nagslang/game_object.py Thu Sep 05 16:34:17 2013 +0200 +++ b/nagslang/game_object.py Thu Sep 05 16:43:25 2013 +0200 @@ -334,10 +334,41 @@ class Bullet(GameObject): def __init__(self, space, position, impulse): body = make_body(1, pymunk.inf, position) - self.shape = pymunk.Circle(body, 1) + self.shape = pymunk.Circle(body, 2) 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) + + +class CollectibleGameObject(GameObject): + zorder = ZORDER_LOW + + def __init__(self, space, name, shape, renderer): + self._name = name + shape.sensor = True + super(CollectibleGameObject, self).__init__( + SingleShapePhysicser(space, shape), + renderer, + interactible=environment.Interactible( + environment.Action( + self._collect, environment.HumanFormCondition())), + ) + + def _collect(self, protagonist): + protagonist.inventory[self._name] = self + # TODO: Make this less hacky. + self.physicser.remove_from_space() + self.renderer = render.NullRenderer() + + +class Gun(CollectibleGameObject): + def __init__(self, space, position): + body = make_body(None, None, position) + self.shape = pymunk.Circle(body, 20) + super(Gun, self).__init__( + space, 'gun', self.shape, + render.ImageRenderer(resources.get_image('objects', 'bullet.png')), + ) diff -r ef4f6375c0b5 -r 248b8fdb160c nagslang/protagonist.py --- a/nagslang/protagonist.py Thu Sep 05 16:34:17 2013 +0200 +++ b/nagslang/protagonist.py Thu Sep 05 16:43:25 2013 +0200 @@ -253,11 +253,16 @@ if self.in_wolf_form(): pass else: - vec = Vec2d.unit() - vec.angle = self.angle - vec.length = 100 - FireEvent.post(self.physicser.position, vec) - print "Biff", self.physicser.position, vec + self.shoot() + + def shoot(self): + if not self.has_item('gun'): + return + 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 ef4f6375c0b5 -r 248b8fdb160c nagslang/render.py --- a/nagslang/render.py Thu Sep 05 16:34:17 2013 +0200 +++ b/nagslang/render.py Thu Sep 05 16:43:25 2013 +0200 @@ -38,6 +38,11 @@ pass +class NullRenderer(Renderer): + def render(self, surface): + pass + + def image_pos(image, pos): return (pos[0] - image.get_width() / 2, pos[1] - image.get_height() / 2)