File: scheduling_example.py

package info (click to toggle)
python-moderngl-window 2.4.6-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 69,220 kB
  • sloc: python: 11,387; makefile: 21
file content (43 lines) | stat: -rw-r--r-- 1,615 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import moderngl_window
import random
from moderngl_window.utils.scheduler import Scheduler


class CubeSimpleInstancedScheduler(moderngl_window.WindowConfig):
    """Schedule one-off and recurring events"""

    title = "Scheduling example"
    aspect_ratio = None

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # create a instance of the Scheduler and tell it to use the windows internal timer
        # if we dont pass a timer `time.time()` will be used.
        # by using the internal Timer class the pause and time setting functions
        # will effect our events aswell.
        self.scheduler = Scheduler(self.timer)

        # change the color every 1/2 seconds
        color_changing_event = self.scheduler.run_every(self.change_color, 1 / 2)
        # cancel the color changing event after 2 seconds using a priority of 2
        self.scheduler.cancel(color_changing_event, delay=2)
        # restart it after another 2 seconds (4 seconds total)
        color_changing_event = self.scheduler.run_every(
            self.change_color, 1 / 2, initial_delay=4
        )

        # after 5 seconds change the window title
        self.scheduler.run_once(self.change_title, 5, arguments=("Changed title",))

    def change_title(self, new_title):
        self.wnd.title = new_title

    def change_color(self):
        self.clear_color = (random.random(), random.random(), random.random(), 0)

    def render(self, time: float, frametime: float):
        self.scheduler.execute()


if __name__ == "__main__":
    moderngl_window.run_window_config(CubeSimpleInstancedScheduler)