From: Neil Date: Sat, 5 Mar 2016 09:59:49 +0000 (+0200) Subject: Hook up crawl behaviour. Make tunnel entrance even harder to find as a result X-Git-Url: https://git.ctpug.org.za/?a=commitdiff_plain;h=0ea7bed7719ea87b9a57843f027a834a1b6e89a9;p=koperkapel.git Hook up crawl behaviour. Make tunnel entrance even harder to find as a result --- diff --git a/koperkapel/gamelib/level.py b/koperkapel/gamelib/level.py index 8c93baa..01c260e 100644 --- a/koperkapel/gamelib/level.py +++ b/koperkapel/gamelib/level.py @@ -22,3 +22,6 @@ class Level(object): def can_fly(self, x, y, layer): return 'fly' in self.tiles[y][x][layer]['behaviour'] + + def can_crawl(self, x, y, layer): + return 'crawl' in self.tiles[y][x][layer]['behaviour'] diff --git a/koperkapel/gamelib/tiles.py b/koperkapel/gamelib/tiles.py index 382a2ea..66a74ff 100644 --- a/koperkapel/gamelib/tiles.py +++ b/koperkapel/gamelib/tiles.py @@ -64,7 +64,7 @@ class Tunnel(OrientatedTile): @classmethod def image(cls, neighbors): - connections = [True if 'walk' in x['behaviour'] else False for x in neighbors] + connections = [True if 'crawl' in x['behaviour'] else False for x in neighbors] conn_count = connections.count(True) # simple cases cls.ANGLE = 0 diff --git a/koperkapel/scenes/level.py b/koperkapel/scenes/level.py index 9dd8b61..867eaac 100644 --- a/koperkapel/scenes/level.py +++ b/koperkapel/scenes/level.py @@ -62,6 +62,7 @@ class GameLevelScene(BaseLevelScene): def enter(self, world): super().enter(world) self._roaches = self.actors.add_layer("roaches", level=10) + self._mode = 'walk' return self._init_roaches(world.roaches) def _init_roaches(self, roaches): @@ -78,32 +79,43 @@ class GameLevelScene(BaseLevelScene): def _set_pos(self, x, y): self._player_pos = (x, y) + def _can_move(self, x, y): + if self._mode == 'walk': + return self._level.can_walk(x, y, self._level_layer) + elif self._mode == 'fly': + return self._level.can_fly(x, y, self._level_layer) + elif self._mode == 'crawl': + return self._level.can_crawl(x, y, self._level_layer) + def on_key_down(self, key, mod, unicode): offset = None x, y = self._player_pos if key == keys.DOWN: - if self._level.can_walk(x, y + 1, self._level_layer): + if self._can_move(x, y + 1): self._set_pos(x, y + 1) offset = (0, TILE_SIZE) elif key == keys.UP: - if self._level.can_walk(x, y - 1, self._level_layer): + if self._can_move(x, y - 1): self._set_pos(x, y - 1) offset = (0, -TILE_SIZE) elif key == keys.LEFT: - if self._level.can_walk(x - 1, y, self._level_layer): + if self._can_move(x - 1, y): self._set_pos(x - 1, y) offset = (-TILE_SIZE, 0) elif key == keys.RIGHT: - if self._level.can_walk(x + 1, y, self._level_layer): + if self._can_move(x + 1, y): self._set_pos(x + 1, y) offset = (TILE_SIZE, 0) elif key == keys.S: - if self._level_layer == 'floor': - if self._level.can_walk(x, y, 'tunnels'): + if self._level_layer == 'floor' and self._level.can_crawl(x, y, 'floor'): + # We're probably on a grate + if self._level.can_crawl(x, y, 'tunnels'): self._level_layer = 'tunnels' - elif self._level.can_walk(x, y, 'floor'): + self._mode = 'crawl' + elif self._level.can_crawl(x, y, 'floor'): # Must be in the tunnels already self._level_layer = 'floor' + self._mode = 'walk' return if offset: return [MoveViewportEvent(offset)]