Пример #1
0
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
Пример #2
0
 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
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
    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
Пример #6
0
 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()