Mercurial > nagslang
changeset 319:01e98732de46
Open bulkheads are no longer opaque to furniture
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Fri, 06 Sep 2013 02:01:30 +0200 |
parents | 26d1978fa1da |
children | d13d5425da95 |
files | nagslang/game_object.py nagslang/screens/area.py |
diffstat | 2 files changed, 18 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/nagslang/game_object.py Fri Sep 06 01:48:59 2013 +0200 +++ b/nagslang/game_object.py Fri Sep 06 02:01:30 2013 +0200 @@ -162,6 +162,9 @@ """ return True + def collide_with_furniture(self, furniture): + return True + @classmethod def requires(cls): """Hints for the level editor""" @@ -309,6 +312,8 @@ return False return True + collide_with_furniture = collide_with_protagonist + @classmethod def requires(cls): return [("name", "string"), ("end1", "coordinates"),
--- a/nagslang/screens/area.py Fri Sep 06 01:48:59 2013 +0200 +++ b/nagslang/screens/area.py Fri Sep 06 02:01:30 2013 +0200 @@ -5,7 +5,8 @@ import pymunk.pygame_util from nagslang.constants import ( - COLLISION_TYPE_WALL, COLLISION_TYPE_PLAYER, CALLBACK_COLLIDERS) + COLLISION_TYPE_WALL, COLLISION_TYPE_PLAYER, CALLBACK_COLLIDERS, + COLLISION_TYPE_FURNITURE) from nagslang.enemies import DeadEnemy from nagslang.events import ScreenChange, DoorEvent, FireEvent, \ EnemyDeathEvent, ClawEvent @@ -82,7 +83,7 @@ def teardown(self): sound.stop() - def _collision_pre_solve_handler(self, space, arbiter): + def _player_collision_pre_solve_handler(self, space, arbiter): gobj = arbiter.shapes[1].physicser.game_object result = gobj.collide_with_protagonist(self.protagonist) # The collision handler must return `True` or `False`. We don't want to @@ -92,11 +93,20 @@ return False return True + def _furniture_collision_pre_solve_handler(self, space, arbiter): + furniture = arbiter.shapes[0].physicser.game_object + gobj = arbiter.shapes[1].physicser.game_object + result = gobj.collide_with_furniture(furniture) + return result is not False + 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) + pre_solve=self._player_collision_pre_solve_handler) + self.space.add_collision_handler( + COLLISION_TYPE_FURNITURE, collision_type, + pre_solve=self._furniture_collision_pre_solve_handler) def add_walls(self): self.walls = []