예제 #1
0
def menufadeout(newslide):
    
    #print "== menufadeout =="
    #print "FROM ", newslide.getrealname()
    
    # Prepare OpenGL
    globals.prepare2DViewport()
    glEnable(GL_COLOR_MATERIAL)
    #glEnable(GL_BLEND)
    #glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
    
    #Fade new image into old image, from alpha = 1 to alpha = 255 with a configured step 
    for i in range(1, 255, parameters.getfadevelocity()):
        #Pause configurable delay
        pygame.time.delay(parameters.getdelay())
                
        glClear(GL_COLOR_BUFFER_BIT)
        
        glColor4f((255 - i)/255.0, (255 - i)/255.0, (255 - i)/255.0, 1.0)
        newslide.render()
        
        pygame.display.flip()

    glColor4f(1.0, 1.0, 1.0, 1.0)
    #glDisable(GL_BLEND)

    #Show the cursor
    globals.curcursor._show()
예제 #2
0
def rightscroll(newslide, oldslide):
    # Prepare OpenGL
    globals.prepare2DViewport()
    
    previous_time = pygame.time.get_ticks()
    
    #Fade new image into old image, from alpha = 1 to alpha = 255 with a configured step 
    for i in range(1, 255, parameters.getfadevelocity()):
        #Pause configurable delay
        if i > 1:
            new_time = pygame.time.get_ticks() 
            already_elapsed_time = new_time - previous_time
            time_to_wait = parameters.getdelay() - already_elapsed_time
            if time_to_wait > 0:
                pygame.time.delay(time_to_wait)
            previous_time = new_time
        
        oldslide.render(-(i/255.0)*parameters.getscreensize()[0], 0)
        newslide.render(-(i/255.0)*parameters.getscreensize()[0] + parameters.getscreensize()[0], 0)
        
        pygame.display.flip()
예제 #3
0
def menufadein(newslide):
    
    #print "== menufadein =="
    #print "TO ", newslide.getrealname()
    
    # Prepare OpenGL
    globals.prepare2DViewport()
    #glEnable(GL_BLEND)
    glEnable(GL_COLOR_MATERIAL)
    #glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
    
    previous_time = pygame.time.get_ticks()
    
    #Fade new image into old image, from alpha = 1 to alpha = 255 with a configured step 
    for i in range(1, 255, parameters.getfadevelocity()):
        #Pause configurable delay
        if i > 1:
            new_time = pygame.time.get_ticks() 
            already_elapsed_time = new_time - previous_time
            time_to_wait = parameters.getdelay() - already_elapsed_time
            if time_to_wait > 0:
                pygame.time.delay(time_to_wait)
            previous_time = new_time
        
        pygame.event.get()
        
        glClear(GL_COLOR_BUFFER_BIT)
        
        glColor4f(i/255.0, i/255.0, i/255.0, 1.0)
        newslide.render()
        
        pygame.display.flip()

    glColor4f(1.0, 1.0, 1.0, 1.0)
    #glDisable(GL_BLEND)

    #Show the cursor
    globals.curcursor._show()
