changeset 249:30ae3c681507

Doors and stuff.
author Jeremy Thurgood <firxen@gmail.com>
date Thu, 07 Apr 2011 22:20:58 +0200
parents 129afb4417cf
children 8d7edd77bfbf
files data/levels/level2.json data/levels/level3.json data/levels/level4.json data/levels/level5.json data/levels/temple.json data/levels/temple_grounds.json scripts/npc-test skaapsteker/engine.py skaapsteker/level.py skaapsteker/sprites/base.py skaapsteker/widgets/text.py
diffstat 11 files changed, 52 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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"}
 }
--- 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"}
 }
--- 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": {}
 }
--- 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": {}
 }
--- 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"}
 }
--- 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"}
 }
--- 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__':
--- 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)
--- 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'))
--- 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()
--- 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