6 #include <boost/assign/std/vector.hpp>
20 const float ratio =
M_PI / 180.0;
26 using namespace Radar;
48 currentCameraAngle(finalCameraAngle),
50 lastAnimationTime(0.0)
52 using namespace boost::assign;
57 const float edges = 32;
58 const float full = 2 *
M_PI;
59 const float step = full / edges;
60 for (
float angle = 0.0; angle < full; angle += step)
67 bounceSequence += 1.0, 0.9999, 0.9991, 0.9964, 0.9900, 0.9775, 0.9559, 0.9216, 0.8704, 0.7975, 0.6975, 0.5644, 0.3916, 0.1719, 0.0, 0.1287, 0.2164, 0.2535, 0.2297, 0.1343, 0.0, 0.0660, 0.0405, 0.0, 0.0341, 0.0;
68 cosineSequence += 1.0, 0.999391, 0.997564, 0.994522, 0.990268, 0.984808, 0.978148, 0.970296, 0.961262, 0.951057, 0.939693, 0.927184, 0.913545, 0.898794, 0.882948, 0.866025, 0.848048, 0.829038, 0.809017, 0.788011, 0.766044, 0.743145, 0.71934, 0.694658, 0.669131, 0.642788, 0.615662, 0.587785, 0.559193, 0.529919, 0.5, 0.469472, 0.438371, 0.406737, 0.374607, 0.34202, 0.309017, 0.275637, 0.241922, 0.207911, 0.173648, 0.139173, 0.104528, 0.069756, 0.034899, 0.0;
81 sinx * siny * cosz - cosx * sinz,
82 cosx * siny * cosz + sinx * sinz);
84 cosx * cosz + sinx * siny * sinz,
85 cosx * siny * sinz - sinx * cosz);
102 float duration = 2.0;
105 AngleSequence::size_type longestSequenceSize = xsequence.size();
106 longestSequenceSize =
std::max(longestSequenceSize, ysequence.size());
107 longestSequenceSize =
std::max(longestSequenceSize, zsequence.size());
108 for (AngleSequence::size_type
i = 0;
i < longestSequenceSize; ++
i)
110 float xentry = (
i < xsequence.size()) ? xsequence[
i] : 0.0;
111 float yentry = (
i < ysequence.size()) ? ysequence[
i] : 0.0;
112 float zentry = (
i < zsequence.size()) ? zsequence[
i] : 0.0;
113 float xangle = toAngle.x + xentry * (fromAngle.x - toAngle.x);
114 float yangle = toAngle.y + yentry * (fromAngle.y - toAngle.y);
115 float zangle = toAngle.z + zentry * (fromAngle.z - toAngle.z);
118 item.position =
Vector(xangle, yangle, zangle);
147 assert(nearSprite || distantSprite);
157 distantSprite->
Draw();
205 const float nearDistance = -0.5;
206 const float farDistance = 0.5;
207 const float top = 0.5;
208 const float right = 0.5;
209 float x = rx * (nearDistance / right);
210 float y = ry * (nearDistance / top);
211 float z = (rz * (- (farDistance + nearDistance) / (farDistance - nearDistance)) - 2.0 * farDistance * nearDistance / (farDistance - nearDistance));
220 const float outer = 3.0 / 3.0;
221 const float middle = 2.0 / 3.0;
222 const float inner = 1.0 / 3.0;
255 const float innerCone = inner;
256 const float outerCone = outer;
257 Vector leftCone(xcone, 0.0
f, zcone);
258 Vector rightCone(-xcone, 0.0
f, zcone);
281 for (Sensor::TrackCollection::const_iterator it = tracks.begin(); it != tracks.end(); ++it)
283 if (it->GetDistance() > maxRange)
303 for (Sensor::TrackCollection::const_iterator it = tracks.begin(); it != tracks.end(); ++it)
305 if ((it->GetDistance() < minRange) || (it->GetDistance() > maxRange))
321 Vector scaledPosition =
Vector(position.x, -position.y, position.z) / maxRange;
322 if (scaledPosition.Magnitude() > 1.0)
330 Jitter(0.0, 0.01, scaledPosition);
336 if (isNebula || isEcmActive)
338 const float errorOffset = (scaledPosition.x > 0.0 ? 0.01 : -0.01);
339 const float errorRange = 0.03;
340 Jitter(errorOffset, errorRange, scaledPosition);
346 Vector scaledGround(scaledPosition.x, 0, scaledPosition.z);
349 const bool isBelowGround = (scaledPosition.y > 0);
361 if (dangerRate > 0.0)
378 DrawTarget(unitType, head, ground, trackSize, color);