예제 #4
0
def fade(newslide, oldslide):
    
    #print "== fade =="
    #print "From ",  "None" if oldslide is None else oldslide.getrealname()
    #print "To ", newslide.getrealname()
    #import traceback
    #traceback.print_stack()
    
    # Don't fade to yourself
    if oldslide is not None and oldslide.getname() == newslide.getname():
        return
    
    # FIXME: what use is this for??
    #If this is a UI slide, call the special trans for UI
    #if newslide._type == 'ui' and len(SlideManager._slide_stack) >= 2 and SlideManager._slide_stack[-2].gettype() == 'menu':
    #    menufadeout(newslide)
    #    return
    #If this is a menu slide, call the special trans for menu
    #elif oldslide is None or newslide._type == 'menu':
    #    menufadein(newslide)
    #    return
    
    if oldslide is None:
        menufadein(newslide)
        return
    
    #Object and Std slides need to be slide size and slide area only
    
    bothSimilar = (oldslide.is3D() == newslide.is3D())
    
    # Prepare OpenGL
    if bothSimilar:
        if oldslide.is3D():
            globals.prepare3DViewport()
        else:
            globals.prepare2DViewport()
    
    previous_time = pygame.time.get_ticks()
    
    #Fade new image into old image, from alpha = 1 to alpha = 255 with a configured step 
    for i in range(1, 255, parameters.getfadevelocity()):
        #Pause configurable delay
        if i > 1:
            new_time = pygame.time.get_ticks() 
            already_elapsed_time = new_time - previous_time
            time_to_wait = parameters.getdelay() - already_elapsed_time
            if time_to_wait > 0:
                pygame.time.delay(time_to_wait)
            previous_time = new_time
        
        if not bothSimilar:
            if oldslide.is3D():
                globals.prepare3DViewport()
            else:
                globals.prepare2DViewport()
            
        if oldslide.is3D():
            glPushMatrix()
            glRotatef(oldslide.pitch_angle, 1, 0, 0)
            glRotatef(oldslide.yaw_angle, 0, 1, 0)
            
        oldslide.render()
        
        if oldslide.is3D():
            glPopMatrix()
        
        glColor4f(1.0, 1.0, 1.0, i/255.0)
        
        if not bothSimilar:
            if newslide.is3D():
                globals.prepare3DViewport()
            else:
                globals.prepare2DViewport()
        
        if newslide.is3D():
            glPushMatrix()
            glRotatef(newslide.pitch_angle, 1, 0, 0)
            glRotatef(newslide.yaw_angle, 0, 1, 0)
        
        newslide.render()
        
        if newslide.is3D():
            glPopMatrix()
            
        glColor4f(1.0, 1.0, 1.0, 1.0)
        
        pygame.display.flip()

    #Show the cursor
    globals.curcursor._show()
