Skip to content

Commit 6b01a8a

Browse files
committed
Improved timer and rocket support
1 parent 5361167 commit 6b01a8a

File tree

9 files changed

+81
-38
lines changed

9 files changed

+81
-38
lines changed

demosys/conf/default_settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
ROCKET = {
3838
'mode': 'editor',
39+
'rps': 24,
3940
'project_file': None,
4041
'files': None,
4142
}

demosys/timers/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
from .base import Timer # noqa
1+
from .time import Timer # noqa
22
from .music import MusicTimer # noqa
33
from .rocket import RocketTimer # noqa
4+
from .rocketmusic import RocketMusicTimer # noqa

demosys/timers/base.py

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,26 @@
1-
import glfw
21

32

4-
class Timer:
3+
class BaseTimer:
54
"""Timer based on glfw time"""
65
def __init__(self, **kwargs):
7-
self.start_time = None
8-
self.stop_time = None
9-
self.pause_time = None
10-
self.offset = 0
6+
pass
117

128
def start(self):
13-
# Initial start?
14-
if self.start_time is None:
15-
self.start_time = glfw.get_time()
16-
# Play after pause
17-
else:
18-
# Add the duration of the paused interval to the total offset
19-
pause_duration = glfw.get_time() - self.pause_time
20-
self.offset += pause_duration
21-
# print("pause duration", pause_duration, "offset", self.offset)
22-
# Exit the paused state
23-
self.pause_time = None
9+
"""Start the timer"""
10+
raise NotImplemented
2411

2512
def pause(self):
26-
self.pause_time = glfw.get_time()
13+
"""Pause the timer"""
14+
raise NotImplemented
2715

2816
def toggle_pause(self):
29-
if self.pause_time:
30-
self.start()
31-
else:
32-
self.pause()
17+
"""Toggle pause"""
18+
raise NotImplemented
3319

3420
def stop(self):
35-
self.stop_time = glfw.get_time()
36-
return self.stop_time - self.start_time - self.offset
21+
"""Stop the timer"""
22+
raise NotImplemented
3723

3824
def get_time(self):
39-
if self.pause_time is not None:
40-
time = self.pause_time - self.offset - self.start_time
41-
return time
42-
43-
time = glfw.get_time()
44-
return time - self.start_time - self.offset
25+
"""Get the current time in seconds (float)"""
26+
raise NotImplemented

demosys/timers/music.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import glfw
22
from pygame import mixer
3-
from .base import Timer
43
from demosys.conf import settings
4+
from .base import BaseTimer
55

66

7-
class MusicTimer(Timer):
7+
class MusicTimer(BaseTimer):
88
"""Timer based on music"""
99
def __init__(self, **kwargs):
1010
mixer.init()
@@ -14,6 +14,7 @@ def __init__(self, **kwargs):
1414
self.pause_time = 0
1515
self.initialized = False
1616
self._upt = 0 # hack fixing jaggy unpause
17+
super().__init__(**kwargs)
1718

1819
def start(self):
1920
if self.initialized:

demosys/timers/rocket.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
from rocket.controllers import TimeController
22
from rocket import Rocket
33
from demosys.resources import tracks
4+
from demosys.conf import settings
5+
from .base import BaseTimer
46

57

6-
class RocketTimer:
8+
class RocketTimer(BaseTimer):
79
"""Basic rocket timer"""
8-
def __init__(self, config):
10+
def __init__(self, **kwargs):
11+
config = getattr(settings, 'ROCKET', None)
912
if config is None:
1013
config = {}
1114

1215
self.mode = config.get('mode') or 'editor'
1316
self.files = config.get('files') or './tracks'
1417
self.project = config.get('project') or 'project.xml'
1518

16-
self.controller = TimeController(24)
19+
self.controller = TimeController(config.get('rps', 24))
1720
if self.mode == 'editor':
1821
self.rocket = Rocket.from_socket(self.controller, track_path=self.files)
1922
elif self.mode == 'project':
@@ -33,6 +36,7 @@ def __init__(self, config):
3336
self.rocket.track(track.name)
3437

3538
self.rocket.update()
39+
super().__init__(**kwargs)
3640

3741
def start(self):
3842
self.rocket.start()

demosys/timers/rocketmusic.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from .rocket import RocketTimer
2+
from .music import MusicTimer
3+
4+
5+
class RocketMusicTimer(RocketTimer):
6+
def __init__(self, **kwargs):
7+
self.music = MusicTimer()
8+
super().__init__(**kwargs)

demosys/timers/time.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import glfw
2+
from .base import BaseTimer
3+
4+
5+
class Timer(BaseTimer):
6+
"""Timer based on glfw time"""
7+
def __init__(self, **kwargs):
8+
self.start_time = None
9+
self.stop_time = None
10+
self.pause_time = None
11+
self.offset = 0
12+
super().__init__(**kwargs)
13+
14+
def start(self):
15+
# Initial start?
16+
if self.start_time is None:
17+
self.start_time = glfw.get_time()
18+
# Play after pause
19+
else:
20+
# Add the duration of the paused interval to the total offset
21+
pause_duration = glfw.get_time() - self.pause_time
22+
self.offset += pause_duration
23+
# print("pause duration", pause_duration, "offset", self.offset)
24+
# Exit the paused state
25+
self.pause_time = None
26+
27+
def pause(self):
28+
self.pause_time = glfw.get_time()
29+
30+
def toggle_pause(self):
31+
if self.pause_time:
32+
self.start()
33+
else:
34+
self.pause()
35+
36+
def stop(self):
37+
self.stop_time = glfw.get_time()
38+
return self.stop_time - self.start_time - self.offset
39+
40+
def get_time(self):
41+
if self.pause_time is not None:
42+
time = self.pause_time - self.offset - self.start_time
43+
return time
44+
45+
time = glfw.get_time()
46+
return time - self.start_time - self.offset

demosys/view/controller.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def run(manager=None):
5757
# Initialize timer
5858
global TIMER
5959
timer_cls = module_loading.import_string(settings.TIMER)
60-
TIMER = timer_cls(getattr(settings, 'ROCKET'))
60+
TIMER = timer_cls()
6161
TIMER.start()
6262

6363
frames, ft = 0, 0

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name="demosys-py",
5-
version="0.3.2",
5+
version="0.3.3",
66
description="Modern OpenGL 4.1+ Prototype Framework inspired by Django",
77
long_description=open('README.rst').read(),
88
url="https://github.com/Contraz/demosys-py",

0 commit comments

Comments
 (0)