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()
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()
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()
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()
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()