code: def on_timer(self, event):
      self.elapsed_time += 1.0 / 60.0
      if self.elapsed_time > 1.5:
          self.new_explosion()
          self.elapsed_time = 0.0
  
      loc = gl.glGetUniformLocation(self.program, "time")
      gl.glUniform1f(loc, self.elapsed_time)
      self.update()
  
file_path: vispy/examples/gloo/gl/fireworks.py
imports: import numpy
  from vispy import app
  from vispy.gloo import gl
label_desc: Use image node_id 5 for calling the Canvas obj's underlying member method code with example usage: obj.on_timer(event) without return types