changeset 286:248b8fdb160c

Collect gun (which currently looks like a bullet) to shoot.
author Jeremy Thurgood <firxen@gmail.com>
date Thu, 05 Sep 2013 16:43:25 +0200
parents ef4f6375c0b5
children d7ab2594f8d2
files data/levels/level1 nagslang/game_object.py nagslang/protagonist.py nagslang/render.py
diffstat 4 files changed, 50 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/data/levels/level1	Thu Sep 05 16:34:17 2013 +0200
+++ b/data/levels/level1	Thu Sep 05 16:43:25 2013 +0200
@@ -17,6 +17,9 @@
   classname: ToggleSwitch
   name: door_switch
 - args:
+  - [300, 600]
+  classname: Gun
+- args:
   - [300, 500]
   - light_switch
   classname: FloorLight
--- a/nagslang/game_object.py	Thu Sep 05 16:34:17 2013 +0200
+++ b/nagslang/game_object.py	Thu Sep 05 16:43:25 2013 +0200
@@ -334,10 +334,41 @@
 class Bullet(GameObject):
     def __init__(self, space, position, impulse):
         body = make_body(1, pymunk.inf, position)
-        self.shape = pymunk.Circle(body, 1)
+        self.shape = pymunk.Circle(body, 2)
         self.shape.collision_type = COLLISION_TYPE_PROJECTILE
         super(Bullet, self).__init__(
             SingleShapePhysicser(space, self.shape),
             render.ImageRenderer(resources.get_image('objects', 'bullet.png')),
         )
         self.physicser.apply_impulse(impulse)
+
+
+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.inventory[self._name] = self
+        # 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', 'bullet.png')),
+        )
--- a/nagslang/protagonist.py	Thu Sep 05 16:34:17 2013 +0200
+++ b/nagslang/protagonist.py	Thu Sep 05 16:43:25 2013 +0200
@@ -253,11 +253,16 @@
         if self.in_wolf_form():
             pass
         else:
-            vec = Vec2d.unit()
-            vec.angle = self.angle
-            vec.length = 100
-            FireEvent.post(self.physicser.position, vec)
-            print "Biff", self.physicser.position, vec
+            self.shoot()
+
+    def shoot(self):
+        if not self.has_item('gun'):
+            return
+        vec = Vec2d.unit()
+        vec.angle = self.angle
+        vec.length = 100
+        FireEvent.post(self.physicser.position, vec)
+        print "Biff", self.physicser.position, vec
 
     def in_wolf_form(self):
         return self.form == self.WOLF_FORM
--- a/nagslang/render.py	Thu Sep 05 16:34:17 2013 +0200
+++ b/nagslang/render.py	Thu Sep 05 16:43:25 2013 +0200
@@ -38,6 +38,11 @@
         pass
 
 
+class NullRenderer(Renderer):
+    def render(self, surface):
+        pass
+
+
 def image_pos(image, pos):
     return (pos[0] - image.get_width() / 2,
             pos[1] - image.get_height() / 2)