# HG changeset patch # User Stefano Rivera # Date 1378501647 -7200 # Node ID 8069c9be1c3e0193bb5d33c1735cb0863061cf5d # Parent 4eb7f5dffa59f52886f9a7756f30265e2a4f65d6 Create a nagslang.collectable module for collectables diff -r 4eb7f5dffa59 -r 8069c9be1c3e data/levels/level1 --- 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 diff -r 4eb7f5dffa59 -r 8069c9be1c3e data/levels/level2 --- 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: diff -r 4eb7f5dffa59 -r 8069c9be1c3e nagslang/collectable.py --- /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")] diff -r 4eb7f5dffa59 -r 8069c9be1c3e nagslang/game_object.py --- 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")] diff -r 4eb7f5dffa59 -r 8069c9be1c3e nagslang/level.py --- 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, }