74 params.Continuity = 0.0f;
76 Params.Insert(index,params);
96 Params[i].Tension = tension;
97 Params[i].Continuity = continuity;
104 if (tension) *tension =
Params[i].Tension;
105 if (continuity) *continuity =
Params[i].Continuity;
106 if (bias) *bias =
Params[i].Bias;
111 if (
Keys.Count() < 2) {
112 for (
int i=0; i<
Keys.Count(); i++) {
120 int end =
Keys.Count() - 1;
122 Tangents[end].OutTangent.Set(0,0,0);
128 float k0 = 0.5f * ((1-
Params[0].Tension) * (1-
Params[0].Continuity) * (1-
Params[0].Bias));
129 float k1 = 0.5f * ((1-
Params[0].Tension) * (1+
Params[0].Continuity) * (1+
Params[0].Bias));
130 float k2 = 0.5f * ((1-
Params[0].Tension) * (1+
Params[0].Continuity) * (1-
Params[0].Bias));
131 float k3 = 0.5f * ((1-
Params[0].Tension) * (1-
Params[0].Continuity) * (1+
Params[0].Bias));
143 float k2 = 0.25f * ((1-
Params[0].Tension) * (1+
Params[0].Continuity) * (1-
Params[0].Bias));
144 float k3 = 0.25f * ((1-
Params[0].Tension) * (1-
Params[0].Continuity) * (1+
Params[0].Bias));
152 float k0 = 0.25f * ((1-
Params[0].Tension) * (1-
Params[0].Continuity) * (1-
Params[0].Bias));
153 float k1 = 0.25f * ((1-
Params[0].Tension) * (1+
Params[0].Continuity) * (1+
Params[0].Bias));
159 float total_time = (
Keys[1].Time -
Keys[0].Time) + (
Keys[end].Time -
Keys[end-1].Time);
160 float in_factor = 2.0f * (
Keys[end].Time -
Keys[end-1].Time) / total_time;
161 float out_factor = 2.0f * (
Keys[1].Time -
Keys[0].Time) / total_time;
162 Tangents[end].InTangent *= in_factor;
163 Tangents[0].OutTangent *= out_factor;
167 for (
int pi=1;pi<
Keys.Count() - 1; pi++) {
169 float k0 = 0.5f * ((1-
Params[pi].Tension) * (1-
Params[pi].Continuity) * (1-
Params[pi].Bias));
170 float k1 = 0.5f * ((1-
Params[pi].Tension) * (1+
Params[pi].Continuity) * (1+
Params[pi].Bias));
171 float k2 = 0.5f * ((1-
Params[pi].Tension) * (1+
Params[pi].Continuity) * (1-
Params[pi].Bias));
172 float k3 = 0.5f * ((1-
Params[pi].Tension) * (1-
Params[pi].Continuity) * (1+
Params[pi].Bias));
182 float total_time = (
Keys[pi+1].Time -
Keys[pi-1].Time);
183 float in_factor = 2.0f * (
Keys[pi].Time -
Keys[pi-1].Time) / total_time;
184 float out_factor = 2.0f * (
Keys[pi+1].Time -
Keys[pi].Time) / total_time;
186 Tangents[pi].InTangent *= in_factor;
187 Tangents[pi].OutTangent *= out_factor;
205 for (
int i=0; i<
Params.Count(); i++) {
232 for (i=0; i<
Keys.Count(); i++) {
241 WWDEBUG_SAY((
"Unhandled Chunk: 0x%X File: %s Line: %d\r\n",__FILE__,__LINE__));
uint32 Read(void *buf, uint32 nbytes)
uint32 Write(const void *buf, uint32 nbytes)
bool Begin_Chunk(uint32 id)
DynamicVectorClass< KeyClass > Keys
virtual bool Save(ChunkSaveClass &csave)
virtual void Remove_Key(int i)
virtual void Clear_Keys(void)
virtual bool Load(ChunkLoadClass &cload)
DynamicVectorClass< TangentsClass > Tangents
virtual int Add_Key(const Vector3 &point, float t)
virtual void Set_TCB_Params(int i, float tension, float continuity, float bias)
void Update_Tangents(void)
virtual int Add_Key(const Vector3 &point, float t)
virtual bool Load(ChunkLoadClass &cload)
virtual void Clear_Keys(void)
virtual void Remove_Key(int i)
virtual void Get_TCB_Params(int i, float *tension, float *continuity, float *bias)
DynamicVectorClass< TCBClass > Params
virtual const PersistFactoryClass & Get_Factory(void) const
virtual bool Save(ChunkSaveClass &csave)
static WWINLINE void Subtract(const Vector3 &a, const Vector3 &b, Vector3 *c)
static WWINLINE void Add(const Vector3 &a, const Vector3 &b, Vector3 *c)
SimplePersistFactoryClass< TCBSpline3DClass, WWMATH_CHUNKID_TCBSPLINE3D > _TCBSpline3DFactory
#define DECLARE_FORCE_LINK(module)