Mercurial > nagslang
diff nagslang/collectable.py @ 378:8069c9be1c3e
Create a nagslang.collectable module for collectables
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Fri, 06 Sep 2013 23:07:27 +0200 |
parents | |
children | 51deb78cae52 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nagslang/collectable.py Fri Sep 06 23:07:27 2013 +0200 @@ -0,0 +1,54 @@ +import pymunk + +from nagslang import environment +from nagslang import render +from nagslang.constants import ZORDER_LOW +from nagslang.game_object import GameObject, SingleShapePhysicser, make_body +from nagslang.resources import resources + + +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.add_item(self._name) + # 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', 'gun.png')), + ) + + +class KeyCard(CollectibleGameObject): + def __init__(self, space, position, name): + body = make_body(None, None, position) + self.shape = pymunk.Circle(body, 20) + super(KeyCard, self).__init__( + space, name, self.shape, + render.ImageRenderer( + resources.get_image('objects', '%s.png' % (name,))), + ) + + @classmethod + def requires(cls): + return [("name", "string"), ("position", "coordinates"), + ("item_name", "string")]