1160d5bad1d2b20b16baea503cdaf09f76bce2c1
1 # -*- coding: utf-8 -*-
10 from pgu
.gui
import Desktop
11 from pgu
.gui
import QUIT
12 from minwii
.widgets
.launch
import LaunchScreen
13 from minwii
.widgets
.home
import Home
14 from minwii
.widgets
.playingscreen
import SongPlayingScreen
, PlayingScreen
15 from minwii
.widgets
.instrumentselector
import InstrumentSelector
16 from minwii
.synth
import Synth
17 from minwii
.eventutils
import EventDispatcher
18 from minwii
.musicxml
import musicXml2Song
19 from minwii
.config
import SONG_FILE_PATH
20 from minwii
.globals import PLAYING_MODES_DICT
21 from minwii
.log
import console
, LOG_FORMAT_VERSION
, envLogger
26 def __init__(self
, wiimoteSupport
=True, fullscreen
=False) :
27 envLogger
.info('winwii log format version : %s', LOG_FORMAT_VERSION
)
28 self
.wiimoteSupport
= wiimoteSupport
29 self
.fullscreen
= fullscreen
33 self
.screenResolution
= (1024,768)
34 envLogger
.info('résolution écran : %s', self
.screenResolution
)
39 def initWiimotes(self
) :
40 if self
.wiimoteSupport
:
41 from pywiiuse
import pygame_wiimouse
42 from minwii
.config
import IR_POSITION
43 pygame_wiimouse
.init(4, 5, self
.screenResolution
, IR_POSITION
) # look for 4, wait 5 seconds
44 self
.nwiimotes
= nwiimotes
= pygame_wiimouse
.get_count()
45 console
.debug('wiimotes found : %d', nwiimotes
)
46 self
.WT
= WT
= pygame_wiimouse
.WT
52 "séquençage de l'affichage des écrans"
55 displayFlags
= displayFlags | pygame
.FULLSCREEN
56 pygame
.display
.set_mode(self
.screenResolution
, displayFlags
)
57 pygame
.display
.set_caption('MINWii')
60 songFile
, playMode
, wiimoteIndex
= '', 'NORMAL', 0
64 exit
, songFile
, playMode
, wiimoteIndex
= \
65 self
.selectSongAndOptions(songFile
, playMode
, wiimoteIndex
)
68 WT
.selectWiimote(wiimoteIndex
)
71 instrumentDescription
= self
.selectInstrument()
72 if not instrumentDescription
:
76 self
.runPlayingScreen(songFile
, playMode
, instrumentDescription
)
81 def selectSongAndOptions(self
, songFile
, playMode
, wiimoteIndex
) :
82 """ lance l'écran de paramétrage et retourne un tuple comportant :
83 - drapeau de sortie de l'application (booléen)
84 - chemin du fichier de la chanson
86 - wiimote sélectionnée (entier)
88 home
= Home(songPath
=SONG_FILE_PATH
,
91 wiimoteIndex
=wiimoteIndex
,
92 nwiimotes
=self
.nwiimotes
)
94 home
.connect(QUIT
, app
.quit
)
100 console
.debug("sortie de l'application")
102 actual_wiimotes
= self
.WT
.get_count()
104 self
.firstSong
= False
106 envLogger
.info('NEW_LOG_FILE')
107 console
.info('chanson : %s', home
.songFile
)
108 console
.info('mode : %s', home
.modeSelect
.value
)
109 if actual_wiimotes
is None :
110 console
.info('HID : souris')
111 elif actual_wiimotes
== 0 :
112 console
.info('HID : souris (pas de wiimote trouvée)')
114 console
.info('HID : wiimote %d', home
.selectedWiimote
.value
+ 1)
117 return (home
.exitApp
,
119 home
.selectedPlayMode
,
120 home
.selectedWiimoteIndex
)
122 def selectInstrument(self
) :
123 """ lance l'écran de sélection de l'instrument et retourne
124 un dictionnaire comportant la description de l'instrument
126 selector
= InstrumentSelector()
130 EventDispatcher
.reset()
131 instru
= selector
.selectedInstrument
133 console
.info('instrument : %s', instru
['name'])
134 console
.info('preset : %d', instru
['preset'])
135 console
.info('bank : %d', instru
['bank'])
136 console
.info('ajustement octave : %d', instru
['octave'])
139 def runPlayingScreen(self
, songFile
, playMode
, instrumentDescription
) :
140 """ Lance l'écran de jeu principal avec la chanson 'songFile' dans le mode 'playMode'
141 avec l'instrument midi 'instrumentDescription'.
143 playMode
= PLAYING_MODES_DICT
[playMode
]
144 song
= musicXml2Song(songFile
)
145 bank
, preset
= instrumentDescription
['bank'], instrumentDescription
['preset']
146 octave
= instrumentDescription
['octave']
147 self
.synth
.adjust_octave(0, octave
)
148 self
.synth
.program_select(0, bank
, preset
)
149 playingScreen
= SongPlayingScreen(self
.synth
, song
, mode
=playMode
)
152 EventDispatcher
.reset()
156 """ Classe utilitaire pour singer l'api
157 de pygame_wiimouse en cas d'abscence de wiimote.
159 selectWimoteIndex
= 0
164 def selectWiimote(self
, i
):
166 def get_count(self
) :