39class BSplineControlPoint :
public Class
48 BSplineControlPoint();
49 BSplineControlPoint(
Vector pos,
Vector orient,
float speed );
50 BSplineControlPoint(
Vector pos );
53 void Set(
Vector pos,
float speed );
57 Vector *GetPosition(
void );
58 Vector *GetOrientation(
void );
59 float *GetRoll(
void );
60 float *GetSpeed(
void );
61 void operator=( BSplineControlPoint &point );
62 void Archive(
Archiver &arc )
override;
65inline void BSplineControlPoint::Archive
71 arc.ArchiveVector( &position );
72 arc.ArchiveVector( &orientation );
73 arc.ArchiveFloat( &speed );
74 arc.ArchiveFloat( &roll );
77inline void BSplineControlPoint::operator=
83 position = point.position;
84 orientation = point.orientation;
89inline BSplineControlPoint::BSplineControlPoint()
95inline BSplineControlPoint::BSplineControlPoint
105inline BSplineControlPoint::BSplineControlPoint
114 orient.AngleVectors( &orientation, NULL, NULL );
115 roll = orient[ ROLL ];
127inline void BSplineControlPoint::Clear
135 vec_zero.AngleVectors( &orientation, NULL, NULL );
139inline void BSplineControlPoint::Set
149inline void BSplineControlPoint::Set
160inline void BSplineControlPoint::Set
169 orient.AngleVectors( &orientation, NULL, NULL );
170 roll = orient[ ROLL ];
182inline void BSplineControlPoint::Get
190inline Vector *BSplineControlPoint::GetPosition
199inline void BSplineControlPoint::Get
208 orient = orientation;
212inline Vector *BSplineControlPoint::GetOrientation
220inline float *BSplineControlPoint::GetRoll
228inline float *BSplineControlPoint::GetSpeed
236class BSpline :
public Class
240 int num_control_points;
241 int loop_control_point;
242 splinetype_t curvetype;
243 qboolean has_orientation;
245 float EvalNormal(
float u,
Vector &pos,
Vector& orient );
247 float EvalClamp(
float u,
Vector &pos,
Vector& orient );
252 BSpline(
Vector *control_points_,
int num_control_points_, splinetype_t type );
253 BSpline(
Vector *control_points_,
Vector *control_orients_,
float *control_speeds_,
int num_control_points_, splinetype_t type );
254 void operator=( BSpline &spline );
255 void SetType( splinetype_t type );
258 void Set(
Vector *control_points_,
int num_control_points_, splinetype_t type );
259 void Set(
Vector *control_points_,
Vector *control_orients_,
float *control_speeds_,
int num_control_points_, splinetype_t type );
260 void AppendControlPoint(
const Vector& new_control_point );
261 void AppendControlPoint(
const Vector& new_control_point,
const float& speed );
262 void AppendControlPoint(
const Vector& new_control_point,
const Vector& new_control_orient,
const float& speed );
266 void DrawControlSegments(
void );
267 void DrawCurve(
int num_subdivisions );
268 void DrawCurve(
Vector offset,
int num_subdivisions );
270 void SetLoopPoint(
const Vector& pos );
272 float EndPoint(
void );
275 int PickControlPoint(
const Vector& window_point,
float pick_size );
277 Vector *GetControlPoint(
int id );
278 void GetControlPoint(
int id,
Vector& pos,
Vector& orient,
float& speed );
279 void SetControlPoint(
int id,
const Vector& new_control_point );
280 void SetControlPoint(
int id,
const Vector& new_control_point,
const Vector& new_control_orient,
const float& speed );
281 void Archive(
Archiver &arc )
override;
284inline BSpline::BSpline()
286 has_orientation = qfalse;
287 control_points = NULL;
288 num_control_points = 0;
289 loop_control_point = 0;
290 curvetype = SPLINE_NORMAL;
293inline BSpline::~BSpline()
295 if ( control_points )
297 delete [] control_points;
298 control_points = NULL;
302inline BSpline::BSpline
305 int num_control_points_,
310 has_orientation =
false;
311 control_points = NULL;
312 num_control_points = 0;
313 loop_control_point = 0;
314 curvetype = SPLINE_NORMAL;
316 Set( control_points_, num_control_points_, type );
319inline BSpline::BSpline
323 float *control_speeds_,
324 int num_control_points_,
329 has_orientation =
false;
330 control_points = NULL;
331 num_control_points = 0;
332 loop_control_point = 0;
333 curvetype = SPLINE_NORMAL;
335 Set( control_points_, control_orients_, control_speeds_, num_control_points_, type );
338inline void BSpline::operator=
347 num_control_points = spline.num_control_points;
348 loop_control_point = spline.loop_control_point;
349 curvetype = spline.curvetype;
350 has_orientation = spline.has_orientation;
352 if ( num_control_points )
355 assert( control_points );
356 for ( i = 0; i < num_control_points ; i++ )
357 control_points[ i ] = spline.control_points[ i ];
361 control_points = NULL;
365inline void BSpline::SetType
374inline int BSpline::GetType
383inline float BSpline::EndPoint
389 return num_control_points;
392inline Vector *BSpline::GetControlPoint
399 assert(
id < num_control_points );
400 if ( (
id < 0 ) && (
id >= num_control_points ) )
406 return control_points[ id ].GetPosition();
409inline void BSpline::GetControlPoint
419 assert(
id < num_control_points );
420 if ( (
id >= 0 ) && (
id < num_control_points ) )
422 control_points[ id ].Get( pos, orient, speed );
426inline void BSpline::SetControlPoint
429 const Vector& new_control_point
434 assert(
id < num_control_points );
435 if ( (
id >= 0 ) && (
id < num_control_points ) )
437 control_points[ id ].Set( new_control_point );
441inline void BSpline::SetControlPoint
444 const Vector& new_control_point,
445 const Vector& new_control_orient,
451 assert(
id < num_control_points );
452 if ( (
id >= 0 ) && (
id < num_control_points ) )
454 control_points[ id ].Set( new_control_point, new_control_orient, speed );
458inline void BSpline::Archive
465 arc.ArchiveInteger( &num_control_points );
468 if ( num_control_points )
469 control_points =
new BSplineControlPoint[ num_control_points ];
471 control_points = NULL;
474 arc.ArchiveInteger( &loop_control_point );
477 arc.ArchiveInteger( &i );
478 curvetype = ( splinetype_t )i;
480 arc.ArchiveBoolean( &has_orientation );
481 for( i = 0; i < num_control_points; i++ )
483 control_points[ i ].Archive( arc );
487extern Event EV_SplinePath_Create;
488extern Event EV_SplinePath_Loop;
489extern Event EV_SplinePath_Speed;
491class SplinePath :
public Entity
499 void CreatePath(
Event *ev );
500 void SetLoop(
Event *ev );
501 void SetSpeed(
Event *ev );
502 void SetTriggerTarget(
Event *ev );
503 void SetThread(
Event *ev );
504 void SetFov(
Event *ev );
505 void SetWatch(
Event *ev );
506 void SetFadeTime(
Event *ev );
517 CLASS_PROTOTYPE( SplinePath );
521 SplinePath *GetNext(
void );
522 SplinePath *GetPrev(
void );
523 SplinePath *GetLoop(
void );
524 void SetFadeTime(
float newFadeTime );
525 void SetFov(
float theFov );
526 void SetWatch(
const char *name );
527 void SetThread(
const char *name );
528 void SetTriggerTarget(
const char *name );
529 void NoWatch(
void );
530 str GetWatch(
void );
531 float GetFadeTime(
void );
532 float GetFov(
void );
533 void SetNext( SplinePath *node );
534 void SetPrev( SplinePath *node );
535 void Archive(
Archiver &arc )
override;
540inline void SplinePath::Archive
546 Entity::Archive( arc );
548 arc.ArchiveObjectPointer( (
Class ** )&owner );
549 arc.ArchiveObjectPointer( (
Class ** )&next );
550 arc.ArchiveObjectPointer( (
Class ** )&loop );
551 arc.ArchiveString( &loop_name );
552 arc.ArchiveFloat( &speed );
553 arc.ArchiveFloat( &fov );
554 arc.ArchiveFloat( &fadeTime );
555 arc.ArchiveBoolean( &doWatch );
556 arc.ArchiveString( &watchEnt );
557 arc.ArchiveString( &thread );
558 arc.ArchiveString( &triggertarget );
561 CancelEventsOfType( EV_SplinePath_Create );
565inline void SplinePath::SetThread
574inline void SplinePath::SetTriggerTarget
580 triggertarget = name;
Definition listener.h:246