111 for (
int i=0; i<count; i++) {
118 WWDEBUG_SAY((
"OBSOLETE Dist-LOD model found! Please re-export %s!\r\n",name));
122 for (i=0; i<count; i++) {
137 if (pCDistLODClass ==
NULL)
145 delete pCDistLODClass;
199 assert(name !=
NULL);
204 for (
int i=0; i<LodCount; i++) {
205 Lods[i].Name =
nstrdup(modeldefs[i].Name);
207 Lods[i].ResUpDist = modeldefs[i].
ResUpDist;
242void DistLODDefClass::Free(
void)
249 for (
int i=0; i<LodCount; i++) {
250 if (Lods[i].Name !=
NULL) {
251 delete[] Lods[i].Name;
280 if (read_header(cload) ==
false) {
287 for (
int iLOD = 0; iLOD < LodCount; iLOD ++) {
309 Lods[iLOD].ResUpDist = lodStruct.
LODMin;
310 Lods[iLOD].ResDownDist = lodStruct.
LODMax;
344 W3dLODModelHeaderStruct lodHeader;
345 if (cload.
Read(&lodHeader,
sizeof(W3dLODModelHeaderStruct)) !=
sizeof(W3dLODModelHeaderStruct)) {
392 LodCount = def.LodCount;
396 for (
int i=0; i<LodCount; i++) {
399 assert(Lods[i].Model !=
NULL);
400 Lods[i].Model->Set_Container(
this);
403 Lods[i].ResUpDist = def.Lods[i].
ResUpDist;
427 LodCount = that.LodCount;
428 CurLod = VpPushLod = that.CurLod;
431 for (
int i=0; i<LodCount; i++) {
433 Lods[i].Model = that.Lods[i].Model->
Clone();
434 assert(Lods[i].Model !=
NULL);
435 Lods[i].Model->Set_Container(
this);
438 Lods[i].ResUpDist = that.Lods[i].ResUpDist;
439 Lods[i].ResDownDist = that.Lods[i].ResDownDist;
475void DistLODClass::Free(
void)
478 for (
int i=0; i<LodCount; i++) {
479 if (Lods[i].Model !=
NULL) {
482 Lods[i].Model =
NULL;
508 return Lods[CurLod].Model->Get_Num_Polys();
531 Lods[CurLod].Model->Render(rinfo);
550 Lods[CurLod].Model->Special_Render(rinfo);
587 assert(index < LodCount);
589 if (Lods[index].Model ==
NULL) {
592 Lods[index].Model->Add_Ref();
593 return Lods[index].Model;
603 for (
int i=0; i< LodCount; i++) {
604 Lods[i].Model->Add_Sub_Object_To_Bone( sub_lod_obj->Lods[
MIN( i, sub_lod_obj->LodCount-1 ) ].Model, bone_index);
607 Lods[0].Model->Add_Sub_Object_To_Bone( subobj, bone_index);
630 for (
int i=0; i<LodCount; i++) {
631 assert(Lods[i].Model !=
NULL);
632 Lods[i].Model->Set_Transform(m);
654 for (
int i=0; i<LodCount; i++) {
655 assert(Lods[i].Model !=
NULL);
656 Lods[i].Model->Set_Position(v);
675 for (
int i=0; i<LodCount; i++) {
676 assert(Lods[i].Model !=
NULL);
677 Lods[i].Model->Set_Animation();
696 for (
int i=0; i<LodCount; i++) {
697 assert(Lods[i].Model !=
NULL);
698 Lods[i].Model->Set_Animation(motion,frame,mode);
717 for (
int i=0; i<LodCount; i++) {
718 assert(Lods[i].Model !=
NULL);
719 Lods[i].Model->Set_Animation(motion0,frame0,motion1,frame1,percentage);
738 for (
int i=0; i<LodCount; i++) {
739 assert(Lods[i].Model !=
NULL);
740 Lods[i].Model->Set_Animation( anim_combo);
759 return Lods[0].Model->Peek_Animation();
777 return Lods[0].Model->Get_Num_Bones();
795 return Lods[0].Model->Get_Bone_Name(bone_index);
814 return Lods[0].Model->Get_Bone_Index(bonename);
833 return Lods[0].Model->Get_Bone_Transform(bonename);
852 return Lods[0].Model->Get_Bone_Transform(boneindex);
870 for (
int i=0; i<LodCount; i++) {
871 assert(Lods[i].Model !=
NULL);
872 Lods[i].Model->Capture_Bone(bindex);
891 for (
int i=0; i<LodCount; i++) {
892 assert(Lods[i].Model !=
NULL);
893 Lods[i].Model->Release_Bone(bindex);
913 return Lods[0].Model->Is_Bone_Captured(bindex);
931 for (
int i=0; i<LodCount; i++) {
932 assert(Lods[i].Model !=
NULL);
933 Lods[i].Model->Control_Bone(bindex,tm,world_space_translation);
954 return Lods[HIGHEST_LOD].Model->Cast_Ray(raytest);
978 return Lods[HIGHEST_LOD].Model->Cast_AABox(boxtest);
1000 return Lods[HIGHEST_LOD].Model->Cast_OBBox(boxtest);
1021 return Lods[0].Model->Get_Num_Snap_Points();
1039 Lods[0].Model->Get_Snap_Point(index,set);
1057 for (
int i=0; i<LodCount; i++) {
1058 assert(Lods[CurLod].Model !=
NULL);
1059 Lods[CurLod].Model->Scale(
scale);
1078 for (
int i=0; i<LodCount; i++) {
1079 assert(Lods[i].Model !=
NULL);
1080 Lods[i].Model->Scale(scalex,scaley,scalez);
1097void DistLODClass::Update_Lod(
const CameraClass & camera)
1102 Lods[CurLod].Model->Get_Bounding_Sphere().Center
1105 if (dist < Lods[CurLod].ResUpDist) {
1107 }
else if (dist > Lods[CurLod].ResDownDist) {
1125void DistLODClass::Increment_Lod(
void)
1130 Lods[CurLod].Model->Notify_Removed(
Scene);
1134 Lods[CurLod].Model->Notify_Added(
Scene);
1152void DistLODClass::Decrement_Lod(
void)
1154 if (CurLod < LodCount - 1) {
1156 Lods[CurLod].Model->Notify_Removed(
Scene);
1160 Lods[CurLod].Model->Notify_Added(
Scene);
Color scale(const Color &a, const Color &b)
@ W3D_CHUNK_LODMODEL_HEADER
uint32 Read(void *buf, uint32 nbytes)
CompositeRenderObjClass(void)
virtual const char * Get_Name(void) const
virtual void Set_Name(const char *name)
virtual void Update_Obj_Space_Bounding_Volumes(void)
virtual int Get_Bone_Index(const char *bonename)
virtual const char * Get_Bone_Name(int bone_index)
virtual int Get_Num_Polys(void) const
virtual void Capture_Bone(int bindex)
virtual void Render(RenderInfoClass &rinfo)
virtual bool Is_Bone_Captured(int bindex) const
virtual void Control_Bone(int bindex, const Matrix3D &tm, bool world_space_translation=false)
virtual RenderObjClass * Get_Sub_Object(int index) const
virtual ~DistLODClass(void)
virtual bool Cast_AABox(AABoxCollisionTestClass &boxtest)
DistLODClass(const DistLODDefClass &desc)
virtual void Get_Snap_Point(int index, Vector3 *set)
virtual HAnimClass * Peek_Animation(void)
virtual void Set_Transform(const Matrix3D &m)
virtual int Get_Num_Snap_Points(void)
virtual bool Cast_Ray(RayCollisionTestClass &raytest)
virtual int Get_Num_Bones(void)
virtual const Matrix3D & Get_Bone_Transform(const char *bonename)
virtual int Get_Num_Sub_Objects(void) const
virtual void Set_Position(const Vector3 &v)
virtual int Add_Sub_Object_To_Bone(RenderObjClass *subobj, int bone_index)
virtual bool Cast_OBBox(OBBoxCollisionTestClass &boxtest)
virtual void Special_Render(SpecialRenderInfoClass &rinfo)
virtual void Scale(float scale)
virtual void Set_Animation(void)
virtual void Release_Bone(int bindex)
const char * Get_Name(void) const
WW3DErrorType Load_W3D(ChunkLoadClass &cload)
virtual PrototypeClass * Load_W3D(ChunkLoadClass &cload)
virtual RenderObjClass * Create(void)
WWINLINE void Release_Ref(void) const
Vector3 Get_Position(void) const
virtual void Set_Transform(const Matrix3D &m)
virtual int Is_Not_Hidden_At_All(void)
virtual void Set_Position(const Vector3 &v)
virtual void Update_Sub_Object_Bits(void)
virtual int Class_ID(void) const
virtual RenderObjClass * Clone(void) const =0
virtual bool Is_In_Scene(void)
virtual void Set_Container(RenderObjClass *con)
virtual int Get_Collision_Type(void) const
virtual RenderObjClass * Create_Render_Obj(const char *name)
static WW3DAssetManager * Get_Instance(void)
DistLODLoaderClass _DistLODLoader
char * nstrdup(const char *str)
char RenderObjName[2 *W3D_NAME_LEN]