changeset 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 4eb7f5dffa59
children e2cebabf87e8
files data/levels/level1 data/levels/level2 nagslang/collectable.py nagslang/game_object.py nagslang/level.py
diffstat 5 files changed, 58 insertions(+), 49 deletions(-) [+]
line wrap: on
line diff
--- a/data/levels/level1	Fri Sep 06 23:03:28 2013 +0200
+++ b/data/levels/level1	Fri Sep 06 23:07:27 2013 +0200
@@ -18,7 +18,7 @@
   name: door_switch
 - args:
   - [300, 600]
-  classname: Gun
+  classname: collectable.Gun
 - args:
   - [300, 500]
   - light_switch
--- a/data/levels/level2	Fri Sep 06 23:03:28 2013 +0200
+++ b/data/levels/level2	Fri Sep 06 23:07:27 2013 +0200
@@ -39,7 +39,7 @@
 - args:
   - [400, 200]
   - keycard_red
-  classname: KeyCard
+  classname: collectable.KeyCard
   name: keycard_red
 lines: []
 polygons:
--- /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")]
--- a/nagslang/game_object.py	Fri Sep 06 23:03:28 2013 +0200
+++ b/nagslang/game_object.py	Fri Sep 06 23:07:27 2013 +0200
@@ -486,37 +486,6 @@
             break
 
 
-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 ClawAttack(GameObject):
     def __init__(self, space, pos, vector, damage):
         body = make_body(1, pymunk.inf,
@@ -598,19 +567,3 @@
 
     def apply_effect(self, protagonist):
         protagonist.force_wolf_form()
-
-
-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")]
--- a/nagslang/level.py	Fri Sep 06 23:03:28 2013 +0200
+++ b/nagslang/level.py	Fri Sep 06 23:07:27 2013 +0200
@@ -1,6 +1,7 @@
 import pygame
 import pygame.locals as pgl
 
+from nagslang import collectable
 from nagslang import game_object as go
 from nagslang import enemies
 from nagslang import puzzle
@@ -82,6 +83,7 @@
 
     def _create_game_object(self, space, classname, args, name=None):
         modules = {
+            'collectable': collectable,
             'game_object': go,
             'puzzle': puzzle,
         }