/
Fx.cpp
258 lines (207 loc) · 10.5 KB
/
Fx.cpp
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
#include "ifx.h"
#include "RadiantTest.h"
namespace test
{
using FxTest = RadiantTest;
inline fx::IFxDeclaration::Ptr getFxByName(const std::string& name)
{
return GlobalFxManager().findFx(name);
}
TEST_F(FxTest, GetFxByName)
{
EXPECT_TRUE(GlobalFxManager().findFx("fx/tdm_flame"));
EXPECT_TRUE(GlobalFxManager().findFx("fx/sparks"));
}
TEST_F(FxTest, GetNumActions)
{
EXPECT_EQ(getFxByName("fx/tdm_flame")->getNumActions(), 1);
EXPECT_EQ(getFxByName("fx/sparks")->getNumActions(), 3);
}
TEST_F(FxTest, GetAction)
{
EXPECT_TRUE(getFxByName("fx/tdm_flame")->getAction(0));
EXPECT_TRUE(getFxByName("fx/sparks")->getAction(1));
// Out of range requests will throw
EXPECT_THROW(getFxByName("fx/tdm_flame")->getAction(1), std::out_of_range);
EXPECT_THROW(getFxByName("fx/tdm_flame")->getAction(10), std::out_of_range);
}
TEST_F(FxTest, ParseBindTo)
{
EXPECT_EQ(getFxByName("fx/tdm_flame")->getBindTo(), "Head");
}
TEST_F(FxTest, ParseActionDelay)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getDelay(), 0);
EXPECT_EQ(getFxByName("fx/sparks")->getAction(1)->getDelay(), 2);
EXPECT_EQ(getFxByName("fx/sparks")->getAction(2)->getDelay(), 1.5f);
}
TEST_F(FxTest, ParseActionIgnoreMaster)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getIgnoreMaster(), false);
EXPECT_EQ(getFxByName("fx/parserTest1")->getAction(0)->getIgnoreMaster(), true);
}
TEST_F(FxTest, ParseActionShake)
{
// shake 1.3, 2.7, 0.7 , 1 , 0.33
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getType(), fx::IFxAction::Type::Shake);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getShakeTime(), 1.3f);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getShakeAmplitude(), 2.7f);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getShakeDistance(), 0.7f);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getShakeFalloff(), true);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getShakeImpulse(), 0.33f);
// shake 0.0, 2, .7 , 0 , 0.33
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(1)->getType(), fx::IFxAction::Type::Shake);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(1)->getShakeTime(), 0);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(1)->getShakeAmplitude(), 2.0f);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(1)->getShakeDistance(), 0.7f);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(1)->getShakeFalloff(), false);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(1)->getShakeImpulse(), 0.33f);
}
TEST_F(FxTest, ParseActionNoShadows)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getNoShadows(), false);
EXPECT_EQ(getFxByName("fx/parserTest1")->getAction(0)->getNoShadows(), true);
}
TEST_F(FxTest, ParseActionName)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getName(), "");
EXPECT_EQ(getFxByName("fx/parserTest/name")->getAction(0)->getName(), "Testaction");
}
TEST_F(FxTest, ParseActionFireSibling)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getFireSiblingAction(), "");
EXPECT_EQ(getFxByName("fx/parserTest/sibling")->getAction(0)->getFireSiblingAction(), "SisterAction");
}
TEST_F(FxTest, ParseActionRandomDelay)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getRandomDelay().first, 0.0f);
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getRandomDelay().second, 0.0f);
EXPECT_EQ(getFxByName("fx/parserTest/sibling")->getAction(1)->getRandomDelay().first, 0.9f);
EXPECT_EQ(getFxByName("fx/parserTest/sibling")->getAction(1)->getRandomDelay().second, 6.888f);
}
TEST_F(FxTest, ParseActionRotate)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getRotate(), 0.0f);
EXPECT_EQ(getFxByName("fx/parserTest/sibling")->getAction(1)->getRotate(), 56.7f);
}
TEST_F(FxTest, ParseActionDuration)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getDuration(), 0.5f);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(1)->getDuration(), 0.0f); // not set
}
TEST_F(FxTest, ParseActionTrackOrigin)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getTrackOrigin(), false);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getTrackOrigin(), false); // not set
EXPECT_EQ(getFxByName("fx/parserTest/sibling")->getAction(1)->getTrackOrigin(), true);
}
TEST_F(FxTest, ParseActionRestart)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getRestart(), false);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getRestart(), false); // not set
EXPECT_EQ(getFxByName("fx/parserTest/sibling")->getAction(1)->getRestart(), true);
}
TEST_F(FxTest, ParseActionFadeInAndOut)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getFadeInTimeInSeconds(), 0);
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getFadeOutTimeInSeconds(), 0);
EXPECT_EQ(getFxByName("fx/parserTest/fadeIn")->getAction(0)->getFadeInTimeInSeconds(), 1.2f);
EXPECT_EQ(getFxByName("fx/parserTest/fadeIn")->getAction(1)->getFadeOutTimeInSeconds(), 0.8f);
}
TEST_F(FxTest, ParseActionSize)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getDecalSize(), 0);
EXPECT_EQ(getFxByName("fx/parserTest/fadeIn")->getAction(1)->getDecalSize(), 1.5f);
}
TEST_F(FxTest, ParseActionOffset)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getOffset(), Vector3(0,0,0));
EXPECT_EQ(getFxByName("fx/parserTest/fadeIn")->getAction(1)->getOffset(), Vector3(1.6f, 0.7f, -0.8f));
}
TEST_F(FxTest, ParseActionAxisAndAngle)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getAxis(), Vector3(0,0,0));
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getAngle(), Vector3(0,0,0));
EXPECT_EQ(getFxByName("fx/parserTest/axisAndAngle")->getAction(0)->getAxis(), Vector3(0.8f, 0.6f, 0.5f));
EXPECT_EQ(getFxByName("fx/parserTest/axisAndAngle")->getAction(0)->getAngle(), Vector3(0, 0, 0));
EXPECT_EQ(getFxByName("fx/parserTest/axisAndAngle")->getAction(1)->getAxis(), Vector3(0, 0, 0));
EXPECT_EQ(getFxByName("fx/parserTest/axisAndAngle")->getAction(1)->getAngle(), Vector3(0.8f, -0.6f, 0.2f));
}
TEST_F(FxTest, ParseActionUseLight)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getUseLight(), "");
EXPECT_EQ(getFxByName("fx/parserTest/useLight")->getAction(1)->getUseLight(), "LightOwner");
// Use light implies that the action is of type light
EXPECT_EQ(getFxByName("fx/parserTest/useLight")->getAction(1)->getType(), fx::IFxAction::Type::Light);
}
TEST_F(FxTest, ParseActionUseModel)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getUseModel(), "");
EXPECT_EQ(getFxByName("fx/parserTest/useModel")->getAction(1)->getUseModel(), "ModelOwner");
// UseModel implies that the action is of type Model
EXPECT_EQ(getFxByName("fx/parserTest/useModel")->getAction(1)->getType(), fx::IFxAction::Type::Model);
}
TEST_F(FxTest, ParseActionAttachLight)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getAttachLight(), "");
EXPECT_EQ(getFxByName("fx/parserTest/attach")->getAction(0)->getAttachLight(), "light_1");
EXPECT_EQ(getFxByName("fx/parserTest/attach")->getAction(0)->getType(), fx::IFxAction::Type::AttachLight);
}
TEST_F(FxTest, ParseActionAttachEntity)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getAttachEntity(), "");
EXPECT_EQ(getFxByName("fx/parserTest/attach")->getAction(1)->getAttachEntity(), "func_static_1");
EXPECT_EQ(getFxByName("fx/parserTest/attach")->getAction(1)->getType(), fx::IFxAction::Type::AttachEntity);
}
TEST_F(FxTest, ParseActionLaunchProjectile)
{
EXPECT_EQ(getFxByName("fx/sparks")->getAction(0)->getLaunchProjectileDef(), "");
EXPECT_EQ(getFxByName("fx/parserTest/projectile")->getAction(0)->getLaunchProjectileDef(), "atdm:projectile_broadhead");
EXPECT_EQ(getFxByName("fx/parserTest/projectile")->getAction(0)->getType(), fx::IFxAction::Type::Launch);
}
TEST_F(FxTest, ParseActionLight)
{
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getLightMaterialName(), "");
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getLightRadius(), 0.0f);
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getLightRgbColour(), Vector3(0,0,0));
EXPECT_EQ(getFxByName("fx/parserTest/useLight")->getAction(0)->getType(), fx::IFxAction::Type::Light);
EXPECT_EQ(getFxByName("fx/parserTest/useLight")->getAction(0)->getLightMaterialName(), "lights/biground");
EXPECT_EQ(getFxByName("fx/parserTest/useLight")->getAction(0)->getLightRadius(), 550.3f);
EXPECT_TRUE(math::isNear(getFxByName("fx/parserTest/useLight")->getAction(0)->getLightRgbColour(), Vector3(0.5, 1, 0.7), 0.001f));
}
TEST_F(FxTest, ParseActionModel)
{
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getModelName(), "");
EXPECT_EQ(getFxByName("fx/parserTest/useModel")->getAction(0)->getType(), fx::IFxAction::Type::Model);
EXPECT_EQ(getFxByName("fx/parserTest/useModel")->getAction(0)->getModelName(), "tree.ase");
}
TEST_F(FxTest, ParseActionParticle)
{
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getModelName(), "");
EXPECT_EQ(getFxByName("fx/parserTest/useModel")->getAction(2)->getType(), fx::IFxAction::Type::Particle);
EXPECT_EQ(getFxByName("fx/parserTest/useModel")->getAction(2)->getModelName(), "drips.prt");
}
TEST_F(FxTest, ParseActionDecal)
{
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getDecalMaterialName(), "");
EXPECT_EQ(getFxByName("fx/parserTest/decal")->getAction(0)->getType(), fx::IFxAction::Type::Decal);
EXPECT_EQ(getFxByName("fx/parserTest/decal")->getAction(0)->getDecalMaterialName(), "textures/decals/blood");
}
TEST_F(FxTest, ParseActionParticleTrackVelocity)
{
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getParticleTrackVelocity(), false);
EXPECT_EQ(getFxByName("fx/parserTest/useModel")->getAction(2)->getParticleTrackVelocity(), true);
}
TEST_F(FxTest, ParseActionSound)
{
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getSoundShaderName(), "");
EXPECT_EQ(getFxByName("fx/parserTest/sound")->getAction(0)->getType(), fx::IFxAction::Type::Sound);
EXPECT_EQ(getFxByName("fx/parserTest/sound")->getAction(0)->getSoundShaderName(), "footsteps/stone");
}
TEST_F(FxTest, ParseActionShockwave)
{
EXPECT_EQ(getFxByName("fx/parserTest/shake")->getAction(0)->getShockwaveDefName(), "");
EXPECT_EQ(getFxByName("fx/parserTest/shockwave")->getAction(0)->getType(), fx::IFxAction::Type::Shockwave);
EXPECT_EQ(getFxByName("fx/parserTest/shockwave")->getAction(0)->getShockwaveDefName(), "atdm:some_shockwave_def");
}
}