# HG changeset patch # User Jeremy Thurgood # Date 1302207658 -7200 # Node ID 30ae3c681507b4f7366455e0c7d30864c09ff1e0 # Parent 129afb4417cf2ac87015929f870da9a5280400d8 Doors and stuff. diff -r 129afb4417cf -r 30ae3c681507 data/levels/level2.json --- a/data/levels/level2.json Thu Apr 07 19:44:04 2011 +0200 +++ b/data/levels/level2.json Thu Apr 07 22:20:58 2011 +0200 @@ -30,5 +30,6 @@ ], "enemies": [], "sprites": [], + "doorways": [], "player": {"pos": [6, 2], "direction": "right"} } diff -r 129afb4417cf -r 30ae3c681507 data/levels/level3.json --- a/data/levels/level3.json Thu Apr 07 19:44:04 2011 +0200 +++ b/data/levels/level3.json Thu Apr 07 22:20:58 2011 +0200 @@ -20,5 +20,6 @@ ], "enemies": [], "sprites": [], + "doorways": [], "player": {"pos": [2, 1], "direction": "right"} } diff -r 129afb4417cf -r 30ae3c681507 data/levels/level4.json --- a/data/levels/level4.json Thu Apr 07 19:44:04 2011 +0200 +++ b/data/levels/level4.json Thu Apr 07 22:20:58 2011 +0200 @@ -21,5 +21,6 @@ ], "enemies": [], "sprites": [], + "doorways": [], "player": {} } diff -r 129afb4417cf -r 30ae3c681507 data/levels/level5.json --- a/data/levels/level5.json Thu Apr 07 19:44:04 2011 +0200 +++ b/data/levels/level5.json Thu Apr 07 22:20:58 2011 +0200 @@ -29,5 +29,6 @@ ], "enemies": [], "sprites": [], + "doorways": [], "player": {} } diff -r 129afb4417cf -r 30ae3c681507 data/levels/temple.json --- a/data/levels/temple.json Thu Apr 07 19:44:04 2011 +0200 +++ b/data/levels/temple.json Thu Apr 07 22:20:58 2011 +0200 @@ -28,5 +28,8 @@ {"type": "RedOni", "pos": [4, 8], "direction": "left" }, {"type": "RedOni", "pos": [15, 11], "direction": "right" } ], + "doorways": [ + {"type": "Doorway", "pos": [17, 16], "leadsto": "level2"} + ], "player": {"pos": [4, 17], "direction": "right"} } diff -r 129afb4417cf -r 30ae3c681507 data/levels/temple_grounds.json --- a/data/levels/temple_grounds.json Thu Apr 07 19:44:04 2011 +0200 +++ b/data/levels/temple_grounds.json Thu Apr 07 22:20:58 2011 +0200 @@ -25,5 +25,6 @@ {"type": "RedOni", "pos": [10, 8], "direction": "left" }, {"type": "RedOni", "pos": [26, 11], "direction": "right" } ], + "doorways": [], "player": {"pos": [3, 2], "direction": "right"} } diff -r 129afb4417cf -r 30ae3c681507 scripts/npc-test --- a/scripts/npc-test Thu Apr 07 19:44:04 2011 +0200 +++ b/scripts/npc-test Thu Apr 07 22:20:58 2011 +0200 @@ -88,7 +88,7 @@ return if len(args) != 1: - p.error("Must provide an npc json file") + parser.error("Must provide an npc json file") run(args[0], opts.game) if __name__ == '__main__': diff -r 129afb4417cf -r 30ae3c681507 skaapsteker/engine.py --- a/skaapsteker/engine.py Thu Apr 07 19:44:04 2011 +0200 +++ b/skaapsteker/engine.py Thu Apr 07 22:20:58 2011 +0200 @@ -33,7 +33,10 @@ if ev.type is QUIT: return if ChangeScene.matches(ev): - self.change_scene(ev.next_scene) + next_scene = ev.next_scene + if not isinstance(next_scene, Scene): + next_scene = next_scene[0](self.game_state, *(next_scene[1:])) + self.change_scene(next_scene) break self._current_scene.dispatch(ev) self._current_scene.draw(surface, self) diff -r 129afb4417cf -r 30ae3c681507 skaapsteker/level.py --- a/skaapsteker/level.py Thu Apr 07 19:44:04 2011 +0200 +++ b/skaapsteker/level.py Thu Apr 07 22:20:58 2011 +0200 @@ -60,6 +60,7 @@ self.build_backgrounds() self.build_tiles() self.setup_enemies() + self.setup_doorways() self.setup_player(player) self._background_music = None if 'music' in self.level_data and mixer.get_init(): @@ -103,6 +104,13 @@ self.sprites.add(enemy) + def setup_doorways(self): + self.doorways = LayeredUpdates() + for door_def in self.level_data['doorways']: + doorway = find_sprite(door_def, 'base') + self.sprites.add(doorway) + + def setup_player(self, player): player_data = self.level_data['player'] player.set_facing(player_data.pop('direction', 'left')) diff -r 129afb4417cf -r 30ae3c681507 skaapsteker/sprites/base.py --- a/skaapsteker/sprites/base.py Thu Apr 07 19:44:04 2011 +0200 +++ b/skaapsteker/sprites/base.py Thu Apr 07 22:20:58 2011 +0200 @@ -3,6 +3,7 @@ import re from pygame import Rect +import pygame.transform from ..physics import Sprite from ..constants import Layers @@ -263,6 +264,36 @@ return (0, 240, 0) + +class Doorway(GameSprite): + mobile = False + gravitates = False + collides_with = set([PC_LAYER]) + + image_file = 'torii.png' + + debug_color = (120, 240, 120) + + def __init__(self, pos, **opts): + GameSprite.__init__(self, pos, **opts) + self._layer = Layers.PLAYER + self.image = pygame.transform.scale(self.image, self.image.get_rect().center) + self.rect = self.image.get_rect(midbottom=self.rect.midbottom) + self.collide_rect = self.rect + + + def setup(self, leadsto): + self.leadsto = leadsto + print leadsto + + + def collided_player(self, player): + print "Player touched %s" % self + from .. import engine, levelscene + engine.ChangeScene.post((levelscene.LevelScene, self.leadsto)) + + + def find_sprite(descr, mod_name=None): """Create a sprite object from a dictionary describing it.""" descr = descr.copy() diff -r 129afb4417cf -r 30ae3c681507 skaapsteker/widgets/text.py --- a/skaapsteker/widgets/text.py Thu Apr 07 19:44:04 2011 +0200 +++ b/skaapsteker/widgets/text.py Thu Apr 07 22:20:58 2011 +0200 @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- -import collections - import pygame from pygame.locals import KEYDOWN, K_UP, K_DOWN, K_RETURN