Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
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(
Wait(delay),
Func(function, *args, **kwargs)
)
s.start()
return s
def destroy(entity, delay=0):
if delay == 0:
_destroy(entity)
return
s = Sequence(
Wait(delay),
Func(_destroy, entity)
)
s.start()
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, curve=curve.in_expo, resolution=None, interrupt=True, time_step=None):
animator_name = name + '_animator'
# print('start animating value:', name, animator_name )
if interrupt and hasattr(self, animator_name):
try:
getattr(self, animator_name).pause()
# print('interrupt', animator_name)
except:
pass
else:
try:
getattr(self, animator_name).finish()
except:
pass
setattr(self, animator_name, Sequence(time_step=time_step))
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)))
def __init__(self, *args, **kwargs):
super().__init__()
self.args = list(args)
self.t = 0
self.time_step = Sequence.default_time_step
self.duration = 0
self.funcs = list()
self.paused = True
self.loop = False
self.auto_destroy = True
for key, value in kwargs.items():
setattr(self, key, value)
self.generate()
application.sequences.append(self)
if hasattr(entity, 'on_destroy'):
entity.on_destroy()
if hasattr(entity, 'scripts'):
for s in entity.scripts:
del s
if hasattr(entity, 'animations'):
for anim in entity.animations:
anim.finish()
anim.kill()
if hasattr(entity, 'tooltip'):
destroy(entity.tooltip)
# entity.tooltip.removeNode()
if hasattr(entity, '_on_click') and isinstance(entity._on_click, Sequence):
entity._on_click.kill()
entity.removeNode()
#unload texture
# if hasattr(entity, 'texture') and entity.texture != None:
# entity.texture.releaseAll()
del entity
f.finished = False
self.t = 0
return
if self.auto_destroy and self in application.sequences:
application.sequences.remove(self)
del self
if __name__ == '__main__':
app = Ursina()
e = Entity(model='quad')
s = Sequence(
1,
Func(print, 'one'),
Func(e.fade_out, duration=1),
1,
Func(print, 'two'),
Func(e.fade_in, duration=1),
loop=True
)
s.append(
Func(print, 'appended to sequence')
)
def input(key):
actions = {'s' : s.start, 'f' : s.finish, 'p' : s.pause, 'r' : s.resume}
if key in actions:
def blink(self, value=color.clear, duration=.1, delay=0, curve=curve.in_expo, resolution=None, interrupt=False, time_step=None):
_original_color = self.color
if hasattr(self, 'blink_animator'):
self.blink_animator.finish()
self.blink_animator.kill()
# print('finish blink_animator')
self.blink_animator = Sequence(
Func(self.animate_color, value, duration*.4, 0, curve, resolution, interrupt),
Func(self.animate_color, _original_color, duration*.4, duration*.5, curve, resolution, interrupt, time_step)
)
self.blink_animator.start()
return self.blink_animator