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