1 # -*- coding: utf-8 -*-
10 from pgu
.gui
import Desktop
11 from pgu
.gui
import QUIT
12 from widgets
.launch
import LaunchScreen
13 from widgets
.home
import Home
14 from widgets
.playingscreen
import SongPlayingScreen
, PlayingScreen
15 from widgets
.instrumentselector
import InstrumentSelector
16 from synth
import Synth
17 from eventutils
import EventDispatcher
18 from musicxml
import musicXml2Song
19 from config
import SONG_FILE_PATH
20 from globals import PLAYING_MODES_DICT
21 from log
import console
, LOG_FORMAT_VERSION
, envLogger
26 def __init__(self
, wiimoteSupport
=True) :
27 envLogger
.info('winwii log format version : %s', LOG_FORMAT_VERSION
)
28 self
.wiimoteSupport
= wiimoteSupport
32 self
.screenResolution
= (1024,768)
33 envLogger
.info('résolution écran : %s', self
.screenResolution
)
38 def initWiimotes(self
) :
39 if self
.wiimoteSupport
:
40 from pywiiuse
import pygame_wiimouse
41 pygame_wiimouse
.init(4, 5, self
.screenResolution
) # look for 4, wait 5 seconds
42 self
.nwiimotes
= nwiimotes
= pygame_wiimouse
.get_count()
43 console
.debug('%d wiimotes found', nwiimotes
)
44 self
.WT
= WT
= pygame_wiimouse
.WT
50 "séquençage de l'affichage des écrans"
52 pygame
.display
.set_mode(self
.screenResolution
)
53 pygame
.display
.set_caption('MinWii')
58 exit
, songFile
, playMode
, selectedWiimoteIndex
= self
.selectSongAndOptions()
61 WT
.selectWiimote(selectedWiimoteIndex
)
64 instrumentDescription
= self
.selectInstrument()
65 if not instrumentDescription
:
69 self
.runPlayingScreen(songFile
, playMode
, instrumentDescription
)
74 def selectSongAndOptions(self
) :
75 """ lance l'écran de paramétrage et retourne un tuple comportant :
76 - drapeau de sortie de l'application (booléen)
77 - chemin du fichier de la chanson
79 - wiimote sélectionnée (entier)
81 home
= Home(songPath
=SONG_FILE_PATH
,
82 nwiimotes
=self
.nwiimotes
)
84 home
.connect(QUIT
, app
.quit
)
90 console
.info("sortie de l'application")
92 actual_wiimotes
= self
.WT
.get_count()
94 self
.firstSong
= False
96 envLogger
.info('NEW_LOG_FILE')
97 console
.info('chanson : %s', home
.songFile
)
98 console
.info('mode : %s', home
.modeSelect
.value
)
99 if actual_wiimotes
is None :
100 console
.info('HID : souris')
101 elif actual_wiimotes
== 0 :
102 console
.info('HID : souris (pas de wiimote trouvée)')
104 console
.info('HID : wiimote %d', home
.selectedWiimote
.value
+ 1)
107 return (home
.exitApp
,
109 home
.modeSelect
.value
,
110 home
.selectedWiimote
.value
)
112 def selectInstrument(self
) :
113 """ lance l'écran de sélection de l'instrument et retourne
114 un dictionnaire comportant la description de l'instrument
116 selector
= InstrumentSelector()
120 EventDispatcher
.reset()
121 instru
= selector
.selectedInstrument
123 console
.info('instrument : %s', instru
['name'])
124 console
.info('preset : %d', instru
['preset'])
125 console
.info('bank : %d', instru
['bank'])
126 console
.info('ajustement octave : %d', instru
['octave'])
129 def runPlayingScreen(self
, songFile
, playMode
, instrumentDescription
) :
130 """ Lance l'écran de jeu principal avec la chanson 'songFile' dans le mode 'playMode'
131 avec l'instrument midi 'instrumentDescription'.
133 playMode
= PLAYING_MODES_DICT
[playMode
]
134 song
= musicXml2Song(songFile
)
135 bank
, preset
= instrumentDescription
['bank'], instrumentDescription
['preset']
136 octave
= instrumentDescription
['octave']
137 self
.synth
.adjust_octave(0, octave
)
138 self
.synth
.program_select(0, bank
, preset
)
139 playingScreen
= SongPlayingScreen(self
.synth
, song
, mode
=playMode
)
142 EventDispatcher
.reset()
146 """ Classe utilitaire pour singer l'api
147 de pygame_wiimouse en cas d'abscence de wiimote.
149 selectWimoteIndex
= 0
154 def selectWiimote(self
, i
):
156 def get_count(self
) :