Mercurial > nagslang
changeset 188:3894cfe15823
Better collision handling, potentially locked doors.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Tue, 03 Sep 2013 20:24:25 +0200 |
parents | 42a10c4f70c8 |
children | b6c1a9448d7d |
files | nagslang/game_object.py nagslang/screens/area.py |
diffstat | 2 files changed, 18 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/nagslang/game_object.py Tue Sep 03 20:10:44 2013 +0200 +++ b/nagslang/game_object.py Tue Sep 03 20:24:25 2013 +0200 @@ -434,9 +434,6 @@ puzzler, ) - def animate(self): - space = self.get_space() - for shape in space.shape_query(self.get_shape()): - if shape.collision_type == COLLISION_TYPE_PLAYER: - # Force to new position - DoorEvent.post(self.destination, self.dest_pos) + def collide_with_protagonist(self): + if self.puzzler.get_state(): + DoorEvent.post(self.destination, self.dest_pos)
--- a/nagslang/screens/area.py Tue Sep 03 20:10:44 2013 +0200 +++ b/nagslang/screens/area.py Tue Sep 03 20:24:25 2013 +0200 @@ -4,6 +4,7 @@ import pymunk import pymunk.pygame_util +from nagslang.constants import COLLISION_TYPE_PLAYER, CALLBACK_COLLIDERS from nagslang.events import ScreenChange, DoorEvent from nagslang.level import Level from nagslang.protagonist import Protagonist @@ -68,6 +69,7 @@ self._level.load(self.space) self._drawables = Drawables() self.add_walls() + self._add_collision_handlers() if self.protagonist is not None: # We do things this way to avoid extra pymunk # juggling to move objects between spaces @@ -78,6 +80,19 @@ self.add_protagonist() self.add_game_objects() + def _collision_pre_solve_handler(self, space, arbiter): + gobj = arbiter.shapes[1].physicser.game_object + result = gobj.collide_with_protagonist() + if result is False: + return False + return True + + def _add_collision_handlers(self): + for collision_type in CALLBACK_COLLIDERS: + self.space.add_collision_handler( + COLLISION_TYPE_PLAYER, collision_type, + pre_solve=self._collision_pre_solve_handler) + def add_walls(self): self.walls = [] body = pymunk.Body()