# HG changeset patch # User Jeremy Thurgood # Date 1378493102 -7200 # Node ID 72a91d64c0880efce3c1b7a897204877b54b5b06 # Parent 3dd08e18580f15677a6aa07e71b7aae21e474ecc Keycard doors. diff -r 3dd08e18580f -r 72a91d64c088 data/levels/level2 --- 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: diff -r 3dd08e18580f -r 72a91d64c088 nagslang/game_object.py --- 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")] diff -r 3dd08e18580f -r 72a91d64c088 nagslang/mutators.py --- 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)