changeset 325:00c36ff53de9

Teach editor about background tracks
author Neil Muller <drnlmuller@gmail.com>
date Fri, 16 Sep 2011 20:31:02 +0200
parents ffec90bda89d
children 96732f96da6e
files mamba/data.py mamba/habitats/editor.py
diffstat 2 files changed, 34 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/data.py	Fri Sep 16 20:30:12 2011 +0200
+++ b/mamba/data.py	Fri Sep 16 20:31:02 2011 +0200
@@ -70,11 +70,16 @@
     return os.path.isfile(os.path.join(data_dir, 'levels', '%s.txt' % level))
 
 
-def list_levels():
+def get_level_list():
     files = [os.path.splitext(x) for x in os.listdir(filepath('levels'))]
     return [x[0] for x in files if x[1] == '.txt']
 
 
-def list_tilesets():
+def get_tileset_list():
     tiles = os.listdir(filepath('tiles'))
     return [x for x in tiles if check_tileset_legal(x)]
+
+
+def get_track_list():
+    tracks = os.listdir(filepath('music'))
+    return [x for x in tracks if os.path.splitext(x)[1] == '.ogg']
--- a/mamba/habitats/editor.py	Fri Sep 16 20:30:12 2011 +0200
+++ b/mamba/habitats/editor.py	Fri Sep 16 20:31:02 2011 +0200
@@ -12,7 +12,8 @@
 from mamba.widgets.listbox import ListBox
 from mamba.widgets.toollist import ToolListWidget
 from mamba.level import Level, Tileset, TILE_MAP, THING_MAP, InvalidMapError
-from mamba.data import check_level_exists, list_levels, list_tilesets
+from mamba.data import (check_level_exists, get_level_list, get_tileset_list,
+        get_track_list)
 from mamba.constants import (SCREEN, EDIT_SCREEN, NAME, ESCAPE_KEYS,
         RESERVED_NAMES)
 
@@ -82,6 +83,11 @@
         tilesetname.add_callback('clicked', self.list_tilesets)
         self.container.add(tilesetname)
         button_height += tilesetname.surface.get_height() + button_padding
+        trackname = TextButton((button_left, button_height),
+                'Music: %s' % self.level.background_track, color='white')
+        trackname.add_callback('clicked', self.list_tracks)
+        self.container.add(trackname)
+        button_height += trackname.surface.get_height() + button_padding
         # TODO: Add Image widget for the current tool
         if self.mode != 'Sprites':
             self.current_tool = TextWidget((button_left, button_height),
@@ -197,7 +203,7 @@
         self.load_level(ev, widget, 'blank')
 
     def load(self, ev, widget):
-        levels = list_levels()
+        levels = get_level_list()
         load_list = []
         for level_name in levels:
             if level_name in RESERVED_NAMES:
@@ -250,7 +256,7 @@
         return True
 
     def list_tilesets(self, ev, widget):
-        tilesets = list_tilesets()
+        tilesets = get_tileset_list()
         load_list = []
         for name in tilesets:
             if name == 'common':
@@ -262,6 +268,18 @@
         self.container.add(load_dialog)
         load_dialog.grab_focus()
 
+    def list_tracks(self, ev, widget):
+        tracks = get_track_list()
+        load_list = []
+        for name in tracks:
+            load_button = TextButton((0, 0), name)
+            load_button.add_callback('clicked', self.change_track, name)
+            load_list.append(load_button)
+        load_dialog = ListBox((200, 200), 'Select Level', load_list, 6)
+        self.container.add(load_dialog)
+        load_dialog.grab_focus()
+        return True
+
     def change_tileset(self, ev, widget, new_name):
         self.level.update_tiles_ascii()
         old_tileset = self.level.tileset
@@ -280,6 +298,12 @@
         self.setup_toolbar()
         return True
 
+    def change_track(self, ev, widget, new_name):
+        self.level.background_track = new_name
+        self.clear_toolbar()
+        self.setup_toolbar()
+        return True
+
     def refresh_display(self):
         self.level.restart()
         self.clear_toolbar()