Mercurial > nagslang
view nagslang/collectable.py @ 601:19adab18ee7d
Add Gun to crew quarters.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 07 Sep 2013 23:49:06 +0200 |
parents | d64c416b2d1c |
children |
line wrap: on
line source
import pymunk from nagslang import environment from nagslang import render from nagslang.constants import ZORDER_LOW from nagslang.events import AddDrawableEvent from nagslang.game_object import ( GameObject, SingleShapePhysicser, Result, make_body, EphemeralNote) from nagslang.resources import resources def get_editable_game_objects(): classes = [] for cls_name, cls in globals().iteritems(): if isinstance(cls, type) and hasattr(cls, 'requires'): classes.append((cls_name, cls)) return classes class CollectibleGameObject(GameObject): zorder = ZORDER_LOW def __init__(self, space, name, shape, renderer): self._name = name self.collected = False shape.sensor = True super(CollectibleGameObject, self).__init__( SingleShapePhysicser(space, shape), renderer, interactible=environment.Interactible( environment.Action( self._collect, environment.HumanFormCondition()), environment.Action(self._object)), ) def _collect(self, protagonist): protagonist.add_item(self._name) self.physicser.remove_from_space() self.collected = True def _object(self, protagonist): AddDrawableEvent.post(EphemeralNote( "You can't get a grip on it, but you have no pockets in this form" " anyway.", 3)) def update(self, dt): if self.collected: return Result(remove=[self]) 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')), ) @classmethod def requires(cls): return [("name", "string"), ("position", "coordinates")] 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")]