Skip to content

Commit 97efef4

Browse files
Add a time property to Scene (#3997)
* Add a time property to scene * fix mistaken search/replace * Add typehint
1 parent ee0501c commit 97efef4

File tree

3 files changed

+19
-16
lines changed

3 files changed

+19
-16
lines changed

manim/scene/scene.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ def __init__(
158158
def camera(self):
159159
return self.renderer.camera
160160

161+
@property
162+
def time(self) -> float:
163+
"""The time since the start of the scene."""
164+
return self.renderer.time
165+
161166
def __deepcopy__(self, clone_from_id):
162167
cls = self.__class__
163168
result = cls.__new__(cls)
@@ -1083,15 +1088,15 @@ def play(
10831088
)
10841089
return
10851090

1086-
start_time = self.renderer.time
1091+
start_time = self.time
10871092
self.renderer.play(self, *args, **kwargs)
1088-
run_time = self.renderer.time - start_time
1093+
run_time = self.time - start_time
10891094
if subcaption:
10901095
if subcaption_duration is None:
10911096
subcaption_duration = run_time
10921097
# The start of the subcaption needs to be offset by the
10931098
# run_time of the animation because it is added after
1094-
# the animation has already been played (and Scene.renderer.time
1099+
# the animation has already been played (and Scene.time
10951100
# has already been updated).
10961101
self.add_subcaption(
10971102
content=subcaption,
@@ -1504,7 +1509,7 @@ def add_subcaption(
15041509
r"""Adds an entry in the corresponding subcaption file
15051510
at the current time stamp.
15061511
1507-
The current time stamp is obtained from ``Scene.renderer.time``.
1512+
The current time stamp is obtained from ``Scene.time``.
15081513
15091514
Parameters
15101515
----------
@@ -1541,10 +1546,8 @@ def construct(self):
15411546
subtitle = srt.Subtitle(
15421547
index=len(self.renderer.file_writer.subcaptions),
15431548
content=content,
1544-
start=datetime.timedelta(seconds=float(self.renderer.time + offset)),
1545-
end=datetime.timedelta(
1546-
seconds=float(self.renderer.time + offset + duration)
1547-
),
1549+
start=datetime.timedelta(seconds=float(self.time + offset)),
1550+
end=datetime.timedelta(seconds=float(self.time + offset + duration)),
15481551
)
15491552
self.renderer.file_writer.subcaptions.append(subtitle)
15501553

@@ -1592,7 +1595,7 @@ def construct(self):
15921595
"""
15931596
if self.renderer.skip_animations:
15941597
return
1595-
time = self.renderer.time + time_offset
1598+
time = self.time + time_offset
15961599
self.renderer.file_writer.add_sound(sound_file, time, gain, **kwargs)
15971600

15981601
def on_mouse_motion(self, point, d_point):

tests/module/scene/test_scene.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ def test_scene_add_remove(dry_run):
4141

4242
def test_scene_time(dry_run):
4343
scene = Scene()
44-
assert scene.renderer.time == 0
44+
assert scene.time == 0
4545
scene.wait(2)
46-
assert scene.renderer.time == 2
46+
assert scene.time == 2
4747
scene.play(FadeIn(Circle()), run_time=0.5)
48-
assert pytest.approx(scene.renderer.time) == 2.5
48+
assert pytest.approx(scene.time) == 2.5
4949
scene.renderer._original_skipping_status = True
5050
scene.play(FadeIn(Square()), run_time=5) # this animation gets skipped.
51-
assert pytest.approx(scene.renderer.time) == 7.5
51+
assert pytest.approx(scene.time) == 7.5
5252

5353

5454
def test_subcaption(dry_run):

tests/test_scene_rendering/test_play_logic.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ def test_non_static_wait_detection(using_temp_config, disabling_caching):
7878
def test_wait_with_stop_condition(using_temp_config, disabling_caching):
7979
class TestScene(Scene):
8080
def construct(self):
81-
self.wait_until(lambda: self.renderer.time >= 1)
82-
assert self.renderer.time >= 1
81+
self.wait_until(lambda: self.time >= 1)
82+
assert self.time >= 1
8383
d = Dot()
8484
d.add_updater(lambda mobj, dt: self.add(Mobject()))
8585
self.add(d)
8686
self.play(Wait(run_time=5, stop_condition=lambda: len(self.mobjects) > 5))
8787
assert len(self.mobjects) > 5
88-
assert self.renderer.time < 2
88+
assert self.time < 2
8989

9090
scene = TestScene()
9191
scene.render()

0 commit comments

Comments
 (0)