diff pytouhou/opengl/gamerenderer.py @ 130:11ab06f4c4c6

Introduce characters!
author Thibaut Girka <thib@sitedethib.com>
date Sat, 10 Sep 2011 22:48:56 +0200
parents 9d7129ee2c4f
children
line wrap: on
line diff
--- a/pytouhou/opengl/gamerenderer.py
+++ b/pytouhou/opengl/gamerenderer.py
@@ -35,7 +35,7 @@ class GameRenderer(pyglet.window.Window)
 
         self.texture_manager = TextureManager(resource_loader)
 
-        self.fps_display =         pyglet.clock.ClockDisplay()
+        self.fps_display = pyglet.clock.ClockDisplay()
 
         self.game = game
         self.background = background
@@ -65,27 +65,54 @@ class GameRenderer(pyglet.window.Window)
                         ctypes.byref(buff, 3 * 4),
                         ctypes.byref(buff, 3 * 4 + 2 * 4))
 
-        pyglet.clock.schedule_interval(self.update, 1./120.)
-        pyglet.app.run()
+        # Use our own loop to ensure 60 (for now, 120) fps
+        pyglet.clock.set_fps_limit(120)
+        while not self.has_exit:
+            pyglet.clock.tick()
+            self.dispatch_events()
+            self.update()
+            self.on_draw()
+            self.flip()
 
 
     def on_resize(self, width, height):
         glViewport(0, 0, width, height)
 
 
-    def update(self, dt):
+    def on_key_press(self, symbol, modifiers):
+        if symbol == pyglet.window.key.ESCAPE:
+            self.has_exit = True
+        # XXX: Fullscreen will be enabled the day pyglet stops sucking
+        elif symbol == pyglet.window.key.F11:
+            self.set_fullscreen(not self.fullscreen)
+
+
+    def update(self):
         if self.background:
             self.background.update(self.game.game_state.frame)
         if self.game:
-            self.game.run_iter(0) #TODO: self.keys...
-
-
-    def on_key_press(self, symbol, modifiers):
-        if symbol == pyglet.window.key.ESCAPE:
-            pyglet.app.exit()
-        # XXX: Fullscreen will be enabled the day pyglet stops sucking
-        elif symbol == pyglet.window.key.F11:
-            self.set_fullscreen(not self.fullscreen)
+            #TODO: allow user settings
+            keystate = 0
+            if self.keys[pyglet.window.key.W]:
+                keystate |= 1
+            if self.keys[pyglet.window.key.X]:
+                keystate |= 2
+            #TODO: on some configurations, LSHIFT is Shift_L when pressed
+            # and ISO_Prev_Group when released, confusing the hell out of pyglet
+            # and leading to a always-on LSHIFT...
+            if self.keys[pyglet.window.key.LSHIFT]:
+                keystate |= 4
+            if self.keys[pyglet.window.key.UP]:
+                keystate |= 16
+            if self.keys[pyglet.window.key.DOWN]:
+                keystate |= 32
+            if self.keys[pyglet.window.key.LEFT]:
+                keystate |= 64
+            if self.keys[pyglet.window.key.RIGHT]:
+                keystate |= 128
+            if self.keys[pyglet.window.key.LCTRL]:
+                keystate |= 256
+            self.game.run_iter(keystate) #TODO: self.keys...
 
 
     def render_elements(self, elements):
@@ -197,6 +224,7 @@ class GameRenderer(pyglet.window.Window)
             glDisable(GL_FOG)
             self.render_elements(game.enemies)
             self.render_elements(game.game_state.bullets)
+            self.render_elements(game.players)
             glEnable(GL_FOG)
 
         #TODO