changeset 243:4050e77dade6

Add support for background music tracks
author Neil Muller <drnlmuller@gmail.com>
date Thu, 07 Apr 2011 16:42:54 +0200
parents c30fcf903d29
children 5bbf90e6a94b
files skaapsteker/cutscene.py skaapsteker/level.py skaapsteker/levelscene.py
diffstat 3 files changed, 29 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/skaapsteker/cutscene.py	Thu Apr 07 15:01:23 2011 +0200
+++ b/skaapsteker/cutscene.py	Thu Apr 07 16:42:54 2011 +0200
@@ -9,7 +9,7 @@
 from .widgets.text import Text, unindent_text
 
 class CutScene(Scene):
-    def __init__(self, game_state, text, background):
+    def __init__(self, game_state, text, background, music=None):
         super(CutScene, self).__init__(game_state)
         self.text = text
         self.text_widget = Text(text, pygame.Rect(20, 20, 800-40, 600-40),
@@ -17,6 +17,9 @@
         self.background = data.load_image('backgrounds/' + background)
         self.start_time = pygame.time.get_ticks()
         self.run_time = 60000 # ms
+        self._background_music = None
+        if music and pygame.mixer.get_init():
+            self._background_music = data.filepath(music)
 
     def draw(self, surface, engine):
         viewport = surface.get_clip()
@@ -42,6 +45,15 @@
                 ChangeScene.post(MenuScene(self.game_state))
         super(CutScene, self).dispatch(ev)
 
+    def enter(self):
+        if self._background_music:
+            pygame.mixer.music.load(self._background_music)
+            pygame.mixer.music.play(-1)
+
+    def leave(self):
+        if self._background_music:
+            pygame.mixer.music.stop()
+
 
 def opening_cutscene(game_state):
     text = u"""
--- a/skaapsteker/level.py	Thu Apr 07 15:01:23 2011 +0200
+++ b/skaapsteker/level.py	Thu Apr 07 16:42:54 2011 +0200
@@ -1,6 +1,6 @@
 import json
 
-from pygame import Rect, Surface, Color
+from pygame import Rect, Surface, Color, mixer
 from pygame.sprite import LayeredUpdates
 from pygame.locals import SRCALPHA, HWSURFACE
 
@@ -63,7 +63,9 @@
         self.build_tiles()
         self.setup_enemies()
         self.setup_player(player)
-
+        self._background_music = None
+        if 'music' in self.level_data and mixer.get_init():
+            self._background_music = data.filepath('music/' + self.level_data['music'])
 
     def build_backgrounds(self):
         self.backgrounds = []
@@ -71,6 +73,16 @@
             self.backgrounds.append(data.load_image('backgrounds/' + background))
 
 
+    def leave(self):
+        if self._background_music:
+            mixer.music.stop()
+
+
+    def enter(self):
+        if self._background_music:
+            mixer.music.load(self._background_music)
+            mixer.music.play(-1)
+
     def build_tiles(self):
         self.tileset = TileSet(self.level_data['tileset'])
         self.tiles = LayeredUpdates()
--- a/skaapsteker/levelscene.py	Thu Apr 07 15:01:23 2011 +0200
+++ b/skaapsteker/levelscene.py	Thu Apr 07 16:42:54 2011 +0200
@@ -70,10 +70,12 @@
     def leave(self):
         """Freeze the scene, for serialization"""
         self._world.freeze()
+        self._level.leave()
 
     def enter(self):
         """Unfreeze"""
         self._world.thaw()
+        self._level.enter()
 
     def draw(self, screen_surface, engine):
         if self._clip_rect is None: