]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - libs/splines/splines.h
[q3map2] Unwind script stack in case of script loading error.
[xonotic/netradiant.git] / libs / splines / splines.h
index e442d8bb7c095c3cdfd26625ebf2c6ca2bb21b52..952d93e6c3e437cc40c64072cfeff06f4feef149 100644 (file)
@@ -1,23 +1,23 @@
 /*
-Copyright (C) 1999-2006 Id Software, Inc. and contributors.
-For a list of contributors, see the accompanying CONTRIBUTORS file.
+   Copyright (C) 1999-2006 Id Software, Inc. and contributors.
+   For a list of contributors, see the accompanying CONTRIBUTORS file.
 
-This file is part of GtkRadiant.
+   This file is part of GtkRadiant.
 
-GtkRadiant is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   GtkRadiant is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-GtkRadiant is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   GtkRadiant is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GtkRadiant; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-*/
+   You should have received a copy of the GNU General Public License
+   along with GtkRadiant; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
 
 #ifndef __SPLINES_H
 #define __SPLINES_H
@@ -34,1082 +34,1091 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 typedef int fileHandle_t;
 
-extern void glBox(idVec3 &color, idVec3 &point, float size);
-extern void glLabeledPoint(idVec3 &color, idVec3 &point, float size, const char *label);
+extern void glBox( idVec3 &color, idVec3 &point, float size );
+extern void glLabeledPoint( idVec3 &color, idVec3 &point, float size, const char *label );
 
