changeset 364:72a91d64c088

Keycard doors.
author Jeremy Thurgood <firxen@gmail.com>
date Fri, 06 Sep 2013 20:45:02 +0200
parents 3dd08e18580f
children 3aa3981a64a4
files data/levels/level2 nagslang/game_object.py nagslang/mutators.py
diffstat 3 files changed, 52 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/data/levels/level2	Fri Sep 06 20:25:06 2013 +0200
+++ b/data/levels/level2	Fri Sep 06 20:45:02 2013 +0200
@@ -25,6 +25,18 @@
     - [700, 300]
     - [700, 250]
   classname: ForceWolfFloor
+- args:
+  - [600, 440]
+  - level2
+  - [800, 300]
+  - 90
+  - keycard_red
+  classname: KeyedDoor
+- args:
+  - [400, 200]
+  - keycard_red
+  classname: KeyCard
+  name: keycard_red
 lines: []
 polygons:
   1:
--- a/nagslang/game_object.py	Fri Sep 06 20:25:06 2013 +0200
+++ b/nagslang/game_object.py	Fri Sep 06 20:45:02 2013 +0200
@@ -6,7 +6,7 @@
 from nagslang import environment
 from nagslang import puzzle
 from nagslang import render
-from nagslang.mutators import FLIP_H
+from nagslang.mutators import FLIP_H, ImageOverlay
 from nagslang.constants import (
     COLLISION_TYPE_DOOR, COLLISION_TYPE_FURNITURE, COLLISION_TYPE_PROJECTILE,
     COLLISION_TYPE_SWITCH, COLLISION_TYPE_WEREWOLF_ATTACK,
@@ -348,9 +348,12 @@
     def __init__(self, space, position, destination, dest_pos, angle,
                  key_item=None):
         self._key_item = key_item
+        overlay = ImageOverlay(
+            resources.get_image('objects', '%s.png' % (key_item,)))
         super(KeyedDoor, self).__init__(
             space, position, destination, dest_pos, angle,
-            render.ImageRenderer(resources.get_image('objects', 'door.png')),
+            render.ImageRenderer(resources.get_image(
+                'objects', 'door.png', transforms=(overlay,))),
             environment.ItemRequiredCondition(key_item),
         )
 
@@ -577,3 +580,19 @@
 
     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/mutators.py	Fri Sep 06 20:25:06 2013 +0200
+++ b/nagslang/mutators.py	Fri Sep 06 20:45:02 2013 +0200
@@ -1,7 +1,7 @@
 '''Mutations to apply to images'''
 
 import pygame
-from pygame.transform import rotate, flip
+from pygame.transform import rotate, flip, scale
 
 
 class Mutator(object):
@@ -39,6 +39,24 @@
         return image
 
 
+class ImageOverlay(Mutator):
+    '''Overlay another image onto an image'''
+    def __init__(self, image, offset=(0, 0), halfsize=True, blend=0):
+        super(ImageOverlay, self).__init__(
+            ImageOverlay.overlay, image, offset, halfsize, blend)
+
+    @classmethod
+    def overlay(self, image, overlay, offset, halfsize, blend):
+        image = image.copy()
+        if halfsize:
+            new_size = (overlay.get_width() / 2, overlay.get_height() / 2)
+            overlay = scale(overlay, new_size)
+        offset_x = image.get_width() / 2 - overlay.get_width() / 2 + offset[0]
+        offset_y = image.get_width() / 2 - overlay.get_width() / 2 + offset[1]
+        image.blit(overlay, (offset_x, offset_y), None, blend)
+        return image
+
+
 # Identity mutator
 NULL = Mutator(lambda x: x)