Mercurial > nagslang
changeset 286:248b8fdb160c
Collect gun (which currently looks like a bullet) to shoot.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Thu, 05 Sep 2013 16:43:25 +0200 |
parents | ef4f6375c0b5 |
children | d7ab2594f8d2 |
files | data/levels/level1 nagslang/game_object.py nagslang/protagonist.py nagslang/render.py |
diffstat | 4 files changed, 50 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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')), + )
--- 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
--- 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)