140 if (
tc.X)
delete tc.X;
141 if (
tc.Y)
delete tc.Y;
142 if (
tc.Z)
delete tc.Z;
143 if (
tc.Q)
delete tc.Q;
146 if (
ad.X)
delete ad.X;
147 if (
ad.Y)
delete ad.Y;
148 if (
ad.Z)
delete ad.Z;
149 if (
ad.Q)
delete ad.Q;
215void HCompressedAnimClass::Free(
void)
217 if (NodeMotion !=
NULL) {
262 strcat(Name,aheader.
Name);
271 if (base_pose ==
NULL) {
284 if (NodeMotion ==
NULL) {
289 for (i=0; i<NumNodes; i++) {
290 NodeMotion[i].SetFlavor(Flavor);
310 if (!read_channel(cload,&tc_chan)) {
314 add_channel(tc_chan);
321 WWDEBUG_SAY((
"ERROR! animation %s indexes a bone not present in the model. Please re-export!\r\n",Name));
327 if (!read_channel(cload,&ad_chan)) {
331 add_channel(ad_chan);
338 WWDEBUG_SAY((
"ERROR! animation %s indexes a bone not present in the model. Please re-export!\r\n",Name));
345 if (!read_bit_channel(cload,&newbitchan)) {
348 if (newbitchan->
Get_Pivot() < NumNodes) {
349 add_bit_channel(newbitchan);
356 WWDEBUG_SAY((
"ERROR! animation %s indexes a bone not present in the model. Please re-export!\r\n",Name));
391 bool result = (*newchan)->
Load_W3D(cload);
399 *newchan =
W3DNEW AdaptiveDeltaMotionChannelClass;
400 bool result = (*newchan)->
Load_W3D(cload);
426 NodeMotion[idx].tc.X = newchan;
430 NodeMotion[idx].tc.Y = newchan;
434 NodeMotion[idx].tc.Z = newchan;
438 NodeMotion[idx].tc.Q = newchan;
451 NodeMotion[idx].ad.X = newchan;
455 NodeMotion[idx].ad.Y = newchan;
459 NodeMotion[idx].ad.Z = newchan;
463 NodeMotion[idx].ad.Q = newchan;
486 *newchan =
W3DNEW TimeCodedBitChannelClass;
487 bool result = (*newchan)->
Load_W3D(cload);
513 NodeMotion[idx].Vis = newchan;
569 if (NodeMotion[pividx].tc.Q)
q = NodeMotion[pividx].tc.Q->Get_QuatVector(frame);
570 else q.Make_Identity();
573 if (NodeMotion[pividx].ad.Q)
q = NodeMotion[pividx].ad.Q->Get_QuatVector(frame);
574 else q.Make_Identity();
600 if (NodeMotion[pividx].tc.Q) {
602 q = NodeMotion[pividx].tc.Q->Get_QuatVector(frame);
611 if (NodeMotion[pividx].ad.Q) {
613 q = NodeMotion[pividx].ad.Q->Get_QuatVector(frame);
643 if (NodeMotion[pividx].Vis !=
NULL) {
644 return (NodeMotion[pividx].Vis->Get_Bit((
int)frame) == 1);
668 WWASSERT((pividx >= 0) && (pividx < NumNodes));
670 if (NodeMotion[pividx].vd.X !=
NULL)
return true;
671 if (NodeMotion[pividx].vd.Y !=
NULL)
return true;
672 if (NodeMotion[pividx].vd.Z !=
NULL)
return true;
673 if (NodeMotion[pividx].vd.Q !=
NULL)
return true;
674 if (NodeMotion[pividx].Vis !=
NULL)
return true;
681 WWASSERT((pividx >= 0) && (pividx < NumNodes));
682 return NodeMotion[pividx].vd.X !=
NULL;
687 WWASSERT((pividx >= 0) && (pividx < NumNodes));
688 return NodeMotion[pividx].vd.Y !=
NULL;
693 WWASSERT((pividx >= 0) && (pividx < NumNodes));
694 return NodeMotion[pividx].vd.Z !=
NULL;
699 WWASSERT((pividx >= 0) && (pividx < NumNodes));
700 return NodeMotion[pividx].vd.Q !=
NULL;
705 WWASSERT((pividx >= 0) && (pividx < NumNodes));
706 return NodeMotion[pividx].Vis !=
NULL;
@ ANIM_FLAVOR_ADAPTIVE_DELTA
@ W3D_CHUNK_COMPRESSED_BIT_CHANNEL
@ W3D_CHUNK_COMPRESSED_ANIMATION_HEADER
@ W3D_CHUNK_COMPRESSED_ANIMATION_CHANNEL
bool Load_W3D(ChunkLoadClass &cload)
uint32 Read(void *buf, uint32 nbytes)
bool Has_X_Translation(int pividx)
bool Has_Y_Translation(int pividx)
bool Has_Visibility(int pividx)
bool Get_Visibility(int pividx, float frame)
void Get_Transform(Matrix3D &transform, int pividx, float frame) const
bool Has_Z_Translation(int pividx)
void Get_Translation(Vector3 &translation, int pividx, float frame) const
bool Is_Node_Motion_Present(int pividx)
bool Has_Rotation(int pividx)
HCompressedAnimClass(void)
~HCompressedAnimClass(void)
void Get_Orientation(Quaternion &orientation, int pividx, float frame) const
int Load_W3D(ChunkLoadClass &cload)
WWINLINE int Num_Pivots(void) const
WWINLINE void Make_Identity(void)
bool Load_W3D(ChunkLoadClass &cload)
void Get_Vector(float32 frame, float *setvec)
bool Load_W3D(ChunkLoadClass &cload)
static WW3DAssetManager * Get_Instance(void)
virtual HTreeClass * Get_HTree(const char *name)
Matrix3D & Build_Matrix3D(const Quaternion &q, Matrix3D &out)
~NodeCompressedMotionStruct()
TimeCodedMotionChannelClass * Z
void SetFlavor(int flavor)
struct NodeCompressedMotionStruct::@251120225114162023026320156143164261166107265171::@275165275207377012347063022205303177170156130340 ad
TimeCodedMotionChannelClass * Q
TimeCodedMotionChannelClass * Y
struct NodeCompressedMotionStruct::@251120225114162023026320156143164261166107265171::@211370060311145330016175051277266071252065320323 vd
struct NodeCompressedMotionStruct::@251120225114162023026320156143164261166107265171::@141172220036133323143076343377314335114247053033 tc
NodeCompressedMotionStruct()
TimeCodedMotionChannelClass * X
TimeCodedBitChannelClass * Vis