33 #ifndef S3DGAMEPATHS_H
34 #define S3DGAMEPATHS_H
39 typedef Ogre::Vector3
Vec3;
40 typedef Ogre::Quaternion
Quat;
43 namespace S3DGameNode {
44 using namespace Frapper;
72 : mPosition(position), mOrientation(orientation), mLength(1.0f) {};
74 : mPosition(startPosition), mStartPos(startPosition), mEndPos(endPosition) {};
76 : mPosition(startPosition), mStartPos(startPosition), mEndPos(endPosition), mOrientation(orientation) {};
91 QList<GameEvent*>&
Events() {
return mEvents; }
94 QString
Name()
const {
return mName; }
95 void Name( QString val) { mName = val; }
114 :
Path( position, orientation ) {}
127 :
StillPath( startPosition, orientation )
128 { mLength = 20.0f; };
141 :
Path( startPosition, endPosition ), mO(origin)
144 mStartPos = startPosition - origin;
145 mEndPos = mEndPos - origin;
147 mAngle = mStartPos.angleBetween( mEndPos );
150 Ogre::Radian epsAngle( std::numeric_limits<float>::epsilon());
153 mLength = mStartPos.length() * mAngle.valueRadians();
154 mNormal = mStartPos.crossProduct(mEndPos).normalisedCopy();
157 virtual Vec3 GetPosition(
const float& alpha )
159 Quat rotation( alpha*mAngle, mNormal );
160 rotation.normalise();
163 Vec3 newPosition = rotation * mStartPos;
164 newPosition.normalise();
170 mPosition = height * newPosition;
176 virtual Quat GetOrientation(
const float& alpha )
185 Vec3 dir = Ogre::Plane(up, 0.0f).projectVector( mEndPos - mStartPos );
189 Vec3 right = up.crossProduct(dir);
192 mOrientation =
Quat(right, up, dir);
193 mOrientation.normalise();
217 Vec3 endPosition,
Quat endOrientation )
219 mStartOrientation(startOrientation),
220 mEndOrientation(endOrientation)
242 virtual Quat GetOrientation(
const float& alpha )
244 mOrientation = Quat::nlerp( alpha, mStartOrientation, mEndOrientation,
true );
264 :
Path( startPosition, endPosition )
266 mLength = (mEndPos-mStartPos).length();
268 while( mLength < 0.01f)
272 mLength = (mEndPos-mStartPos).length();
277 Vec3 dir = mEndPos - mStartPos;
278 Vec3 right = up.crossProduct(dir);
283 mOrientation =
Quat(right, up, dir);
284 mOrientation.normalise();
298 :
Path( startPosition, endPosition, orientation )
301 virtual Vec3 GetPosition(
const float& alpha )