From: Alexis Laferrière Date: Sun, 18 Jun 2017 00:31:46 +0000 (-0400) Subject: gamnit: pass the elapsed time in the world of each sprite set to the shader X-Git-Url: http://nitlanguage.org gamnit: pass the elapsed time in the world of each sprite set to the shader Signed-off-by: Alexis Laferrière --- diff --git a/lib/gamnit/flat.nit b/lib/gamnit/flat.nit index b278029..b70d010 100644 --- a/lib/gamnit/flat.nit +++ b/lib/gamnit/flat.nit @@ -393,6 +393,7 @@ redef class App perf_clock_main.lapse var dt = clock.lapse.to_f update dt + frame_dt = dt sys.perfs["gamnit flat update client"].add perf_clock_main.lapse # Draw and flip screen @@ -404,6 +405,8 @@ redef class App assert gl_error == gl_NO_ERROR else print_error gl_error end + private var frame_dt = 0.0 + # Draw the whole screen, all `glDraw...` calls should be executed here protected fun frame_core_draw(display: GamnitDisplay) do @@ -425,6 +428,9 @@ redef class App simple_2d_program.use simple_2d_program.mvp.uniform camera.mvp_matrix + sprite_set.time += frame_dt*sprite_set.time_mod + simple_2d_program.time.uniform sprite_set.time + # draw sprite_set.draw end @@ -507,6 +513,9 @@ private class Simple2dProgram // Model view projection matrix uniform mat4 mvp; + // Current world time, in seconds + uniform float time; + // Rotation matrix attribute vec4 rotation_row0; attribute vec4 rotation_row1; @@ -675,6 +684,12 @@ private class SpriteSet # Sprites needing resorting in `contexts_map` var sprites_to_remap = new Array[Sprite] + # Animation speed multiplier (0.0 to pause, 1.0 for normal speed, etc.) + var time_mod = 1.0 is writable + + # Seconds elapsed since the launch of the program, in world time responding to `time_mod` + var time = 0.0 + # Add a sprite to the appropriate context fun map_sprite(sprite: Sprite) do