-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathTweener.cs
More file actions
87 lines (74 loc) · 2.22 KB
/
Copy pathTweener.cs
File metadata and controls
87 lines (74 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public partial class Tweener : MonoBehaviour
{
public bool playOnAwake;
public bool ignoreTimeScale;
public float curTime;
public bool isPlaying;
[SerializeField]
public TweenData tweenData;
public System.Action completionCallback;
void Awake()
{
if (playOnAwake)
Play();
}
public void Play()
{
curTime = 0f;
isPlaying = true;
tweenData.Init();
}
public void Stop()
{
isPlaying = false;
}
public void Update()
{
if (!isPlaying || (object)tweenData == null)
return;
if (ignoreTimeScale)
curTime += Time.unscaledDeltaTime;
else
curTime += Time.deltaTime;
var playTime = curTime;
switch (tweenData.loopType) {
case TweenData.LoopType.PlayOnce:
if (curTime >= tweenData.duration) {
tweenData.End(false);
isPlaying = false;
completionCallback?.Invoke();
return;
}
break;
case TweenData.LoopType.Loop:
if (curTime >= tweenData.duration) {
curTime -= tweenData.duration;
}
break;
case TweenData.LoopType.PingPongOnce:
if (curTime >= tweenData.duration * 2f) {
tweenData.End(true);
isPlaying = false;
completionCallback?.Invoke();
return;
}
else if (curTime >= tweenData.duration) {
playTime = tweenData.duration * 2f - curTime;
}
break;
case TweenData.LoopType.PingPongLoop:
if (curTime >= tweenData.duration * 2f) {
curTime -= tweenData.duration * 2f;
playTime = curTime;
}
else if (curTime >= tweenData.duration) {
playTime = tweenData.duration * 2f - curTime;
}
break;
}
tweenData.Update(playTime);
}
}