Show
Ignore:
Timestamp:
12/25/06 18:55:40 (5 years ago)
Author:
mg
Message:

Fade in a "Paused" message when you press Pause.

Files:
1 modified

Legend:

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

    r225 r226  
    1010import glob 
    1111import time 
     12import math 
    1213import random 
    1314import itertools 
     
    168169    beta = 1-alpha 
    169170    return (int(alpha*r1+beta*r2), int(alpha*g1+beta*g2), int(alpha*b1+beta*b2)) 
     171 
     172 
     173def smooth(x, xmax, y1, y2): 
     174    """Calculate a smooth transition from y1 to y2 as x moves from 0 to xmax. 
     175 
     176        >>> for x in range(10): 
     177        ...     print '*' * int(smooth(x, 9, 1, 10)) 
     178        * 
     179        * 
     180        * 
     181        ** 
     182        **** 
     183        ****** 
     184        ******** 
     185        ********* 
     186        ********* 
     187        ********* 
     188 
     189    """ 
     190    t = -5 + 10 * (float(x) / xmax) 
     191    value = 1 / (1 + math.exp(-t)) 
     192    return y1 + (y2 - y1) * value 
     193 
    170194 
    171195 
     
    10021026    fg_color = (220, 255, 255) 
    10031027    bg_color = (24, 120, 14) 
     1028    alpha = int(255 * 0.9) 
    10041029 
    10051030    def __init__(self, font, text, xpadding=16, ypadding=16, xalign=0.5, 
     
    10141039        self.text = text 
    10151040        self.surface = pygame.Surface((self.width, self.height)) 
    1016         self.surface.set_alpha(255 * 0.9) 
    10171041        self.surface.set_colorkey((1, 1, 1)) 
    10181042        self.surface.fill(self.bg_color) 
     
    10301054        """Draw the element.""" 
    10311055        x, y = self.position(surface) 
     1056        self.surface.set_alpha(self.alpha) 
    10321057        surface.blit(self.surface, (x, y)) 
    10331058 
     
    11461171    paused = True 
    11471172 
     1173    show_message_after = 1 # seconds 
     1174    fade_in_time = 5 # seconds 
     1175 
     1176    def enter(self, prev_mode): 
     1177        """Enter the mode.""" 
     1178        UIMode.enter(self, prev_mode) 
     1179        self.message = None 
     1180        self.pause_entered = time.time() 
     1181        self.animate = self.wait_for_fade 
     1182 
    11481183    def draw(self, screen): 
    11491184        """Draw extra things pertaining to the mode.""" 
    11501185        self.prev_mode.draw(screen) 
     1186        if self.animate: 
     1187            self.animate() 
     1188        if self.message: 
     1189            self.message.draw(screen) 
     1190 
     1191    def wait_for_fade(self): 
     1192        if time.time() >= self.pause_entered + self.show_message_after: 
     1193            self.message = HUDMessage(self.ui.menu_font, "Paused") 
     1194            self.message.alpha = 0 
     1195            self.animate = self.fade_in 
     1196 
     1197    def fade_in(self): 
     1198        t = time.time() - self.pause_entered - self.show_message_after 
     1199        if t > self.fade_in_time: 
     1200            self.message.alpha = int(255 * 0.9) 
     1201            self.animate = None 
     1202        else: 
     1203            self.message.alpha = int(smooth(t, self.fade_in_time, 0, 255 * 0.9)) 
    11511204 
    11521205    def handle_any_other_key(self, event):