120 if (
Keys.Count() > 0) {
129 if (
Keys.Count() > 0) {
144 assert(i <
Keys.Count());
145 if (set_point !=
NULL) {
146 *set_point =
Keys[i].Point;
149 *set_t =
Keys[i].Time;
156 assert(i <
Keys.Count());
157 Keys[i].Point = point;
164 while (idx <
Keys.Count() &&
Keys[idx].Time < t) {
169 newkey.
Point = point;
172 Keys.Insert(idx,newkey);
179 assert(i <
Keys.Count());
194 while (time >
Keys[i+1].Time) {
199 *t = (time -
Keys[i].Time) / (
Keys[i+1].Time -
Keys[i].Time);
204 int keycount =
Keys.Count();
213 for (
int i=0; i<keycount; i++) {
247 for (i=0; i<keycount; i++) {
255 WWDEBUG_SAY((
"Unhandled Chunk: 0x%X File: %s Line: %d\r\n",__FILE__,__LINE__));
274 if (time <
Keys[0].Time) {
275 *set_val =
Keys[0].Point;
279 if (time >=
Keys[
Keys.Count() - 1].Time) {
280 *set_val =
Keys[
Keys.Count() - 1].Point;
288 *set_val =
Keys[i0].Point + t * (
Keys[i1].Point -
Keys[i0].Point);
315 WWDEBUG_SAY((
"Unhandled Chunk: 0x%X File: %s Line: %d\r\n",__FILE__,__LINE__));
363 if (
Keys.Count() > 0) {
372 if (
Keys.Count() > 0) {
387 assert(i <
Keys.Count());
388 if (set_point !=
NULL) {
389 *set_point =
Keys[i].Point;
392 *set_t =
Keys[i].Time;
395 *extra =
Keys[i].Extra;
402 assert(i <
Keys.Count());
403 Keys[i].Point = point;
404 Keys[i].Extra = extra;
411 while (idx <
Keys.Count() &&
Keys[idx].Time < t) {
416 newkey.
Point = point;
418 newkey.
Extra = extra;
420 Keys.Insert(idx,newkey);
427 assert(i <
Keys.Count());
439 if (time <
Keys[0].Time) {
440 *i0 =
Keys.Count() - 1;
442 float interval = 1.0f -
Keys[*i0].Time +
Keys[*i1].Time;
443 *t = (1.0f -
Keys[*i0].Time + time) / interval;
446 else if (time >
Keys[
Keys.Count() - 1].Time) {
447 *i0 =
Keys.Count() - 1;
449 float interval = 1.0f -
Keys[*i0].Time +
Keys[*i1].Time;
450 *t = (time -
Keys[*i0].Time) / interval;
460 while (time >
Keys[i+1].Time) {
465 *t = (time -
Keys[i].Time) / (
Keys[i+1].Time -
Keys[i].Time);
470 int keycount =
Keys.Count();
479 for (
int i=0; i<keycount; i++) {
514 for (i=0; i<keycount; i++) {
523 WWDEBUG_SAY((
"Unhandled Chunk: 0x%X File: %s Line: %d\r\n",__FILE__,__LINE__));
540 if (time <
Keys[0].Time) {
541 *set_val =
Keys[0].Point;
545 if (time >=
Keys[
Keys.Count() - 1].Time) {
546 *set_val =
Keys[
Keys.Count() - 1].Point;
555 *set_val =
Keys[i0].Point + t * (
Keys[i1].Point -
Keys[i0].Point);
582 WWDEBUG_SAY((
"Unhandled Chunk: 0x%X File: %s Line: %d\r\n",__FILE__,__LINE__));
#define WRITE_MICRO_CHUNK(csave, id, var)
#define READ_MICRO_CHUNK(cload, id, var)
uint32 Cur_Micro_Chunk_ID()
uint32 Read(void *buf, uint32 nbytes)
uint32 Write(const void *buf, uint32 nbytes)
bool Begin_Chunk(uint32 id)
float Get_Start_Time(void)
virtual void Clear_Keys(void)
virtual bool Is_Looping(void)
void Find_Interval(float time, int *i0, int *i1, float *t)
virtual int Key_Count(void)
virtual void Get_Key(int i, float *set_point, float *set_t, unsigned int *extra=NULL)
virtual bool Load(ChunkLoadClass &cload)
virtual void Set_Key(int i, float point, unsigned int extra=0)
virtual int Add_Key(float point, float t, unsigned int extra=0)
virtual void Remove_Key(int i)
Curve1DClass & operator=(const Curve1DClass &that)
virtual bool Save(ChunkSaveClass &csave)
virtual ~Curve1DClass(void)
DynamicVectorClass< KeyClass > Keys
virtual void Set_Looping(bool onoff)
virtual void Remove_Key(int i)
virtual void Clear_Keys(void)
virtual void Set_Key(int i, const Vector3 &point)
virtual int Key_Count(void)
void Find_Interval(float time, int *i0, int *i1, float *t)
virtual bool Load(ChunkLoadClass &cload)
Curve3DClass & operator=(const Curve3DClass &that)
virtual ~Curve3DClass(void)
float Get_Start_Time(void)
virtual void Set_Looping(bool onoff)
virtual bool Is_Looping(void)
virtual bool Save(ChunkSaveClass &csave)
virtual void Get_Key(int i, Vector3 *set_point, float *set_t)
virtual int Add_Key(const Vector3 &point, float t)
DynamicVectorClass< KeyClass > Keys
virtual bool Save(ChunkSaveClass &csave)
virtual void Evaluate(float time, float *set_val)
virtual const PersistFactoryClass & Get_Factory(void) const
virtual bool Load(ChunkLoadClass &cload)
virtual const PersistFactoryClass & Get_Factory(void) const
virtual void Evaluate(float time, Vector3 *set_val)
virtual bool Save(ChunkSaveClass &csave)
virtual bool Load(ChunkLoadClass &cload)
SimplePersistFactoryClass< LinearCurve1DClass, WWMATH_CHUNKID_LINEARCURVE1D > _LinearCurve1DFactory
SimplePersistFactoryClass< LinearCurve3DClass, WWMATH_CHUNKID_LINEARCURVE3D > _LinearCurve3DFactory
@ CURVE1D_CHUNK_VARIABLES
@ CURVE3D_CHUNK_VARIABLES
@ CURVE1D_VARIABLE_KEYCOUNT
@ LINEARCURVE1D_CHUNK_CURVE1D
@ CURVE3D_VARIABLE_ISLOOPING
@ CURVE3D_VARIABLE_KEYCOUNT
@ LINEARCURVE3D_CHUNK_CURVE3D
@ CURVE1D_VARIABLE_ISLOOPING
#define DECLARE_FORCE_LINK(module)