-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTween.cpp
More file actions
executable file
·129 lines (103 loc) · 2.64 KB
/
Copy pathTween.cpp
File metadata and controls
executable file
·129 lines (103 loc) · 2.64 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// Copyright 2006-12 HumaNature Studios Inc.
#include "Tween.h"
#include "TweenCallback.h"
#include "Misc.h"
namespace core {
Tween::Tween(const char* name)
: mName(nullptr)
, mDelay(0.0f)
, mTime(0.0f)
, mFinalTime(-1.0f)
, OnStart(nullptr)
, OnUpdate(nullptr)
, OnComplete(nullptr)
, equation(TweenEquation::getEquation(TweenType_Default))
{
if(name != nullptr)
{
mName = new std::string(name);
}
}
Tween::~Tween()
{
SafeDelete(mName);
SafeDelete(OnStart);
SafeDelete(OnUpdate);
SafeDelete(OnComplete);
}
Tween& Tween::time(float value)
{
mFinalTime = value;
return *this;
}
Tween& Tween::delay(float value)
{
mDelay = value;
mTime = -mDelay;
return *this;
}
Tween& Tween::type(TweenType value)
{
equation = TweenEquation::getEquation(value);
return *this;
}
Tween& Tween::param(float* value, float target)
{
Param newParam;
// store pointer, current, target values
newParam.mValue = value;
newParam.mStartingValue = *value;
newParam.mTargetValue = target;
// push the parameter
params.push_back(newParam);
return *this;
}
Tween& Tween::restart()
{
mTime = -mDelay;
return *this;
}
void Tween::update(float deltaSeconds)
{
mTime = MathUtil::min(mTime + deltaSeconds, mFinalTime);
if (mTime < 0.0f)
{
return;
}
if(OnStart)
{
(*OnStart)();
SafeDelete(OnStart);
}
bool complete = isComplete();
for(auto i = params.begin(); i != params.end(); ++i)
{
auto p = *i;
if(complete)
{
*p.mValue = p.mTargetValue;
}
else
{
*p.mValue = equation(mTime, p.mStartingValue, p.mTargetValue - p.mStartingValue, mFinalTime);
}
}
if(OnUpdate)
{
(*OnUpdate)();
}
if(complete)
{
mFinalTime = -1.0f;
if (OnComplete)
{
(*OnComplete)();
}
}
}
bool Tween::isComplete()
{
// compare with an epsilon value to avoid rounding issues
return (mFinalTime - mTime) < 0.001f;
}
} // namespace core