38class BSplineControlPoint :
public Class
47 BSplineControlPoint();
48 BSplineControlPoint(
Vector pos,
Vector orient,
float speed);
49 BSplineControlPoint(
Vector pos);
52 void Set(
Vector pos,
float speed);
57 Vector *GetOrientation(
void);
59 float *GetSpeed(
void);
60 void operator=(BSplineControlPoint& point);
61 void Archive(
Archiver& arc)
override;
64inline void BSplineControlPoint::Archive(
Archiver& arc)
66 arc.ArchiveVector(&position);
67 arc.ArchiveVector(&orientation);
68 arc.ArchiveFloat(&speed);
69 arc.ArchiveFloat(&roll);
74 position = point.position;
75 orientation = point.orientation;
80inline BSplineControlPoint::BSplineControlPoint()
86inline BSplineControlPoint::BSplineControlPoint(
Vector pos)
92inline BSplineControlPoint::BSplineControlPoint(
Vector pos,
Vector orient,
float speed)
95 orient.AngleVectors(&orientation, NULL, NULL);
106inline void BSplineControlPoint::Clear(
void)
110 vec_zero.AngleVectors(&orientation, NULL, NULL);
114inline void BSplineControlPoint::Set(
Vector pos)
120inline void BSplineControlPoint::Set(
Vector pos,
float pointspeed)
126inline void BSplineControlPoint::Set(
Vector pos,
Vector orient,
float speed)
129 orient.AngleVectors(&orientation, NULL, NULL);
140inline void BSplineControlPoint::Get(
Vector& pos)
145inline Vector *BSplineControlPoint::GetPosition(
void)
150inline void BSplineControlPoint::Get(
Vector& pos,
Vector& orient,
float& speed)
153 orient = orientation;
157inline Vector *BSplineControlPoint::GetOrientation(
void)
162inline float *BSplineControlPoint::GetRoll(
void)
167inline float *BSplineControlPoint::GetSpeed(
void)
172class BSpline :
public Class
176 int num_control_points;
177 int loop_control_point;
178 splinetype_t curvetype;
179 qboolean has_orientation;
188 BSpline(
Vector *control_points_,
int num_control_points_, splinetype_t type);
192 float *control_speeds_,
193 int num_control_points_,
196 void operator=(BSpline& spline);
197 void SetType(splinetype_t type);
200 void Set(
Vector *control_points_,
int num_control_points_, splinetype_t type);
202 Set(
Vector *control_points_,
204 float *control_speeds_,
205 int num_control_points_,
207 void AppendControlPoint(
const Vector& new_control_point);
208 void AppendControlPoint(
const Vector& new_control_point,
const float& speed);
209 void AppendControlPoint(
const Vector& new_control_point,
const Vector& new_control_orient,
const float& speed);
213 void DrawControlSegments(
void);
214 void DrawCurve(
int num_subdivisions);
215 void DrawCurve(
Vector offset,
int num_subdivisions);
217 void SetLoopPoint(
const Vector& pos);
219 float EndPoint(
void);
222 int PickControlPoint(
const Vector& window_point,
float pick_size);
224 Vector *GetControlPoint(
int id);
225 void GetControlPoint(
int id,
Vector& pos,
Vector& orient,
float& speed);
226 void SetControlPoint(
int id,
const Vector& new_control_point);
227 void SetControlPoint(
int id,
const Vector& new_control_point,
const Vector& new_control_orient,
const float& speed);
228 void Archive(
Archiver& arc)
override;
231inline BSpline::BSpline()
233 has_orientation = qfalse;
234 control_points = NULL;
235 num_control_points = 0;
236 loop_control_point = 0;
237 curvetype = SPLINE_NORMAL;
240inline BSpline::~BSpline()
242 if (control_points) {
243 delete[] control_points;
244 control_points = NULL;
248inline BSpline::BSpline(
Vector *control_points_,
int num_control_points_, splinetype_t type)
250 has_orientation =
false;
251 control_points = NULL;
252 num_control_points = 0;
253 loop_control_point = 0;
254 curvetype = SPLINE_NORMAL;
256 Set(control_points_, num_control_points_, type);
259inline BSpline::BSpline(
262 float *control_speeds_,
263 int num_control_points_,
267 has_orientation =
false;
268 control_points = NULL;
269 num_control_points = 0;
270 loop_control_point = 0;
271 curvetype = SPLINE_NORMAL;
273 Set(control_points_, control_orients_, control_speeds_, num_control_points_, type);
276inline void BSpline::operator=(
BSpline& spline)
281 num_control_points = spline.num_control_points;
282 loop_control_point = spline.loop_control_point;
283 curvetype = spline.curvetype;
284 has_orientation = spline.has_orientation;
286 if (num_control_points) {
287 control_points =
new BSplineControlPoint[num_control_points];
288 assert(control_points);
289 for (i = 0; i < num_control_points; i++) {
290 control_points[i] = spline.control_points[i];
293 control_points = NULL;
297inline void BSpline::SetType(splinetype_t type)
302inline int BSpline::GetType(
void)
307inline float BSpline::EndPoint(
void)
309 return num_control_points;
312inline Vector *BSpline::GetControlPoint(
int id)
315 assert(
id < num_control_points);
316 if ((
id < 0) && (
id >= num_control_points)) {
321 return control_points[id].GetPosition();
324inline void BSpline::GetControlPoint(
int id,
Vector& pos,
Vector& orient,
float& speed)
327 assert(
id < num_control_points);
328 if ((
id >= 0) && (
id < num_control_points)) {
329 control_points[id].Get(pos, orient, speed);
333inline void BSpline::SetControlPoint(
int id,
const Vector& new_control_point)
336 assert(
id < num_control_points);
337 if ((
id >= 0) && (
id < num_control_points)) {
338 control_points[id].Set(new_control_point);
343BSpline::SetControlPoint(
int id,
const Vector& new_control_point,
const Vector& new_control_orient,
const float& speed)
346 assert(
id < num_control_points);
347 if ((
id >= 0) && (
id < num_control_points)) {
348 control_points[id].Set(new_control_point, new_control_orient, speed);
352inline void BSpline::Archive(
Archiver& arc)
356 arc.ArchiveInteger(&num_control_points);
358 if (num_control_points) {
359 control_points =
new BSplineControlPoint[num_control_points];
361 control_points = NULL;
365 arc.ArchiveInteger(&loop_control_point);
368 arc.ArchiveInteger(&i);
369 curvetype = (splinetype_t)i;
371 arc.ArchiveBoolean(&has_orientation);
372 for (i = 0; i < num_control_points; i++) {
373 control_points[i].Archive(arc);
377extern Event EV_SplinePath_Create;
378extern Event EV_SplinePath_Loop;
379extern Event EV_SplinePath_Speed;
381class SplinePath :
public Entity
389 void CreatePath(
Event *ev);
390 void SetLoop(
Event *ev);
391 void SetSpeed(
Event *ev);
392 void SetTriggerTarget(
Event *ev);
393 void SetThread(
Event *ev);
394 void SetFov(
Event *ev);
395 void SetWatch(
Event *ev);
396 void SetFadeTime(
Event *ev);
407 CLASS_PROTOTYPE(SplinePath);
411 SplinePath *GetNext(
void);
412 SplinePath *GetPrev(
void);
413 SplinePath *GetLoop(
void);
414 void SetFadeTime(
float newFadeTime);
415 void SetFov(
float theFov);
416 void SetWatch(
const char *name);
417 void SetThread(
const char *name);
418 void SetTriggerTarget(
const char *name);
421 float GetFadeTime(
void);
423 void SetNext(SplinePath *node);
424 void SetPrev(SplinePath *node);
425 void Archive(
Archiver& arc)
override;
430inline void SplinePath::Archive(
Archiver& arc)
432 Entity::Archive(arc);
434 arc.ArchiveObjectPointer((
Class **)&owner);
435 arc.ArchiveObjectPointer((
Class **)&next);
436 arc.ArchiveObjectPointer((
Class **)&loop);
437 arc.ArchiveString(&loop_name);
438 arc.ArchiveFloat(&speed);
439 arc.ArchiveFloat(&fov);
440 arc.ArchiveFloat(&fadeTime);
441 arc.ArchiveBoolean(&doWatch);
442 arc.ArchiveString(&watchEnt);
443 arc.ArchiveString(&thread);
444 arc.ArchiveString(&triggertarget);
446 CancelEventsOfType(EV_SplinePath_Create);
450inline void SplinePath::SetThread(
const char *name)
455inline void SplinePath::SetTriggerTarget(
const char *name)
457 triggertarget = name;
Definition listener.h:246