Mercurial > nagslang
diff nagslang/game_object.py @ 81:a1b4d09e6f23
Floor switch with horrible hackery.
author | davidsharpe@lantea.local |
---|---|
date | Sun, 01 Sep 2013 22:53:37 +0200 |
parents | 7f038ee778ad |
children | 11b0017b5e4b |
line wrap: on
line diff
--- a/nagslang/game_object.py Sun Sep 01 22:36:49 2013 +0200 +++ b/nagslang/game_object.py Sun Sep 01 22:53:37 2013 +0200 @@ -1,5 +1,28 @@ import math +import pygame +import pymunk + +from nagslang.constants import SWITCH_PUSHERS, COLLISION_TYPE_SWITCH + +class Puzzler(object): + def get_state(self, space): + raise NotImplementedError() + + def notify(self): + pass + + +class FloorSwitchPuzzler(Puzzler): + def __init__(self, shape): + self.shape = shape + + def get_state(self, space): + for shape in space.shape_query(self.shape): + if shape.collision_type in SWITCH_PUSHERS: + return True + return False + class Physicser(object): def add_to_space(self, space): @@ -98,11 +121,12 @@ This has a rendery thing, physicsy things and maybe some other things. """ - def __init__(self, renderer, physicser=None): + def __init__(self, renderer, physicser=None, puzzler=None): self.renderer = renderer if physicser is None: physicser = NullPhysicser() self.physicser = physicser + self.puzzler = puzzler def add_to_space(self, space): self.physicser.add_to_space(space) @@ -111,3 +135,28 @@ return self.renderer.render( surface, self.physicser.render_position(surface), self.physicser.render_angle()) + + +class FloorSwitch(GameObject): + def __init__(self, position): + body = pymunk.Body() + body.position = position + self.shape = pymunk.Circle(body, 30) + self.shape.collision_type = COLLISION_TYPE_SWITCH + self.shape.sensor = True + super(FloorSwitch, self).__init__( + ShapeRenderer(self.shape), + SingleShapePhysicser(self.shape), + FloorSwitchPuzzler(self.shape), + ) + + def add_to_space(self, space): + # XXX: Hacky hack. + self._space = space + + def render(self, surface): + if self.puzzler.get_state(self._space): + self.shape.color = pygame.color.THECOLORS['green'] + else: + self.shape.color = pygame.color.THECOLORS['red'] + super(FloorSwitch, self).render(surface) \ No newline at end of file