예제 #5
0
def mainloop():
    pygame.init()
    globals.init()
    pygame.mouse.set_visible(0)
    parameters.setcursorpath(os.path.join('engine', 'enginedata', 'cursors'))
    parameters.settextpath(os.path.join('engine', 'enginedata', 'text'))
    initcursors()
    globals.curcursor = globals.cursors['forward']

    filemanager.push_dir(os.path.join('data', 'menu'))

    for curitem in globals.userareasordered:
        curitem._handleevent(fakeevent('init'))
        if curitem.isvisible():
            curitem._draw()
            
    menubar = menubararea((0, 0, parameters.getscreensize()[0], 40),
                          (0, 0, parameters.getscreensize()[0], 5), menumain, 1)
    
    defaultui = None
    startslides = parameters.getfirstslides()
    
    if not startslides[1]:
        print "==> Slide 1 is nul!! Will use bg.bmp"
        defaultui = slide('bg.bmp', type = 'ui')
        defaultui._bmpbuffer = pygame.Surface(globals.screenrect.size)
        defaultui._bmpbuffer.fill(parameters.getbackgroundcolor())
        startslides[1] = defaultui
        startslides[0]=defaultui
    
    # for the start, init the state manager manually... (FIXME)
    SlideManager._slide_stack.append(startslides[0])
    startslides[0].enter(None)
    
    globals.quit = 0
    drag = None
    
    # The area the cursor is currently in
    uha = None
    
    lastpos = (0,0)
    
    defaultui = None
    startslides = parameters.getfirstslides()
    if not startslides[1]:
        defaultui = slide('background','bg.bmp', type = 'ui')
        defaultui._bmpbuffer = pygame.Surface(globals.screenrect.size)
        defaultui._bmpbuffer.fill(parameters.getbackgroundcolor())
        uislide = defaultui
        startslides[1] = uislide
    
    #globals.transoverride = 'initfade'

    WIDTH = parameters.getscreensize()[0]
    HEIGHT = parameters.getscreensize()[1]
    
    previous_time = pygame.time.get_ticks()
    
    while not globals.quit:        
        new_time = pygame.time.get_ticks() 
        dt = new_time - previous_time
        
        # 16 milliseconds is roughly 60 FPS. Cap after that.
        if dt < 16:
            pygame.time.wait(16 - dt)
            new_time = pygame.time.get_ticks() 
            dt = new_time - previous_time
            
        previous_time = new_time
        
        for event in pygame.event.get():
            if globals.eventhandlers.has_key(event.type):
                globals.eventhandlers[event.type](event)
            elif event.type == pygame.USEREVENT:
                #print "event.type==USEREVENT"
                globals.timers[event.timerid].trigger()
            elif event.type == pygame.MOUSEMOTION and globals.curcursor.isenabled():
                if event.pos != lastpos:
                    lastpos = event.pos
                    #print event.pos
                    if uha != None:
                        if not uha.getrect().collidepoint(event.pos):
                            tmpevent = fakeevent('mouseexit')
                            uha._handleevent(tmpevent)
                            uha = None
                    #Route mouse event to proper object
                    if drag != None:
                        update = drag(event)
                        if update:
                            globals.curcursor._hide()
                            #Update mouse cursor with new location
                            globals.curcursor._handlemousemove(event)
                            globals.curcursor._show()
                    else:
                        #Mouse movement
                        #Hide mouse cursor
                        globals.curcursor._hide()
                        #Update mouse cursor with new location
                        globals.curcursor._handlemousemove(event)
                        uhatrapped = 0
                        for area in [item for item in globals.userareasordered if item.isenabled()]:
                            if area.getrect().collidepoint(event.pos):
                                if uha != None:
                                    if area != uha:
                                        tmpevent = fakeevent('mouseexit')
                                        uha._handleevent(tmpevent)
                                        uha = area
                                        tmpevent = fakeevent('mouseenter')
                                        uha._handleevent(tmpevent)
                                else:
                                    uha = area
                                    tmpevent = fakeevent('mouseenter')
                                    uha._handleevent(tmpevent)
                                uhatrapped = uha._handleevent(event)
                                break
                        if not uhatrapped:
                            current_slide = SlideManager.getCurrentSlide()
                            if current_slide.gettype() == 'menu':
                                if globals.screenrect.collidepoint(event.pos):
                                    if current_slide.isvisible():
                                        #print "MOUSE MOVE1 slide._currentuislide.name ",slide._currentuislide._realname
                                        current_slide._mousemove(event.pos)
                            else:
                                if globals.screenrect.collidepoint(event.pos):
                                    #print "if globals"
                                    if current_slide.isvisible():
                                        #print "if slide._currenslide"
                                        current_slide._mousemove(event.pos)
                        globals.curcursor._show()
            elif event.type == pygame.MOUSEBUTTONDOWN and globals.curcursor.isenabled():
                drag = None
                uhatrapped = 0
                for area in [item for item in globals.userareasordered if item.isenabled()]:
                    if area.getrect().collidepoint(event.pos):
                        uhatrapped = area._handleevent(event)
                        break
                if not uhatrapped:
                    current_slide = SlideManager.getCurrentSlide()
                    if current_slide.gettype() == 'menu':
                        if globals.screenrect.collidepoint(event.pos):
                            if current_slide.isvisible():
                                (drag, transitionOccurred) = current_slide.processClick()
                    else:
                        if globals.screenrect.collidepoint(event.pos):
                            if current_slide.isvisible():
                                (drag, transitionOccurred) = current_slide.processClick()
                    if drag:
                        update = drag(event)
                        if update:
                            globals.curcursor._hide()
                            #Update mouse cursor with new location
                            globals.curcursor._handlemousemove(event)
                            globals.curcursor._show()
                    # Ignore mouse movement that may have occurred during the transition
                    if transitionOccurred:
                        if mode == CENTER_MOUSE:
                            pygame.mouse.set_pos([WIDTH/2, HEIGHT/2])
            elif event.type == pygame.MOUSEBUTTONUP and globals.curcursor.isenabled():
                #print "event.type == pygame.MOUSEBUTTONUP and globals.curcursor.isenabled()"
                if drag != None:
                    drag(event)
                    drag = None
                uhatrapped = 0
                for area in [item for item in globals.userareasordered if item.isenabled()]:
                    if area.getrect().collidepoint(event.pos):
                        uhatrapped = area._handleevent(event)
                        break
            elif event.type == pygame.KEYDOWN:
                uhatrapped = 0
                for area in [item for item in globals.userareasordered if item.isenabled()]:
                    uhatrapped = area._handleevent(event)
                    if uhatrapped:
                        break
                if not uhatrapped:
                    if event.key == pygame.K_q:
                        globals.quit = 1
                if event.key == pygame.K_ESCAPE:
                    globals.stopallsound()
                    music.stopmusic()
                    
                    current_slide = SlideManager.getCurrentSlide()
                    if current_slide.gettype() == 'menu':
                        SlideManager.popSlide()
                    else:
                        SlideManager.pushSlide(menumain)
            elif event.type == pygame.QUIT:
                globals.quit = 1
               
        # == Rendering
        s =  SlideManager.getCurrentSlide()
        if s.is3D():
            globals.prepare3DViewport()
            
            (mx, my) = pygame.mouse.get_pos()
            
            if mode == CENTER_MOUSE:
                dx = mx - WIDTH/2
                dy = my - HEIGHT/2
                pygame.mouse.set_pos([WIDTH/2, HEIGHT/2])
                
                if is_in_3d_slide: # avoid jump when entering slide by calculating delta the 2nd time only
                    s.yaw_angle += dt*0.006 * dx
                    if s.yaw_angle < 0: s.yaw_angle += 360
                    elif s.yaw_angle > 360: s.yaw_angle -= 360
                    
                    s.pitch_angle += dt*0.006 * dy
                    if s.pitch_angle < -60:s. pitch_angle = -60
                    elif s.pitch_angle > 60: s.pitch_angle = 60
            else:
                if my < MOVE_MARGIN:
                    s.pitch_angle -= dt*0.1 * float(MOVE_MARGIN - my)/float(MOVE_MARGIN)
                    if s.pitch_angle < -60: s.pitch_angle = -60
                elif my > HEIGHT - MOVE_MARGIN:
                    s.pitch_angle += dt*0.1 * (1.0 - float(HEIGHT - my)/float(MOVE_MARGIN))
                    if s.pitch_angle > 60: s.pitch_angle = 60
                    
                if mx < MOVE_MARGIN:
                    s.yaw_angle -= dt*0.1 * float(MOVE_MARGIN - mx)/float(MOVE_MARGIN)
                    if s.yaw_angle < 0: s.yaw_angle += 360
                elif mx > WIDTH - MOVE_MARGIN:
                    s.yaw_angle += dt*0.1 * (1.0 - float(WIDTH - mx)/float(MOVE_MARGIN))
                    if s.yaw_angle > 359: s.yaw_angle -= 360
            
            # rotate camera
            glRotatef(s.pitch_angle, 1, 0, 0)
            glRotatef(s.yaw_angle, 0, 1, 0)
            
            is_in_3d_slide = True
        else:
            is_in_3d_slide = False
            globals.prepare2DViewport()
        
        # No need for transparency to render slides (don't move this class into Slide.render because
        # transitions still need it enabled)
        glDisable(GL_BLEND)
        
        if s.is3D():
            s.render()
        else:
            s.render()
        
        if s.is3D():
            s.pickHotSpot(mx, my)
            
            # back to 2D for the rest
            globals.prepare2DViewport()
        
        if globals.curcursor is not None:
            glEnable(GL_BLEND)
            
            if s.is3D() and mode == CENTER_MOUSE:
                globals.curcursor.renderAt(WIDTH/2, HEIGHT/2)
            else:  
                globals.curcursor.render()
        
        pygame.display.flip()
         
    for curtimer in globals.timers.values():
        curtimer.stop()