3b1b-manim/manimlib/continual_animation/update.py

57 lines
1.7 KiB
Python
Raw Normal View History

2018-08-09 17:56:05 -07:00
2018-03-31 15:37:23 -07:00
from manimlib.animation.update import MaintainPositionRelativeTo
from manimlib.continual_animation.continual_animation import ContinualAnimation
from manimlib.mobject.value_tracker import ValueTracker
2018-03-31 15:37:23 -07:00
class ContinualUpdate(ContinualAnimation):
2018-03-31 15:37:23 -07:00
CONFIG = {
"function_depends_on_dt": False
2018-03-31 15:37:23 -07:00
}
2018-03-31 15:37:23 -07:00
def __init__(self, mobject, func, **kwargs):
self.func = func
ContinualAnimation.__init__(self, mobject, **kwargs)
def update_mobject(self, dt):
if self.function_depends_on_dt:
self.func(self.mobject, dt)
else:
self.func(self.mobject)
class ContinualUpdateFromTimeFunc(ContinualUpdate):
2018-03-31 15:37:23 -07:00
CONFIG = {
"function_depends_on_dt": True
2018-03-31 15:37:23 -07:00
}
2018-03-31 15:37:23 -07:00
class ContinualMaintainPositionRelativeTo(ContinualAnimation):
# TODO: Possibly reimplement using CycleAnimation?
def __init__(self, mobject, tracked_mobject, **kwargs):
self.anim = MaintainPositionRelativeTo(
mobject, tracked_mobject, **kwargs)
2018-03-31 15:37:23 -07:00
ContinualAnimation.__init__(self, mobject, **kwargs)
def update_mobject(self, dt):
self.anim.update(0) # 0 is arbitrary
2018-05-16 00:05:19 -07:00
# TODO, maybe factor into a different file
class ContinualGrowValue(ContinualAnimation):
CONFIG = {
"rate": 1,
}
def __init__(self, value_tracker, **kwargs):
if not isinstance(value_tracker, ValueTracker):
raise Exception("ContinualGrowValue must take a ValueTracker as its mobject")
self.value_tracker = value_tracker
ContinualAnimation.__init__(self, value_tracker, **kwargs)
def update_mobject(self, dt):
self.value_tracker.set_value(
self.value_tracker.get_value() + self.rate * dt
)