Ok pour le fonctionnement avec plusieurs wiimotes.
[minwii.git] / src / app / minwii.py
index 56047ad..d75dd5e 100755 (executable)
@@ -9,6 +9,7 @@ $URL$
 import pygame
 from pgu.gui import Desktop
 from pgu.gui import QUIT
 import pygame
 from pgu.gui import Desktop
 from pgu.gui import QUIT
+from widgets.launch import LaunchScreen
 from widgets.home import Home
 from widgets.playingscreen import SongPlayingScreen, PlayingScreen
 from widgets.instrumentselector import InstrumentSelector
 from widgets.home import Home
 from widgets.playingscreen import SongPlayingScreen, PlayingScreen
 from widgets.instrumentselector import InstrumentSelector
@@ -16,29 +17,74 @@ from synth import Synth
 from eventutils import EventDispatcher
 from musicxml import musicXml2Song
 from config import SONG_FILE_PATH
 from eventutils import EventDispatcher
 from musicxml import musicXml2Song
 from config import SONG_FILE_PATH
+from globals import PLAYING_MODES_DICT
+
 
 class MinWii(object):
     
 
 class MinWii(object):
     
-    def __init__(self) :
-        #app = Desktop()
-        #synth = Synth()
+    def __init__(self, wimoteSupport=True) :
+        LaunchScreen()
+        app = Desktop()
+        synth = Synth()
+
+        screenResolution = (1024,768)
+        
+        if wimoteSupport :
+            from pywiiuse import pygame_wiimouse
+            pygame_wiimouse.init(4, 5, screenResolution) # look for 4, wait 5 seconds
+            nwiimotes = pygame_wiimouse.get_count()
+            print '%d wiimotes' % nwiimotes
+            WT = pygame_wiimouse.WT
+            WT.pause()
+        else :
+            nwiimotes = 0
+            class _WTFacade :
+                selectWimoteIndex = 0
+                def pause(self):
+                    pass
+                def resume(self):
+                    pass
+                def selectWiimote(self, i):
+                    pass
+            WT = _WTFacade()
+
+        pygame.display.set_mode(screenResolution)
+        pygame.display.set_caption('MinWii')
 
         while True :
 
         while True :
-            #home = Home(songPath=SONG_FILE_PATH)
-            #home.connect(QUIT, app.quit)
-            #app.run(home)
-            #app.close(home)
+            # sélection de la chanson
+            home = Home(songPath=SONG_FILE_PATH,
+                        nwiimotes=nwiimotes)
+            home.connect(QUIT, app.quit)
+            app.run(home)
+            app.close(home)
+            returnValue = home.returnValue
+            print 'home.selectedWiimoteIndex', home.selectedWiimoteIndex
+            if not returnValue :
+                break
             
             
+            WT.selectWiimote(home.selectedWiimoteIndex)
+            WT.resume()
+
+            # sélection de l'instrument
             selector = InstrumentSelector()
             selector.run()
             selector.stop()
             pygame.event.clear()
             EventDispatcher.reset()
             selector = InstrumentSelector()
             selector.run()
             selector.stop()
             pygame.event.clear()
             EventDispatcher.reset()
-            break
+            instrumentDescription = selector.selectedInstrument
             
             
-            song = musicXml2Song(home.songFile, printNotes=True)
-            synth.program_select(0, 0, 0)
-            playingScreen = SongPlayingScreen(synth, song)
+            # lancement du lecteur / clavier
+            songFile = home.songFile
+            playMode = home.modeSelect.value
+            playMode = PLAYING_MODES_DICT[playMode]
+            song = musicXml2Song(songFile)
+            bank, preset = instrumentDescription['bank'], instrumentDescription['preset']
+            octave = instrumentDescription.get('octave', 0)
+            synth.adjust_octave(0, octave)
+            synth.program_select(0, bank, preset)
+            playingScreen = SongPlayingScreen(synth, song, mode=playMode)
             playingScreen.run()
             pygame.event.clear()
             EventDispatcher.reset()
             playingScreen.run()
             pygame.event.clear()
             EventDispatcher.reset()
+            WT.pause()