Changeset 255

Show
Ignore:
Timestamp:
01/07/07 21:45:29 (5 years ago)
Author:
mg
Message:

Option to turn off sound and music.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/pyspacewar/ui.py

    r254 r255  
    14331433    def init_menu(self): 
    14341434        """Initialize the mode.""" 
     1435        def title(label, on): 
     1436            return label + '\t' + (on and 'on' or 'off') 
    14351437        self.menu_items = [ 
    14361438            ('Screen size\t%dx%d' % self.ui.fullscreen_mode, 
    14371439             self.ui.screen_resolution_menu), 
    1438             (self.ui.fullscreen and 'Full screen mode\ton' 
    1439                                  or 'Full screen mode\toff', 
     1440            (title('Full screen mode', self.ui.fullscreen), 
    14401441             self.toggle_fullscreen), 
    1441             (self.ui.show_missile_trails and 'Missile orbits\ton' 
    1442                                           or 'Missile orbits\toff', 
     1442            (title('Missile orbits', self.ui.show_missile_trails), 
    14431443             self.toggle_missile_orbits), 
    1444             (self.ui.sound_in_vacuum and 'Sound in vacuum\ton' 
    1445                                       or 'Sound in vacuum\toff', 
     1444            (title('Music', self.ui.music), 
     1445             self.toggle_music), 
     1446            (title('Sound', self.ui.sound), 
     1447             self.toggle_sound), 
     1448            (title('Sound in vacuum', self.ui.sound_in_vacuum), 
    14461449             self.toggle_sound_in_vacuum), 
    14471450            ('Controls', self.ui.controls_menu), 
     
    14711474        """Toggle missile orbits and reflect the setting in the menu.""" 
    14721475        self.ui.toggle_missile_orbits() 
     1476        self.reinit_menu() 
     1477 
     1478    def toggle_music(self): 
     1479        """Toggle music and reflect the setting in the menu.""" 
     1480        self.ui.toggle_music() 
     1481        self.reinit_menu() 
     1482 
     1483    def toggle_sound(self): 
     1484        """Toggle sound effects and reflect the setting in the menu.""" 
     1485        self.ui.toggle_sound() 
    14731486        self.reinit_menu() 
    14741487 
     
    17791792    fullscreen_mode = None          # Desired video mode (w, h) 
    17801793    show_missile_trails = True      # Show missile trails by default 
     1794    music = True                    # Do we have background music? 
     1795    sound = True                    # Do we have sound effects? 
    17811796    sound_in_vacuum = True          # Can you hear what happens to AI ships? 
    17821797    show_debug_info = False         # Hide debug info by default 
     
    18291844        self.show_missile_trails = config.getboolean('video', 
    18301845                                                     'show_missile_trails') 
    1831         self.sound_in_vacuum = config.getboolean('sound', 
    1832                                                  'sound_in_vacuum') 
     1846        self.music = config.getboolean('sound', 'music') 
     1847        self.sound = config.getboolean('sound', 'sound') 
     1848        self.sound_in_vacuum = config.getboolean('sound', 'sound_in_vacuum') 
    18331849        for action in self.controls: 
    18341850            key = config.get('controls', action) 
     
    18621878                   str(self.show_missile_trails)) 
    18631879        config.add_section('sound') 
     1880        config.set('sound', 'music', str(self.music)) 
     1881        config.set('sound', 'sound', str(self.sound)) 
    18641882        config.set('sound', 'sound_in_vacuum', str(self.sound_in_vacuum)) 
    18651883        config.add_section('controls') 
     
    19972015        config.read([find('sounds', 'sounds.ini')]) 
    19982016        self.sounds = {} 
    1999         self.sound_looping = {} 
     2017        self.sound_looping = sets.Set() 
    20002018        for name in ['thruster', 'fire', 'bounce', 'hit', 'explode', 'respawn', 
    20012019                     'menu']: 
     
    20232041                    self.music_files[what] = find('music', filename) 
    20242042 
    2025     def play_music(self, which): 
     2043    def play_music(self, which, restart=False): 
    20262044        """Loop the music file for a certain mode.""" 
    2027         if which == self.now_playing: 
     2045        if which == self.now_playing and not restart: 
     2046            return 
     2047        self.now_playing = which 
     2048        if not self.music: 
    20282049            return 
    20292050        filename = self.music_files.get(which) 
     
    20372058                print "pyspacewar: could not load %s" % filename 
    20382059                pygame.mixer.music.stop() 
    2039         self.now_playing = which 
    20402060 
    20412061    def play_sound(self, which): 
    20422062        """Play a certain sound effect.""" 
    2043         if which in self.sounds: 
     2063        if which in self.sounds and self.sound: 
    20442064            self.sounds[which].play() 
    20452065 
    20462066    def start_sound(self, which): 
    20472067        """Start looping a certain sound effect.""" 
    2048         if not self.sound_looping.get(which) and which in self.sounds: 
    2049             self.sounds[which].play(-1) 
    2050             self.sound_looping[which] = True 
     2068        if which not in self.sound_looping and which in self.sounds: 
     2069            if self.sound: 
     2070                self.sounds[which].play(-1) 
     2071            self.sound_looping.add(which) 
    20512072 
    20522073    def stop_sound(self, which): 
    20532074        """Stop playing a certain sound effect.""" 
    2054         if self.sound_looping.get(which) and which in self.sounds: 
     2075        if which in self.sound_looping: 
    20552076            self.sounds[which].stop() 
    2056             self.sound_looping[which] = False 
     2077            self.sound_looping.remove(which) 
    20572078 
    20582079    def _init_fonts(self): 
     
    23072328        self.show_missile_trails = not self.show_missile_trails 
    23082329 
     2330    def toggle_music(self): 
     2331        """Toggle music.""" 
     2332        self.music = not self.music 
     2333        if self.music: 
     2334            self.play_music(self.now_playing, restart=True) 
     2335        else: 
     2336            pygame.mixer.music.stop() 
     2337 
     2338    def toggle_sound(self): 
     2339        """Toggle sound effects.""" 
     2340        self.sound = not self.sound 
     2341        for sound in self.sound_looping: 
     2342            if self.sound: 
     2343                self.sounds[sound].play(-1) 
     2344            else: 
     2345                self.sounds[sound].stop() 
     2346 
    23092347    def toggle_sound_in_vacuum(self): 
    23102348        """Toggle sound in vacuum."""