Source code for pyunity.window.pygameWindow
"""Class to create a window using Pygame."""
import pygame
import os
os.environ["SDL_VIDEO_CENTERED"] = "1"
pygame.init()
[docs]class Window:
"""
A window provider that uses PyGame.
"""
def __init__(self, config, name, resize):
self.config = config
self.resize = resize
self.window = pygame.display.set_mode(
config.size, pygame.DOUBLEBUF | pygame.OPENGL | pygame.RESIZABLE)
pygame.display.set_caption(name)
self.keys = {
"up": [0 for i in range(323)],
"down": [0 for i in range(323)],
"pressed": [0 for i in range(323)],
}
[docs] def start(self, update_func):
"""
Start the main loop of the window.
Parameters
----------
update_func : function
The function that calls the OpenGL calls.
"""
self.update_func = update_func
done = False
clock = pygame.time.Clock()
pygame.display.flip()
while not done:
self.keys["up"] = [0 for i in range(323)]
self.keys["down"] = [0 for i in range(323)]
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.VIDEORESIZE:
self.resize(*event.dict['size'])
self.update_func()
pygame.display.flip()
elif event.type == pygame.KEYDOWN:
self.keys["down"][event.key] = 1
elif event.type == pygame.KEYUP:
self.keys["up"][event.key] = 1
pressed = pygame.key.get_pressed()
self.keys["pressed"] = pressed
alt_pressed = pressed[pygame.K_LALT] or pressed[pygame.K_RALT]
if pressed[pygame.K_ESCAPE] or (alt_pressed and pressed[pygame.K_F4]):
done = True
self.update_func()
pygame.display.flip()
clock.tick(self.config.fps)
pygame.display.quit()
[docs] def get_keys(self):
return self.keys["pressed"]
[docs] def get_keys_down(self):
return self.keys["down"]
[docs] def get_keys_up(self):
return self.keys["up"]