-static idVec4 blue(0, 0, 1, 1);
-static idVec4 red(1, 0, 0, 1);
+static idVec4 blue( 0, 0, 1, 1 );
+static idVec4 red( 1, 0, 0, 1 );
 
 class idPointListInterface {
 public:
-       idPointListInterface() {
-               selectedPoints.Clear();
-       };
-       virtual ~idPointListInterface() {};
-       
-       virtual int numPoints() {
-               return 0;
-       }
-       
-       virtual void addPoint(const float x, const float y, const float z) {}
-       virtual void addPoint(const idVec3 &v) {}
-       virtual void removePoint(int index) {}
-       virtual idVec3 *getPoint(int index) { return NULL; }
-       
-       int     selectPointByRay(float ox, float oy, float oz, float dx, float dy, float dz, bool single) {
-               idVec3 origin(ox, oy, oz);
-               idVec3 dir(dx, dy, dz);
-               return selectPointByRay(origin, dir, single);
-       }
-
-       int     selectPointByRay(const idVec3 origin, const idVec3 direction, bool single) {
-               int             i, besti, count;
-               float   d, bestd;
-               idVec3  temp, temp2;
-
-               // find the point closest to the ray
-               besti = -1;
-               bestd = 8;
-               count = numPoints();
-
-               for (i=0; i < count; i++) {
-                       temp = *getPoint(i);
-                       temp2 = temp;
-                       temp -= origin;
-                       d = DotProduct(temp, direction);
-                       __VectorMA (origin, d, direction, temp);
-                       temp2 -= temp;
-                       d = temp2.Length();
-                       if (d <= bestd) {
-                               bestd = d;
-                               besti = i;
-                       }
-               }
-
-               if (besti >= 0) {
-                       selectPoint(besti, single);
-               }
-
-               return besti;
-       }
-
-       int isPointSelected(int index) {
-               int count = selectedPoints.Num();
-               for (int i = 0; i < count; i++) {
-                       if (selectedPoints[i] == index) {
-                               return i;
-                       }
-               }
-               return -1;
-       }
-       
-       int selectPoint(int index, bool single) {
-               if (index >= 0 && index < numPoints()) {
-                       if (single) {
-                               deselectAll();
-                       } else {
-                               if (isPointSelected(index) >= 0) {
-                                       selectedPoints.Remove(index);
-                               }
-                       }
-                       return selectedPoints.Append(index);
-               }
-               return -1;
-       }
-       
-       void selectAll() {
-               selectedPoints.Clear();
-               for (int i = 0; i < numPoints(); i++) {
-                       selectedPoints.Append(i);
+idPointListInterface() {
+       selectedPoints.Clear();
+};
+virtual ~idPointListInterface() {};
+
+virtual int numPoints() {
+       return 0;
+}
+
+virtual void addPoint( const float x, const float y, const float z ) {}
+virtual void addPoint( const idVec3 &v ) {}
+virtual void removePoint( int index ) {}
+virtual idVec3 *getPoint( int index ) { return NULL; }
+
+int selectPointByRay( float ox, float oy, float oz, float dx, float dy, float dz, bool single ) {
+       idVec3 origin( ox, oy, oz );
+       idVec3 dir( dx, dy, dz );
+       return selectPointByRay( origin, dir, single );
+}
+
+int selectPointByRay( const idVec3 origin, const idVec3 direction, bool single ) {
+       int i, besti, count;
+       float d, bestd;
+       idVec3 temp, temp2;
+
+       // find the point closest to the ray
+       besti = -1;
+       bestd = 8;
+       count = numPoints();
+
+       for ( i = 0; i < count; i++ ) {
+               temp = *getPoint( i );
+               temp2 = temp;
+               temp -= origin;
+               d = DotProduct( temp, direction );
+               __VectorMA( origin, d, direction, temp );
+               temp2 -= temp;
+               d = temp2.Length();
+               if ( d <= bestd ) {
+                       bestd = d;
+                       besti = i;
                }
        }
 
-       void deselectAll() {
-               selectedPoints.Clear();
+       if ( besti >= 0 ) {
+               selectPoint( besti, single );
        }
 
-       int numSelectedPoints();
-    
-       idVec3 *getSelectedPoint(int index) {
-               assert(index >= 0 && index < numSelectedPoints());
-               return getPoint(selectedPoints[index]);
-       }
-       
-       virtual void updateSelection(float x, float y, float z) {
-               idVec3 move(x, y, z);
-               updateSelection(move);
-       }
+       return besti;
+}
 
-       virtual void updateSelection(const idVec3 &move) {
-               int count = selectedPoints.Num();
-               for (int i = 0; i < count; i++) {
-                       *getPoint(selectedPoints[i]) += move;
+int isPointSelected( int index ) {
+       int count = selectedPoints.Num();
+       for ( int i = 0; i < count; i++ ) {
+               if ( selectedPoints[i] == index ) {
+                       return i;
                }
        }
+       return -1;
+}
 
-       void drawSelection() {
-               int count = selectedPoints.Num();
-               for (int i = 0; i < count; i++) {
-                       glBox(red, *getPoint(selectedPoints[i]), 4);
+int selectPoint( int index, bool single ) {
+       if ( index >= 0 && index < numPoints() ) {
+               if ( single ) {
+                       deselectAll();
                }
-       }
-
-protected:
-       idList<int> selectedPoints;
-
-};
-
-
-class idSplineList {
-
-public:
-
-       idSplineList() {
-               clear();
-       }
-
-       idSplineList(const char *p) {
-               clear();
-               name = p;
-       };
-
-       ~idSplineList() {
-               clear();
-       };
-
-       void clearControl() {
-               for (int i = 0; i < controlPoints.Num(); i++) {
-                       delete controlPoints[i];
-               }
-               controlPoints.Clear();
-       }
-
-       void clearSpline() {
-               for (int i = 0; i < splinePoints.Num(); i++) {
-                       delete splinePoints[i];
+               else {
+                       if ( isPointSelected( index ) >= 0 ) {
+                               selectedPoints.Remove( index );
+                       }
                }
-               splinePoints.Clear();
+               return selectedPoints.Append( index );
        }
+       return -1;
+}
 
-       void parse(const char *(*text));
-       void write(fileHandle_t file, const char *name);
-
-       void clear() {
-               clearControl();
-               clearSpline();
-               splineTime.Clear();
-               selected = NULL;
-               dirty = true;
-               activeSegment = 0;
-               granularity = 0.025f;
-               pathColor.set(1.0f, 0.5f, 0.0f);
-               controlColor.set(0.7f, 0.0f, 1.0f);
-               segmentColor.set(0.0f, 0.0f, 1.0f);
-               activeColor.set(1.0f, 0.0f, 0.0f);
+void selectAll() {
+       selectedPoints.Clear();
+       for ( int i = 0; i < numPoints(); i++ ) {
+               selectedPoints.Append( i );
        }
+}
 
-       void initPosition(long startTime, long totalTime);
-       const idVec3 *getPosition(long time);
+void deselectAll() {
+       selectedPoints.Clear();
+}
 
+int numSelectedPoints();
 
-       void draw(bool editMode);
-       void addToRenderer();
+idVec3 *getSelectedPoint( int index ) {
+       assert( index >= 0 && index < numSelectedPoints() );
+       return getPoint( selectedPoints[index] );
+}
 
-       void setSelectedPoint(idVec3 *p);
-       idVec3 *getSelectedPoint() {
-         return selected;
-       }
+virtual void updateSelection( float x, float y, float z ) {
+       idVec3 move( x, y, z );
+       updateSelection( move );
+}
 
-       void addPoint(const idVec3 &v) {
-               controlPoints.Append(new idVec3(v));
-               dirty = true;
+virtual void updateSelection( const idVec3 &move ) {
+       int count = selectedPoints.Num();
+       for ( int i = 0; i < count; i++ ) {
+               *getPoint( selectedPoints[i] ) += move;
        }
+}
 
-       void addPoint(float x, float y, float z) {
-               controlPoints.Append(new idVec3(x, y, z));
-               dirty = true;
+void drawSelection() {
+       int count = selectedPoints.Num();
+       for ( int i = 0; i < count; i++ ) {
+               glBox( red, *getPoint( selectedPoints[i] ), 4 );
        }
+}
 
-       void updateSelection(const idVec3 &move);
+protected:
+idList<int> selectedPoints;
 
-       void startEdit() {
-               editMode = true;
-       }
-               
-       void stopEdit() {
-               editMode = false;
-       }
+};
 
-       void buildSpline();
 
-       void setGranularity(float f) {
-               granularity = f;
-       }
-
-       float getGranularity() {
-               return granularity;
-       }
+class idSplineList {
 
-       int numPoints() {
-               return controlPoints.Num();
-       }
+public:
 
-       idVec3 *getPoint(int index) {
-               assert(index >= 0 && index < controlPoints.Num());
-               return controlPoints[index];
-       }
+idSplineList() {
+       clear();
+}
 
-       idVec3 *getSegmentPoint(int index) {
-               assert(index >= 0 && index < splinePoints.Num());
-               return splinePoints[index];
-       }
+idSplineList( const char *p ) {
+       clear();
+       name = p;
+};
 
+~idSplineList() {
+       clear();
+};
 
-       void setSegmentTime(int index, int time) {
-               assert(index >= 0 && index < splinePoints.Num());
-               splineTime[index] = time;
+void clearControl() {
+       for ( int i = 0; i < controlPoints.Num(); i++ ) {
+               delete controlPoints[i];
        }
+       controlPoints.Clear();
+}
 
-       int getSegmentTime(int index) {
-               assert(index >= 0 && index < splinePoints.Num());
-               return (int)splineTime[index];
-       }
-       void addSegmentTime(int index, int time) {
-               assert(index >= 0 && index < splinePoints.Num());
-               splineTime[index] += time;
+void clearSpline() {
+       for ( int i = 0; i < splinePoints.Num(); i++ ) {
+               delete splinePoints[i];
        }
+       splinePoints.Clear();
+}
 
-       float totalDistance();
+void parse( const char *( *text ) );
+void write( fileHandle_t file, const char *name );
 
-       static idVec3 zero;
+void clear() {
+       clearControl();
+       clearSpline();
+       splineTime.Clear();
+       selected = NULL;
+       dirty = true;
+       activeSegment = 0;
+       granularity = 0.025f;
+       pathColor.set( 1.0f, 0.5f, 0.0f );
+       controlColor.set( 0.7f, 0.0f, 1.0f );
+       segmentColor.set( 0.0f, 0.0f, 1.0f );
+       activeColor.set( 1.0f, 0.0f, 0.0f );
+}
+
+void initPosition( long startTime, long totalTime );
+const idVec3 *getPosition( long time );
 
-       int getActiveSegment() {
-               return activeSegment;
-       }
 
-       void setActiveSegment(int i) {
-               //assert(i >= 0 && (splinePoints.Num() > 0 && i < splinePoints.Num()));
-               activeSegment = i;
-       }
+void draw( bool editMode );
+void addToRenderer();
+
+void setSelectedPoint( idVec3 *p );
+idVec3 *getSelectedPoint() {
+       return selected;
+}
+
+void addPoint( const idVec3 &v ) {
+       controlPoints.Append( new idVec3( v ) );
+       dirty = true;
+}
+
+void addPoint( float x, float y, float z ) {
+       controlPoints.Append( new idVec3( x, y, z ) );
+       dirty = true;
+}
+
+void updateSelection( const idVec3 &move );
+
+void startEdit() {
+       editMode = true;
+}
+
+void stopEdit() {
+       editMode = false;
+}
+
+void buildSpline();
+
+void setGranularity( float f ) {
+       granularity = f;
+}
+
+float getGranularity() {
+       return granularity;
+}
+
+int numPoints() {
+       return controlPoints.Num();
+}
+
+idVec3 *getPoint( int index ) {
+       assert( index >= 0 && index < controlPoints.Num() );
+       return controlPoints[index];
+}
+
+idVec3 *getSegmentPoint( int index ) {
+       assert( index >= 0 && index < splinePoints.Num() );
+       return splinePoints[index];
+}
+
+
+void setSegmentTime( int index, int time ) {
+       assert( index >= 0 && index < splinePoints.Num() );
+       splineTime[index] = time;
+}
+
+int getSegmentTime( int index ) {
+       assert( index >= 0 && index < splinePoints.Num() );
+       return (int)splineTime[index];
+}
+void addSegmentTime( int index, int time ) {
+       assert( index >= 0 && index < splinePoints.Num() );
+       splineTime[index] += time;
+}
+
+float totalDistance();
+
+static idVec3 zero;
+
+int getActiveSegment() {
+       return activeSegment;
+}
+
+void setActiveSegment( int i ) {
+       //assert(i >= 0 && (splinePoints.Num() > 0 && i < splinePoints.Num()));
+       activeSegment = i;
+}
+
+int numSegments() {
+       return splinePoints.Num();
+}
+
+void setColors( idVec3 &path, idVec3 &segment, idVec3 &control, idVec3 &active ) {
+       pathColor = path;
+       segmentColor = segment;
+       controlColor = control;
+       activeColor = active;
+}
 
-       int numSegments() {
-               return splinePoints.Num();
-       }
+const char *getName() {
+       return name.c_str();
+}
 
-       void setColors(idVec3 &path, idVec3 &segment, idVec3 &control, idVec3 &active) {
-               pathColor = path;
-               segmentColor = segment;
-               controlColor = control;
-               activeColor = active;
-       }
-
-       const char *getName() {
-               return name.c_str();
-       }
+void setName( const char *p ) {
+       name = p;
+}
 
-       void setName(const char *p) {
-               name = p;
-       }
-
-       bool validTime() {
-               if (dirty) {
-                       buildSpline();
-               }
-               // gcc doesn't allow static casting away from bools
-               // why?  I've no idea...
-               return (bool)(splineTime.Num() > 0 && splineTime.Num() == splinePoints.Num());
+bool validTime() {
+       if ( dirty ) {
+               buildSpline();
        }
+       // gcc doesn't allow static casting away from bools
+       // why?  I've no idea...
+       return (bool)( splineTime.Num() > 0 && splineTime.Num() == splinePoints.Num() );
+}
 
-       void setTime(long t) {
-               time = t;
-       }
+void setTime( long t ) {
+       time = t;
+}
 
-       void setBaseTime(long t) {
-               baseTime = t;
-       }
+void setBaseTime( long t ) {
+       baseTime = t;
+}
 
 protected:
-       idStr name;
-       float calcSpline(int step, float tension);
-       idList<idVec3*> controlPoints;
-       idList<idVec3*> splinePoints;
-       idList<double> splineTime;
-       idVec3 *selected;
-       idVec3 pathColor, segmentColor, controlColor, activeColor;
-       float granularity;
-       bool editMode;
-       bool dirty;
-       int activeSegment;
-       long baseTime;
-       long time;
-       friend class idCamera;
+idStr name;
+float calcSpline( int step, float tension );
+idList<idVec3*> controlPoints;
+idList<idVec3*> splinePoints;
+idList<double> splineTime;
+idVec3 *selected;
+idVec3 pathColor, segmentColor, controlColor, activeColor;
+float granularity;
+bool editMode;
+bool dirty;
+int activeSegment;
+long baseTime;
+long time;
+friend class idCamera;
 };
 
-// time in milliseconds 
+// time in milliseconds
 // velocity where 1.0 equal rough walking speed
 struct idVelocity {
-       idVelocity(long start, long duration, float s) {
+       idVelocity( long start, long duration, float s ) {
                startTime = start;
                time = duration;
                speed = s;
        }
-       long    startTime;
-       long    time;
-       float   speed;
+       long startTime;
+       long time;
+       float speed;
 };
 
 // can either be a look at or origin position for a camera
-// 
+//
 class idCameraPosition : public idPointListInterface {
 public:
-       
-       virtual void clearVelocities() {
-               for (int i = 0; i < velocities.Num(); i++) {
-                       delete velocities[i];
-                       velocities[i] = NULL;
-               }
-               velocities.Clear();
-       }
-
-       virtual void clear() {
-               editMode = false;
-               clearVelocities();
-       }
-
-       idCameraPosition(const char *p) {
-               name = p;
-       }
-
-       idCameraPosition() {
-               time = 0;
-               name = "position";
-       }
 
-       idCameraPosition(long t) {
-               time = t;
-       }
+virtual void clearVelocities() {
+       for ( int i = 0; i < velocities.Num(); i++ ) {
+               delete velocities[i];
+               velocities[i] = NULL;
+       }
+       velocities.Clear();
+}
+
+virtual void clear() {
+       editMode = false;
+       clearVelocities();
+}
+
+idCameraPosition( const char *p ) {
+       name = p;
+}
+
+idCameraPosition() {
+       time = 0;
+       name = "position";
+}
+
+idCameraPosition( long t ) {
+       time = t;
+}
+
+virtual ~idCameraPosition() {
+       clear();
+}
+
+
+// this can be done with RTTI syntax but i like the derived classes setting a type
+// makes serialization a bit easier to see
+//
+enum positionType {
+       FIXED = 0x00,
+       INTERPOLATED,
+       SPLINE,
+       POSITION_COUNT
+};
 
-       virtual ~idCameraPosition() {
-               clear();
-       }
 
-       
-       // this can be done with RTTI syntax but i like the derived classes setting a type
-       // makes serialization a bit easier to see
-       //
-       enum positionType {
-               FIXED = 0x00,
-               INTERPOLATED,
-               SPLINE,
-               POSITION_COUNT
-       };
+virtual void start( long t ) {
+       startTime = t;
+}
 
+long getTime() {
+       return time;
+}
 
-       virtual void start(long t) {
-               startTime = t;
-       }
+virtual void setTime( long t ) {
+       time = t;
+}
 
-       long getTime() {
-               return time;
-       }
+float getBaseVelocity() {
+       return baseVelocity;
+}
 
-       virtual void setTime(long t) {
-               time = t;
-       }
-
-       float getBaseVelocity() {
-               return baseVelocity;
-       }
-
-       float getVelocity(long t) {
-               long check = t - startTime;
-               for (int i = 0; i < velocities.Num(); i++) {
-                       if (check >= velocities[i]->startTime && check <= velocities[i]->startTime + velocities[i]->time) {
-                               return velocities[i]->speed;
-                       }
+float getVelocity( long t ) {
+       long check = t - startTime;
+       for ( int i = 0; i < velocities.Num(); i++ ) {
+               if ( check >= velocities[i]->startTime && check <= velocities[i]->startTime + velocities[i]->time ) {
+                       return velocities[i]->speed;
                }
-               return baseVelocity;
        }
+       return baseVelocity;
+}
 
-       void addVelocity(long start, long duration, float speed) {
-               velocities.Append(new idVelocity(start, duration, speed));
-       }
+void addVelocity( long start, long duration, float speed ) {
+       velocities.Append( new idVelocity( start, duration, speed ) );
+}
 
-       virtual const idVec3 *getPosition(long t) { 
-               assert(true);
-               return NULL;
-       }
+virtual const idVec3 *getPosition( long t ) {
+       assert( true );
+       return NULL;
+}
 
-       virtual void draw(bool editMode) {};
+virtual void draw( bool editMode ) {};
 
-       virtual void parse(const char *(*text)) {};
-       virtual void write(fileHandle_t file, const char *name);
-       virtual bool parseToken(const char *key, const char *(*text));
+virtual void parse( const char *( *text ) ) {};
+virtual void write( fileHandle_t file, const char *name );
+virtual bool parseToken( const char *key, const char *( *text ) );
 
-       const char *getName() {
-               return name.c_str();
-       }
+const char *getName() {
+       return name.c_str();
+}
 
-       void setName(const char *p) {
-               name = p;
-       }
+void setName( const char *p ) {
+       name = p;
+}
 
-       virtual void startEdit() {
-               editMode = true;
-       }
+virtual void startEdit() {
+       editMode = true;
+}
 
-       virtual void stopEdit() {
-               editMode = false;
-       }
+virtual void stopEdit() {
+       editMode = false;
+}
 
-       virtual void draw() {};
+virtual void draw() {};
 
-       const char *typeStr() {
-               return positionStr[static_cast<int>(type)];
-       }
+const char *typeStr() {
+       return positionStr[static_cast<int>( type )];
+}
 
-       void calcVelocity(float distance) {
-               float secs = (float)time / 1000;
-               baseVelocity = distance / secs;
-       }
+void calcVelocity( float distance ) {
+       float secs = (float)time / 1000;
+       baseVelocity = distance / secs;
+}
 
 protected:
-       static const char* positionStr[POSITION_COUNT];
-       long            startTime;
-       long            time;
-       idCameraPosition::positionType type;
-       idStr           name;
-       bool    editMode;
-       idList<idVelocity*> velocities;
-       float           baseVelocity;
+static const char* positionStr[POSITION_COUNT];
+long startTime;
+long time;
+idCameraPosition::positionType type;
+idStr name;
+bool editMode;
+idList<idVelocity*> velocities;
+float baseVelocity;
 };
 
 class idFixedPosition : public idCameraPosition {
 public:
 
-       void init() {
-               pos.Zero();
-               type = idCameraPosition::FIXED;
-       }
-       
-       idFixedPosition() : idCameraPosition() {
-               init();
-       }
-       
-       idFixedPosition(idVec3 p) : idCameraPosition() {
-               init();
-               pos = p;
-       }
+void init() {
+       pos.Zero();
+       type = idCameraPosition::FIXED;
+}
 
-       virtual void addPoint(const idVec3 &v) {
-               pos = v;
-       }
-       
-       virtual void addPoint(const float x, const float y, const float z) {
-               pos.set(x, y, z);
-       }
+idFixedPosition() : idCameraPosition() {
+       init();
+}
 
+idFixedPosition( idVec3 p ) : idCameraPosition() {
+       init();
+       pos = p;
+}
 
-       ~idFixedPosition() {
-       }
+virtual void addPoint( const idVec3 &v ) {
+       pos = v;
+}
 
-       virtual const idVec3 *getPosition(long t) { 
-               return &pos;
-       }
+virtual void addPoint( const float x, const float y, const float z ) {
+       pos.set( x, y, z );
+}
 
-       void parse(const char *(*text));
-       void write(fileHandle_t file, const char *name);
 
-       virtual int numPoints() {
-               return 1;
-       }
+~idFixedPosition() {
+}
 
-       virtual idVec3 *getPoint(int index) {
-               if (index != 0) {
-                       assert(true);
-               };
-               return &pos;
-       }
+virtual const idVec3 *getPosition( long t ) {
+       return &pos;
+}
+
+void parse( const char *( *text ) );
+void write( fileHandle_t file, const char *name );
+
+virtual int numPoints() {
+       return 1;
+}
 
-       virtual void draw(bool editMode) {
-               glLabeledPoint(blue, pos, (editMode) ? 5 : 3, "Fixed point");
+virtual idVec3 *getPoint( int index ) {
+       if ( index != 0 ) {
+               assert( true );
        }
+       ;
+       return &pos;
+}
+
+virtual void draw( bool editMode ) {
+       glLabeledPoint( blue, pos, ( editMode ) ? 5 : 3, "Fixed point" );
+}
 
 protected:
-       idVec3 pos;
+idVec3 pos;
 };
 
 class idInterpolatedPosition : public idCameraPosition {
 public:
 
-       void init() {
-               type = idCameraPosition::INTERPOLATED;
-               first = true;
-               startPos.Zero();
-               endPos.Zero();
-       }
-       
-       idInterpolatedPosition() : idCameraPosition() {
-               init();
-       }
-       
-       idInterpolatedPosition(idVec3 start, idVec3 end, long time) : idCameraPosition(time) {
-               init();
-               startPos = start;
-               endPos = end;
-       }
+void init() {
+       type = idCameraPosition::INTERPOLATED;
+       first = true;
+       startPos.Zero();
+       endPos.Zero();
+}
 
-       ~idInterpolatedPosition() {
-       }
+idInterpolatedPosition() : idCameraPosition() {
+       init();
+}
 
-       virtual const idVec3 *getPosition(long t);
+idInterpolatedPosition( idVec3 start, idVec3 end, long time ) : idCameraPosition( time ) {
+       init();
+       startPos = start;
+       endPos = end;
+}
 
-       void parse(const char *(*text));
-       void write(fileHandle_t file, const char *name);
+~idInterpolatedPosition() {
+}
 
-       virtual int numPoints() {
-               return 2;
-       }
+virtual const idVec3 *getPosition( long t );
 
-       virtual idVec3 *getPoint(int index) {
-               assert(index >= 0 && index < 2);
-               if (index == 0) {
-                       return &startPos;
-               }
-               return &endPos;
-       }
+void parse( const char *( *text ) );
+void write( fileHandle_t file, const char *name );
 
-       virtual void addPoint(const float x, const float y, const float z) {
-               if (first) {
-                       startPos.set(x, y, z);
-                       first = false;
-               } else {
-                       endPos.set(x, y, z);
-                       first = true;
-               }
-       }
+virtual int numPoints() {
+       return 2;
+}
 
-       virtual void addPoint(const idVec3 &v) {
-               if (first) {
-                       startPos = v;
-                       first = false;
-               } else {
-                       endPos = v;
-                       first = true;
-               }
+virtual idVec3 *getPoint( int index ) {
+       assert( index >= 0 && index < 2 );
+       if ( index == 0 ) {
+               return &startPos;
        }
+       return &endPos;
+}
 
-       virtual void draw(bool editMode) {
-               glLabeledPoint(blue, startPos, (editMode) ? 5 : 3, "Start interpolated");
-               glLabeledPoint(blue, endPos, (editMode) ? 5 : 3, "End interpolated");
-         glBegin(GL_LINES);
-         glVertex3fv(startPos);
-         glVertex3fv(endPos);
-         glEnd();
+virtual void addPoint( const float x, const float y, const float z ) {
+       if ( first ) {
+               startPos.set( x, y, z );
+               first = false;
+       }
+       else {
+               endPos.set( x, y, z );
+               first = true;
        }
+}
 
-       virtual void start(long t) {
-               idCameraPosition::start(t);
-               lastTime = startTime;
-               distSoFar = 0.0;
-               idVec3 temp = startPos;
-               temp -= endPos;
-               calcVelocity(temp.Length());
+virtual void addPoint( const idVec3 &v ) {
+       if ( first ) {
+               startPos = v;
+               first = false;
        }
+       else {
+               endPos = v;
+               first = true;
+       }
+}
+
+virtual void draw( bool editMode ) {
+       glLabeledPoint( blue, startPos, ( editMode ) ? 5 : 3, "Start interpolated" );
+       glLabeledPoint( blue, endPos, ( editMode ) ? 5 : 3, "End interpolated" );
+       glBegin( GL_LINES );
+       glVertex3fv( startPos );
+       glVertex3fv( endPos );
+       glEnd();
+}
+
+virtual void start( long t ) {
+       idCameraPosition::start( t );
+       lastTime = startTime;
+       distSoFar = 0.0;
+       idVec3 temp = startPos;
+       temp -= endPos;
+       calcVelocity( temp.Length() );
+}
 
 protected:
-       bool first;
-       idVec3 startPos;
-       idVec3 endPos;
-       long lastTime;
-       float distSoFar;
+bool first;
+idVec3 startPos;
+idVec3 endPos;
+long lastTime;
+float distSoFar;
 };
 
 class idSplinePosition : public idCameraPosition {
 public:
 
-       void init() {
-               type = idCameraPosition::SPLINE;
-       }
-       
-       idSplinePosition() : idCameraPosition() {
-               init();
-       }
-       
-       idSplinePosition(long time) : idCameraPosition(time) {
-               init();
-       }
+void init() {
+       type = idCameraPosition::SPLINE;
+}
 
-       ~idSplinePosition() {
-       }
+idSplinePosition() : idCameraPosition() {
+       init();
+}
 
-       virtual void start(long t) {
-               idCameraPosition::start(t);
-               target.initPosition(t, time);
-               lastTime = startTime;
-               distSoFar = 0.0;
-               calcVelocity(target.totalDistance());
-       }
+idSplinePosition( long time ) : idCameraPosition( time ) {
+       init();
+}
 
-       //virtual const idVec3 *getPosition(long t) { 
-       //      return target.getPosition(t);
-       //}
-       virtual const idVec3 *getPosition(long t);
+~idSplinePosition() {
+}
 
+virtual void start( long t ) {
+       idCameraPosition::start( t );
+       target.initPosition( t, time );
+       lastTime = startTime;
+       distSoFar = 0.0;
+       calcVelocity( target.totalDistance() );
+}
 
-       //virtual const idVec3 *getPosition(long t) const { 
+//virtual const idVec3 *getPosition(long t) {
+//     return target.getPosition(t);
+//}
+virtual const idVec3 *getPosition( long t );
 
-       void addControlPoint(idVec3 &v) {
-               target.addPoint(v);
-       }
 
-       void parse(const char *(*text));
-       void write(fileHandle_t file, const char *name);
+//virtual const idVec3 *getPosition(long t) const {
 
-       virtual int numPoints() {
-               return target.numPoints();
-       }
+void addControlPoint( idVec3 &v ) {
+       target.addPoint( v );
+}
 
-       virtual idVec3 *getPoint(int index) {
-               return target.getPoint(index);
-       }
+void parse( const char *( *text ) );
+void write( fileHandle_t file, const char *name );
 
-       virtual void addPoint(const idVec3 &v) {
-               target.addPoint(v);
-       }
+virtual int numPoints() {
+       return target.numPoints();
+}
 
-       virtual void addPoint(const float x, const float y, const float z) {
-               target.addPoint(x, y, z);
-       }
+virtual idVec3 *getPoint( int index ) {
+       return target.getPoint( index );
+}
 
-       virtual void draw(bool editMode) {
-               target.draw(editMode);
-       }
+virtual void addPoint( const idVec3 &v ) {
+       target.addPoint( v );
+}
 
-       virtual void updateSelection(const idVec3 &move) {
-               idCameraPosition::updateSelection(move);
-               target.buildSpline();
-       }
+virtual void addPoint( const float x, const float y, const float z ) {
+       target.addPoint( x, y, z );
+}
+
+virtual void draw( bool editMode ) {
+       target.draw( editMode );
+}
+
+virtual void updateSelection( const idVec3 &move ) {
+       idCameraPosition::updateSelection( move );
+       target.buildSpline();
+}
 
 protected:
-       idSplineList target;
-       long lastTime;
-       float distSoFar;
+idSplineList target;
+long lastTime;
+float distSoFar;
 };
 
 class idCameraFOV {
 public:
-       
-       idCameraFOV() {
-               time = 0;
-               length = 0;
-               fov = 90;
-       }
 
-       idCameraFOV(int v) {
-               time = 0;
-               length = 0;
-               fov = v;
-       }
+idCameraFOV() {
+       time = 0;
+       length = 0;
+       fov = 90;
+}
 
-       idCameraFOV(int s, int e, long t) {
-               startFOV = s;
-               endFOV = e;
-               length = t;
-       }
+idCameraFOV( int v ) {
+       time = 0;
+       length = 0;
+       fov = v;
+}
 
+idCameraFOV( int s, int e, long t ) {
+       startFOV = s;
+       endFOV = e;
+       length = t;
+}
 
-       ~idCameraFOV(){}
 
-       void setFOV(float f) {
-               fov = f;
-       }
+~idCameraFOV(){}
 
-       float getFOV(long t) {
-               if (length) {
-                       float percent = (t - startTime) / length;
-                       if (percent < 0.0) {
-                               percent = 0.0;
-                       } else if (percent > 1.0) {
-                               percent = 1.0;
-                       }
-                       float temp = endFOV - startFOV;
-                       temp *= percent;
-                       fov = startFOV + temp;
+void setFOV( float f ) {
+       fov = f;
+}
 
-                       if (percent == 1.0) {
-                               length = 0.0;
-                       }
+float getFOV( long t ) {
+       if ( length ) {
+               float percent = ( t - startTime ) / length;
+               if ( percent < 0.0 ) {
+                       percent = 0.0;
                }
-               return fov;
-       }
+               else if ( percent > 1.0 ) {
+                       percent = 1.0;
+               }
+               float temp = endFOV - startFOV;
+               temp *= percent;
+               fov = startFOV + temp;
 
-       void start(long t) {
-               startTime = t;
+               if ( percent == 1.0 ) {
+                       length = 0.0;
+               }
        }
+       return fov;
+}
 
-       void reset(float startfov, float endfov, int start, float len) {
-               startFOV = startfov;
-               endFOV = endfov;
-               startTime = start;
-               length = len * 1000;
-       }
+void start( long t ) {
+       startTime = t;
+}
+
+void reset( float startfov, float endfov, int start, float len ) {
+       startFOV = startfov;
+       endFOV = endfov;
+       startTime = start;
+       length = len * 1000;
+}
 
-       void parse(const char *(*text));
-       void write(fileHandle_t file, const char *name);
+void parse( const char *( *text ) );
+void write( fileHandle_t file, const char *name );
 
 protected:
-       float fov;
-       float startFOV;
-       float endFOV;
-       int startTime;
-       int time;
-       float length;
+float fov;
+float startFOV;
+float endFOV;
+int startTime;
+int time;
+float length;
 };
 
 
 
 
 class idCameraEvent {
-public:                                                // parameters
-       enum eventType {
-               EVENT_NA = 0x00,
-               EVENT_WAIT,                     // 
-               EVENT_TARGETWAIT,       // 
-               EVENT_SPEED,            // 
-               EVENT_TARGET,           // char(name)
-               EVENT_SNAPTARGET,       // 
-               EVENT_FOV,                      // int(time), int(targetfov)
-               EVENT_CMD,                      // 
-               EVENT_TRIGGER,          // 
-               EVENT_STOP,                     // 
-               EVENT_CAMERA,           // 
-               EVENT_FADEOUT,          // int(time)
-               EVENT_FADEIN,           // int(time)
-               EVENT_FEATHER,          // 
-               EVENT_COUNT                     
-       };
+public:                     // parameters
+enum eventType {
+       EVENT_NA = 0x00,
+       EVENT_WAIT,             //
+       EVENT_TARGETWAIT,       //
+       EVENT_SPEED,            //
+       EVENT_TARGET,           // char(name)
+       EVENT_SNAPTARGET,       //
+       EVENT_FOV,              // int(time), int(targetfov)
+       EVENT_CMD,              //
+       EVENT_TRIGGER,          //
+       EVENT_STOP,             //
+       EVENT_CAMERA,           //
+       EVENT_FADEOUT,          // int(time)
+       EVENT_FADEIN,           // int(time)
+       EVENT_FEATHER,          //
+       EVENT_COUNT
+};
 
-       static const char* eventStr[EVENT_COUNT];
+static const char* eventStr[EVENT_COUNT];
 
-       idCameraEvent() {
-               paramStr = "";
-               type = EVENT_NA;
-               time = 0;
-       }
+idCameraEvent() {
+       paramStr = "";
+       type = EVENT_NA;
+       time = 0;
+}
 
-       idCameraEvent(eventType t, const char *param, long n) {
-               type = t;
-               paramStr = param;
-               time = n;
-       }
+idCameraEvent( eventType t, const char *param, long n ) {
+       type = t;
+       paramStr = param;
+       time = n;
+}
 
-       ~idCameraEvent() {};
+~idCameraEvent() {};
 
-       eventType getType() {
-               return type;
-       }
+eventType getType() {
+       return type;
+}
 
-       const char *typeStr() {
-               return eventStr[static_cast<int>(type)];
-       }
+const char *typeStr() {
+       return eventStr[static_cast<int>( type )];
+}
 
-       const char *getParam() {
-               return paramStr.c_str();
-       }
+const char *getParam() {
+       return paramStr.c_str();
+}
 
-       long getTime() {
-               return time;
-       }
+long getTime() {
+       return time;
+}
 
-       void setTime(long n) {
-               time = n;
-       }
+void setTime( long n ) {
+       time = n;
+}
 
-       void parse(const char *(*text));
-       void write(fileHandle_t file, const char *name);
+void parse( const char *( *text ) );
+void write( fileHandle_t file, const char *name );
 
-       void setTriggered(bool b) {
-               triggered = b;
-       }
+void setTriggered( bool b ) {
+       triggered = b;
+}
 
-       bool getTriggered() {
-               return triggered;
-       }
+bool getTriggered() {
+       return triggered;
+}
 
 protected:
-       eventType type;
-       idStr paramStr;
-       long time;
-       bool triggered;
+eventType type;
+idStr paramStr;
+long time;
+bool triggered;
 
 };
 
 class idCameraDef {
 public:
 
-       void clear() {
-               currentCameraPosition = 0;
-               cameraRunning = false;
-               lastDirection.Zero();
-               baseTime = 30;
-               activeTarget = 0;
-               name = "camera01";
-               fov.setFOV(90);
-               int i;
-               for (i = 0; i < targetPositions.Num(); i++) {
-                       delete targetPositions[i];
-               }
-               for (i = 0; i < events.Num(); i++) {
-                       delete events[i];
-               }
-               delete cameraPosition;
-               cameraPosition = NULL;
-               events.Clear();
-               targetPositions.Clear();
+void clear() {
+       currentCameraPosition = 0;
+       cameraRunning = false;
+       lastDirection.Zero();
+       baseTime = 30;
+       activeTarget = 0;
+       name = "camera01";
+       fov.setFOV( 90 );
+       int i;
+       for ( i = 0; i < targetPositions.Num(); i++ ) {
+               delete targetPositions[i];
        }
-
-       idCameraPosition *startNewCamera(idCameraPosition::positionType type) {
-               clear();
-               if (type == idCameraPosition::SPLINE) {
-                       cameraPosition = new idSplinePosition();
-               } else if (type == idCameraPosition::INTERPOLATED) {
-                       cameraPosition = new idInterpolatedPosition();
-               } else {
-                       cameraPosition = new idFixedPosition();
-               }
-               return cameraPosition;
+       for ( i = 0; i < events.Num(); i++ ) {
+               delete events[i];
        }
+       delete cameraPosition;
+       cameraPosition = NULL;
+       events.Clear();
+       targetPositions.Clear();
+}
 
-       idCameraDef() {
-               cameraPosition = NULL;
-               clear();
+idCameraPosition *startNewCamera( idCameraPosition::positionType type ) {
+       clear();
+       if ( type == idCameraPosition::SPLINE ) {
+               cameraPosition = new idSplinePosition();
        }
-
-       ~idCameraDef() {
-               clear();
+       else if ( type == idCameraPosition::INTERPOLATED ) {
+               cameraPosition = new idInterpolatedPosition();
        }
-
-       void addEvent(idCameraEvent::eventType t, const char *param, long time);
-
-       void addEvent(idCameraEvent *event);
-
-       void removeEvent( int index);
-
-       static int sortEvents(const void *p1, const void *p2);
-
-       int numEvents() {
-               return events.Num();
+       else {
+               cameraPosition = new idFixedPosition();
        }
+       return cameraPosition;
+}
 
-       idCameraEvent *getEvent(int index) {
-               assert(index >= 0 && index < events.Num());
-               return events[index];
-       }
+idCameraDef() {
+       cameraPosition = NULL;
+       clear();
+}
 
-       void parse(const char *(*text));
-       bool load(const char *filename);
-       void save(const char *filename);
-
-       void buildCamera();
-
-       //idSplineList *getcameraPosition() {
-       //      return &cameraPosition;
-       //}
-
-       static idCameraPosition *newFromType(idCameraPosition::positionType t) {
-               switch (t) {
-                       case idCameraPosition::FIXED : return new idFixedPosition();
-                       case idCameraPosition::INTERPOLATED : return new idInterpolatedPosition();
-                       case idCameraPosition::SPLINE : return new idSplinePosition();
-      default:
-        break;
-               };
-               return NULL;
-       }
+~idCameraDef() {
+       clear();
+}
 
-       void addTarget(const char *name, idCameraPosition::positionType type);
+void addEvent( idCameraEvent::eventType t, const char *param, long time );
 
-       idCameraPosition *getActiveTarget() {
-               if (targetPositions.Num() == 0) {
-                       addTarget(NULL, idCameraPosition::FIXED);
-               }
-               return targetPositions[activeTarget];
-       }
+void addEvent( idCameraEvent *event );
 
-       idCameraPosition *getActiveTarget(int index) {
-               if (targetPositions.Num() == 0) {
-                       addTarget(NULL, idCameraPosition::FIXED);
-                       return targetPositions[0];
-               }
-               return targetPositions[index];
-       }
+void removeEvent( int index );
 
-       int numTargets() {
-               return targetPositions.Num();
-       }
+static int sortEvents( const void *p1, const void *p2 );
 
+int numEvents() {
+       return events.Num();
+}
 
-       void setActiveTargetByName(const char *name) {
-               for (int i = 0; i < targetPositions.Num(); i++) {
-                       if (Q_stricmp(name, targetPositions[i]->getName()) == 0) {
-                               setActiveTarget(i);
-                               return;
-                       }
-               }
-       }
+idCameraEvent *getEvent( int index ) {
+       assert( index >= 0 && index < events.Num() );
+       return events[index];
+}
 
-       void setActiveTarget(int index) {
-               assert(index >= 0 && index < targetPositions.Num());
-               activeTarget = index;
-       }
+void parse( const char *( *text ) );
+bool load( const char *filename );
+void save( const char *filename );
 
-       void setRunning(bool b) {
-               cameraRunning = b;
-       }
+void buildCamera();
 
-       void setBaseTime(float f) {
-               baseTime = f;
-       }
+//idSplineList *getcameraPosition() {
+//     return &cameraPosition;
+//}
 
-       float getBaseTime() {
-               return baseTime;
-       }
+static idCameraPosition *newFromType( idCameraPosition::positionType t ) {
+       switch ( t ) {
+       case idCameraPosition::FIXED: return new idFixedPosition();
+       case idCameraPosition::INTERPOLATED: return new idInterpolatedPosition();
+       case idCameraPosition::SPLINE: return new idSplinePosition();
+       default:
+               break;
+       };
+       return NULL;
+}
 
-       float getTotalTime() {
-               return totalTime;
-       }
-       
-       void startCamera(long t);
-       void stopCamera() {
-               cameraRunning = true;
-       }
-       void getActiveSegmentInfo(int segment, idVec3 &origin, idVec3 &direction, float *fv);
-
-       bool getCameraInfo(long time, idVec3 &origin, idVec3 &direction, float *fv);
-       bool getCameraInfo(long time, float *origin, float *direction, float *fv) {
-               idVec3 org, dir;
-               org[0] = origin[0];
-               org[1] = origin[1];
-               org[2] = origin[2];
-               dir[0] = direction[0];
-               dir[1] = direction[1];
-               dir[2] = direction[2];
-               bool b = getCameraInfo(time, org, dir, fv);
-               origin[0] = org[0];
-               origin[1] = org[1];
-               origin[2] = org[2];
-               direction[0] = dir[0];
-               direction[1] = dir[1];
-               direction[2] = dir[2];
-               return b;
-       }
+void addTarget( const char *name, idCameraPosition::positionType type );
 
-       void draw(bool editMode) {
-                // gcc doesn't allow casting away from bools
-                // why?  I've no idea...
-               if (cameraPosition) {
-                       cameraPosition->draw((bool)((editMode || cameraRunning) && cameraEdit));
-                       int count = targetPositions.Num();
-                       for (int i = 0; i < count; i++) {
-                               targetPositions[i]->draw((bool)((editMode || cameraRunning) && i == activeTarget && !cameraEdit));
-                       }
-               }
+idCameraPosition *getActiveTarget() {
+       if ( targetPositions.Num() == 0 ) {
+               addTarget( NULL, idCameraPosition::FIXED );
        }
+       return targetPositions[activeTarget];
+}
 
-/*
-       int numSegments() {
-               if (cameraEdit) {
-                       return cameraPosition.numSegments();
-               }
-               return getTargetSpline()->numSegments();
+idCameraPosition *getActiveTarget( int index ) {
+       if ( targetPositions.Num() == 0 ) {
+               addTarget( NULL, idCameraPosition::FIXED );
+               return targetPositions[0];
        }
+       return targetPositions[index];
+}
 
-       int getActiveSegment() {
-               if (cameraEdit) {
-                       return cameraPosition.getActiveSegment();
-               }
-               return getTargetSpline()->getActiveSegment();
-       }
+int numTargets() {
+       return targetPositions.Num();
+}
 
-       void setActiveSegment(int i) {
-               if (cameraEdit) {
-                       cameraPosition.setActiveSegment(i);
-               } else {
-                       getTargetSpline()->setActiveSegment(i);
-               }
-       }
-*/
-       int numPoints() {
-               if (cameraEdit) {
-                       return cameraPosition->numPoints();
-               }
-               return getActiveTarget()->numPoints();
-       }
 
-       const idVec3 *getPoint(int index) {
-               if (cameraEdit) {
-                       return cameraPosition->getPoint(index);
+void setActiveTargetByName( const char *name ) {
+       for ( int i = 0; i < targetPositions.Num(); i++ ) {
+               if ( Q_stricmp( name, targetPositions[i]->getName() ) == 0 ) {
+                       setActiveTarget( i );
+                       return;
                }
-               return getActiveTarget()->getPoint(index);
        }
-
-       void stopEdit() {
-               editMode = false;
-               if (cameraEdit) {
-                       cameraPosition->stopEdit();
-               } else {
-                       getActiveTarget()->stopEdit();
+}
+
+void setActiveTarget( int index ) {
+       assert( index >= 0 && index < targetPositions.Num() );
+       activeTarget = index;
+}
+
+void setRunning( bool b ) {
+       cameraRunning = b;
+}
+
+void setBaseTime( float f ) {
+       baseTime = f;
+}
+
+float getBaseTime() {
+       return baseTime;
+}
+
+float getTotalTime() {
+       return totalTime;
+}
+
+void startCamera( long t );
+void stopCamera() {
+       cameraRunning = true;
+}
+void getActiveSegmentInfo( int segment, idVec3 &origin, idVec3 &direction, float *fv );
+
+bool getCameraInfo( long time, idVec3 &origin, idVec3 &direction, float *fv );
+bool getCameraInfo( long time, float *origin, float *direction, float *fv ) {
+       idVec3 org, dir;
+       org[0] = origin[0];
+       org[1] = origin[1];
+       org[2] = origin[2];
+       dir[0] = direction[0];
+       dir[1] = direction[1];
+       dir[2] = direction[2];
+       bool b = getCameraInfo( time, org, dir, fv );
+       origin[0] = org[0];
+       origin[1] = org[1];
+       origin[2] = org[2];
+       direction[0] = dir[0];
+       direction[1] = dir[1];
+       direction[2] = dir[2];
+       return b;
+}
+
+void draw( bool editMode ) {
+       // gcc doesn't allow casting away from bools
+       // why?  I've no idea...
+       if ( cameraPosition ) {
+               cameraPosition->draw( (bool)( ( editMode || cameraRunning ) && cameraEdit ) );
+               int count = targetPositions.Num();
+               for ( int i = 0; i < count; i++ ) {
+                       targetPositions[i]->draw( (bool)( ( editMode || cameraRunning ) && i == activeTarget && !cameraEdit ) );
                }
        }
+}
 
-       void startEdit(bool camera) {
-               cameraEdit = camera;
-               if (camera) {
-                       cameraPosition->startEdit();
-                       for (int i = 0; i < targetPositions.Num(); i++) {
-                               targetPositions[i]->stopEdit();
-                       }
-               } else {
-                       getActiveTarget()->startEdit();
-                       cameraPosition->stopEdit();
+/*
+    int numSegments() {
+        if (cameraEdit) {
+            return cameraPosition.numSegments();
+        }
+        return getTargetSpline()->numSegments();
+    }
+
+    int getActiveSegment() {
+        if (cameraEdit) {
+            return cameraPosition.getActiveSegment();
+        }
+        return getTargetSpline()->getActiveSegment();
+    }
+
+    void setActiveSegment(int i) {
+        if (cameraEdit) {
+            cameraPosition.setActiveSegment(i);
+        } else {
+            getTargetSpline()->setActiveSegment(i);
+        }
+    }
+ */
+int numPoints() {
+       if ( cameraEdit ) {
+               return cameraPosition->numPoints();
+       }
+       return getActiveTarget()->numPoints();
+}
+
+const idVec3 *getPoint( int index ) {
+       if ( cameraEdit ) {
+               return cameraPosition->getPoint( index );
+       }
+       return getActiveTarget()->getPoint( index );
+}
+
+void stopEdit() {
+       editMode = false;
+       if ( cameraEdit ) {
+               cameraPosition->stopEdit();
+       }
+       else {
+               getActiveTarget()->stopEdit();
+       }
+}
+
+void startEdit( bool camera ) {
+       cameraEdit = camera;
+       if ( camera ) {
+               cameraPosition->startEdit();
+               for ( int i = 0; i < targetPositions.Num(); i++ ) {
+                       targetPositions[i]->stopEdit();
                }
-               editMode = true;
        }
+       else {
+               getActiveTarget()->startEdit();
+               cameraPosition->stopEdit();
+       }
+       editMode = true;
+}
 
-       bool waitEvent(int index);
+bool waitEvent( int index );
 
-       const char *getName() {
-               return name.c_str();
-       }
+const char *getName() {
+       return name.c_str();
+}
 
-       void setName(const char *p) {
-               name = p;
-       }
+void setName( const char *p ) {
+       name = p;
+}
 
-       idCameraPosition *getPositionObj() {
-               if (cameraPosition == NULL) {
-                       cameraPosition = new idFixedPosition();
-               }
-               return cameraPosition;
+idCameraPosition *getPositionObj() {
+       if ( cameraPosition == NULL ) {
+               cameraPosition = new idFixedPosition();
        }
+       return cameraPosition;
+}
 
 protected:
-       idStr name;
-       int currentCameraPosition;
-       idVec3 lastDirection;
-       bool cameraRunning;
-       idCameraPosition *cameraPosition;
-       idList<idCameraPosition*> targetPositions;
-       idList<idCameraEvent*> events;
-       idCameraFOV fov;
-       int activeTarget;
-       float totalTime;
-       float baseTime;
-       long startTime;
-
-       bool cameraEdit;
-       bool editMode;
+idStr name;
+int currentCameraPosition;
+idVec3 lastDirection;
+bool cameraRunning;
+idCameraPosition *cameraPosition;
+idList<idCameraPosition*> targetPositions;
+idList<idCameraEvent*> events;
+idCameraFOV fov;
+int activeTarget;
+float totalTime;
+float baseTime;
+long startTime;
+
+bool cameraEdit;
+bool editMode;
 };
 
 extern bool g_splineMode;