def invoke(function, *args, **kwargs): delay = 0 if 'delay' in kwargs: delay = kwargs['delay'] del kwargs['delay'] if not delay: function(*args, **kwargs) return function s = Sequence() s.append(Wait(delay)) s.append(Func(function, *args, **kwargs)) s.start() return s
def animate(self, name, value, duration=.1, delay=0, curve=curve.in_expo, resolution=None, interrupt=True, time_step=None): s = Sequence( Wait(delay), Func(self._animate, name, value, duration, curve, resolution, interrupt, time_step)) s.start() return s
def _animate(self, name, value, duration=.1, curve=curve.in_expo, loop=False, resolution=None, interrupt=True, time_step=None, auto_destroy=True): animator_name = name + '_animator' # print('start animating value:', name, animator_name ) if interrupt and hasattr(self, animator_name): getattr(self, animator_name).pause() # print('interrupt', animator_name) else: try: getattr(self, animator_name).finish() except: pass setattr( self, animator_name, Sequence(loop=loop, time_step=time_step, auto_destroy=auto_destroy)) sequence = getattr(self, animator_name) self.animations.append(sequence) # sequence.append(Wait(delay)) if not resolution: resolution = max(int(duration * 60), 1) for i in range(resolution + 1): t = i / resolution # if isinstance(curve, CubicBezier): # t = curve.calculate(t) # else: t = curve(t) sequence.append(Wait(duration / resolution)) sequence.append( Func(setattr, self, name, lerp(getattr(self, name), value, t))) sequence.start() return sequence
def appear(self, speed=.025, delay=0): from ursina.ursinastuff import invoke self.enabled = True # self.visible = True # setting visible seems to reset the colors if self.appear_sequence: self.appear_sequence.finish() x = 0 self.appear_sequence = Sequence() for i, tn in enumerate(self.text_nodes): target_text = tn.node().getText() tn.node().setText('') new_text = '' for j, char in enumerate(target_text): new_text += char self.appear_sequence.append(Wait(speed)) self.appear_sequence.append(Func(tn.node().setText, new_text)) self.appear_sequence.start() return self.appear_sequence
def animate(self, name, value, duration=.1, delay=0, curve=curve.in_expo, loop=False, resolution=None, interrupt='kill', time_step=None, auto_destroy=True): animator_name = name + '_animator' # print('start animating value:', name, animator_name ) if interrupt and hasattr(self, animator_name): getattr(getattr(self, animator_name), interrupt)( ) # call kill() or finish() depending on what the interrupt value is. # print('interrupt', interrupt, animator_name) sequence = Sequence(loop=loop, time_step=time_step, auto_destroy=auto_destroy) setattr(self, animator_name, sequence) self.animations.append(sequence) sequence.append(Wait(delay)) if not resolution: resolution = max(int(duration * 60), 1) for i in range(resolution + 1): t = i / resolution t = curve(t) sequence.append(Wait(duration / resolution)) sequence.append( Func(setattr, self, name, lerp(getattr(self, name), value, t))) sequence.start() return sequence
def animate(self, name, value, duration=.1, delay=0, curve=curve.in_expo, resolution=None, interrupt=True): Sequence( Wait(delay), Func(self._animate, name, value, duration, curve, resolution, interrupt) ).start()