view nagslang/collectable.py @ 385:51deb78cae52

Use a result object to get new drawables back to the area
author Stefano Rivera <stefano@rivera.za.net>
date Fri, 06 Sep 2013 23:58:15 +0200
parents 8069c9be1c3e
children 811481b20689
line wrap: on
line source

import pymunk

from nagslang import environment
from nagslang import render
from nagslang.constants import ZORDER_LOW
from nagslang.game_object import (GameObject, SingleShapePhysicser, Result,
                                  make_body)
from nagslang.resources import resources


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())),
        )

    def _collect(self, protagonist):
        protagonist.add_item(self._name)
        self.physicser.remove_from_space()
        self.collected = True

    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')),
        )


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")]