import sys
import imp
import pygame
from pygame.locals import *
from Sprite import Sprite
try:
from OpenGL.GL import *
from OpenGL.GLU import *
except:
print 'sprite_engine requires PyOpenGL'
raise SystemExit
import config
fpsman = pygame.time.Clock()
def init(resolution=(640,480)):
pygame.init()
try:
sres = [int(n * config.scalefactor) for n in resolution]
except AttributeError:
sres = resolution
flags = OPENGL|DOUBLEBUF
try:
if config.fullscreen:
flags |= FULLSCREEN
except AttributeError:
pass
pygame.display.set_mode(sres, flags)
glViewport(0, 0, sres[0], sres[1])
glLoadIdentity()
glMatrixMode(GL_PROJECTION)
zdepth = sum(resolution) / 2
glFrustum(0,resolution[0],0,resolution[1],zdepth,zdepth * 10)
glTranslate(0,0,-zdepth)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable(GL_TEXTURE_2D)
glEnable(GL_BLEND)
glDisable(GL_DITHER)
glShadeModel(GL_FLAT)
glEnable(GL_CULL_FACE)
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST)
glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST)
glEnableClientState(GL_VERTEX_ARRAY)
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
running = True
level = None
eventhandlers = []
updaters = []
drawers = []
def loadLevel(name):
global level
unloadLevel()
fp, pathname, description = imp.find_module(name)
level = imp.load_module(name, fp, pathname, description)
updaters.insert(0, level.update)
drawers.insert(0, level.draw)
return level
def unloadLevel():
global level
if level:
updaters.remove(level.update)
drawers.remove(level.draw)
level = None
def stop():
global running
running = False
def run():
global running
running = True
while running:
events = pygame.event.get()
for e in events:
for h in eventhandlers:
h(e)
glClear(GL_COLOR_BUFFER_BIT)
for update in updaters:
update()
for draw in drawers:
draw()
pygame.display.flip()
fpsman.tick(60)