📄 modelbuilder.cpp
字号:
//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "ModelBuilder.h"
//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
MODEL_BUILDER ModelBuilder;
//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
MODEL_BUILDER::MODEL_BUILDER()
{
//Empty
}
//+-----------------------------------------------------------------------------
//| Destructor
//+-----------------------------------------------------------------------------
MODEL_BUILDER::~MODEL_BUILDER()
{
//Empty
}
//+-----------------------------------------------------------------------------
//| Sets an error message
//+-----------------------------------------------------------------------------
VOID MODEL_BUILDER::SetErrorMessage(CONST CHAR* ErrorMessage)
{
Error.SetMessage(ErrorMessage);
}
//+-----------------------------------------------------------------------------
//| Sets the model info
//+-----------------------------------------------------------------------------
VOID MODEL_BUILDER::SetModelInfo(CONST WAR3_MODEL_INFO& ModelInfo)
{
Model.Data().Info.Version = ModelInfo.Version;
Model.Data().Info.BlendTime = ModelInfo.BlendTime;
Model.Data().Info.Name = ModelInfo.Name;
Model.Data().Info.AnimationFile = ModelInfo.AnimationFile;
Model.Data().Info.Extent.Radius = ModelInfo.Extent.Radius;
Model.Data().Info.Extent.Min.x = ModelInfo.Extent.Min.X;
Model.Data().Info.Extent.Min.y = ModelInfo.Extent.Min.Y;
Model.Data().Info.Extent.Min.z = ModelInfo.Extent.Min.Z;
Model.Data().Info.Extent.Max.x = ModelInfo.Extent.Max.X;
Model.Data().Info.Extent.Max.y = ModelInfo.Extent.Max.Y;
Model.Data().Info.Extent.Max.z = ModelInfo.Extent.Max.Z;
}
//+-----------------------------------------------------------------------------
//| Creates an attachment
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateAttachment(CONST WAR3_MODEL_ATTACHMENT& Attachment)
{
MODEL_ATTACHMENT* ModelAttachment;
ModelAttachment = new MODEL_ATTACHMENT();
if(ModelAttachment == NULL) return FALSE;
ModelAttachment->Data().Name = Attachment.Node.Name;
ModelAttachment->Data().ObjectId = Attachment.Node.ObjectId;
ModelAttachment->Data().ParentId = Attachment.Node.ParentId;
ModelAttachment->Data().DontInheritTranslation = Attachment.Node.DontInheritTranslation;
ModelAttachment->Data().DontInheritRotation = Attachment.Node.DontInheritRotation;
ModelAttachment->Data().DontInheritScaling = Attachment.Node.DontInheritScaling;
ModelAttachment->Data().Billboarded = Attachment.Node.Billboarded;
ModelAttachment->Data().BillboardedLockX = Attachment.Node.BillboardedLockX;
ModelAttachment->Data().BillboardedLockY = Attachment.Node.BillboardedLockY;
ModelAttachment->Data().BillboardedLockZ = Attachment.Node.BillboardedLockZ;
ModelAttachment->Data().CameraAnchored = Attachment.Node.CameraAnchored;
if(!Model.AddAttachment(ModelAttachment)) return FALSE;
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Creates a bone
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateBone(CONST WAR3_MODEL_BONE& Bone)
{
MODEL_BONE* ModelBone;
ModelBone = new MODEL_BONE();
if(ModelBone == NULL) return FALSE;
ModelBone->Data().Name = Bone.Node.Name;
ModelBone->Data().ObjectId = Bone.Node.ObjectId;
ModelBone->Data().ParentId = Bone.Node.ParentId;
ModelBone->Data().DontInheritTranslation = Bone.Node.DontInheritTranslation;
ModelBone->Data().DontInheritRotation = Bone.Node.DontInheritRotation;
ModelBone->Data().DontInheritScaling = Bone.Node.DontInheritScaling;
ModelBone->Data().Billboarded = Bone.Node.Billboarded;
ModelBone->Data().BillboardedLockX = Bone.Node.BillboardedLockX;
ModelBone->Data().BillboardedLockY = Bone.Node.BillboardedLockY;
ModelBone->Data().BillboardedLockZ = Bone.Node.BillboardedLockZ;
ModelBone->Data().CameraAnchored = Bone.Node.CameraAnchored;
ModelBone->Data().GeosetId = Bone.GeosetId;
ModelBone->Data().GeosetAnimationId = Bone.GeosetAnimationId;
if(!Model.AddBone(ModelBone)) return FALSE;
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Creates a collision shape
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateCollisionShape(CONST WAR3_MODEL_COLLISION_SHAPE& CollisionShape)
{
MODEL_COLLISION_SHAPE* ModelCollisionShape;
ModelCollisionShape = new MODEL_COLLISION_SHAPE();
if(ModelCollisionShape == NULL) return FALSE;
ModelCollisionShape->Data().Name = CollisionShape.Node.Name;
ModelCollisionShape->Data().ObjectId = CollisionShape.Node.ObjectId;
ModelCollisionShape->Data().ParentId = CollisionShape.Node.ParentId;
ModelCollisionShape->Data().DontInheritTranslation = CollisionShape.Node.DontInheritTranslation;
ModelCollisionShape->Data().DontInheritRotation = CollisionShape.Node.DontInheritRotation;
ModelCollisionShape->Data().DontInheritScaling = CollisionShape.Node.DontInheritScaling;
ModelCollisionShape->Data().Billboarded = CollisionShape.Node.Billboarded;
ModelCollisionShape->Data().BillboardedLockX = CollisionShape.Node.BillboardedLockX;
ModelCollisionShape->Data().BillboardedLockY = CollisionShape.Node.BillboardedLockY;
ModelCollisionShape->Data().BillboardedLockZ = CollisionShape.Node.BillboardedLockZ;
ModelCollisionShape->Data().CameraAnchored = CollisionShape.Node.CameraAnchored;
ModelCollisionShape->Data().Type = static_cast<COLLISION_SHAPE_TYPE>(CollisionShape.Type);
ModelCollisionShape->Data().BoundsRadius = CollisionShape.Radius;
ModelCollisionShape->Data().VertexList.push_back(D3DXVECTOR3(CollisionShape.Vertex1.X, CollisionShape.Vertex1.Y, CollisionShape.Vertex1.Z));
if(ModelCollisionShape->Data().Type == COLLISION_SHAPE_TYPE_BOX) ModelCollisionShape->Data().VertexList.push_back(D3DXVECTOR3(CollisionShape.Vertex2.X, CollisionShape.Vertex2.Y, CollisionShape.Vertex2.Z));
if(!Model.AddCollisionShape(ModelCollisionShape)) return FALSE;
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Creates an event object
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateEventObject(CONST WAR3_MODEL_EVENT_OBJECT& EventObject)
{
MODEL_EVENT_OBJECT* ModelEventObject;
ModelEventObject = new MODEL_EVENT_OBJECT();
if(ModelEventObject == NULL) return FALSE;
ModelEventObject->Data().Name = EventObject.Node.Name;
ModelEventObject->Data().ObjectId = EventObject.Node.ObjectId;
ModelEventObject->Data().ParentId = EventObject.Node.ParentId;
ModelEventObject->Data().DontInheritTranslation = EventObject.Node.DontInheritTranslation;
ModelEventObject->Data().DontInheritRotation = EventObject.Node.DontInheritRotation;
ModelEventObject->Data().DontInheritScaling = EventObject.Node.DontInheritScaling;
ModelEventObject->Data().Billboarded = EventObject.Node.Billboarded;
ModelEventObject->Data().BillboardedLockX = EventObject.Node.BillboardedLockX;
ModelEventObject->Data().BillboardedLockY = EventObject.Node.BillboardedLockY;
ModelEventObject->Data().BillboardedLockZ = EventObject.Node.BillboardedLockZ;
ModelEventObject->Data().CameraAnchored = EventObject.Node.CameraAnchored;
ModelEventObject->Data().GlobalSequenceId = EventObject.GlobalSequenceId;
if(!Model.AddEventObject(ModelEventObject)) return FALSE;
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Creates a helper
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateHelper(CONST WAR3_MODEL_HELPER& Helper)
{
MODEL_HELPER* ModelHelper;
ModelHelper = new MODEL_HELPER();
if(ModelHelper == NULL) return FALSE;
ModelHelper->Data().Name = Helper.Node.Name;
ModelHelper->Data().ObjectId = Helper.Node.ObjectId;
ModelHelper->Data().ParentId = Helper.Node.ParentId;
ModelHelper->Data().DontInheritTranslation = Helper.Node.DontInheritTranslation;
ModelHelper->Data().DontInheritRotation = Helper.Node.DontInheritRotation;
ModelHelper->Data().DontInheritScaling = Helper.Node.DontInheritScaling;
ModelHelper->Data().Billboarded = Helper.Node.Billboarded;
ModelHelper->Data().BillboardedLockX = Helper.Node.BillboardedLockX;
ModelHelper->Data().BillboardedLockY = Helper.Node.BillboardedLockY;
ModelHelper->Data().BillboardedLockZ = Helper.Node.BillboardedLockZ;
ModelHelper->Data().CameraAnchored = Helper.Node.CameraAnchored;
if(!Model.AddHelper(ModelHelper)) return FALSE;
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Creates a light
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateLight(CONST WAR3_MODEL_LIGHT& Light)
{
MODEL_LIGHT* ModelLight;
ModelLight = new MODEL_LIGHT();
if(ModelLight == NULL) return FALSE;
ModelLight->Data().Name = Light.Node.Name;
ModelLight->Data().ObjectId = Light.Node.ObjectId;
ModelLight->Data().ParentId = Light.Node.ParentId;
ModelLight->Data().DontInheritTranslation = Light.Node.DontInheritTranslation;
ModelLight->Data().DontInheritRotation = Light.Node.DontInheritRotation;
ModelLight->Data().DontInheritScaling = Light.Node.DontInheritScaling;
ModelLight->Data().Billboarded = Light.Node.Billboarded;
ModelLight->Data().BillboardedLockX = Light.Node.BillboardedLockX;
ModelLight->Data().BillboardedLockY = Light.Node.BillboardedLockY;
ModelLight->Data().BillboardedLockZ = Light.Node.BillboardedLockZ;
ModelLight->Data().CameraAnchored = Light.Node.CameraAnchored;
ModelLight->Data().Type = Light.Type;
ModelLight->Data().Visibility.SetStaticScalar(Light.Visibility);
ModelLight->Data().AttenuationStart.SetStaticScalar(Light.AttenuationStart);
ModelLight->Data().AttenuationEnd.SetStaticScalar(Light.AttenuationEnd);
ModelLight->Data().Intensity.SetStaticScalar(Light.Intensity);
ModelLight->Data().AmbientIntensity.SetStaticScalar(Light.AmbientIntensity);
ModelLight->Data().Color.SetStaticVector3(D3DXVECTOR3(Light.Color.B, Light.Color.G, Light.Color.R));
ModelLight->Data().AmbientColor.SetStaticVector3(D3DXVECTOR3(Light.AmbientColor.B, Light.AmbientColor.G, Light.AmbientColor.R));
if(!Model.AddLight(ModelLight)) return FALSE;
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Creates a particle emitter
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateParticleEmitter(CONST WAR3_MODEL_PARTICLE_EMITTER& ParticleEmitter)
{
MODEL_PARTICLE_EMITTER* ModelParticleEmitter;
ModelParticleEmitter = new MODEL_PARTICLE_EMITTER();
if(ModelParticleEmitter == NULL) return FALSE;
ModelParticleEmitter->Data().Name = ParticleEmitter.Node.Name;
ModelParticleEmitter->Data().ObjectId = ParticleEmitter.Node.ObjectId;
ModelParticleEmitter->Data().ParentId = ParticleEmitter.Node.ParentId;
ModelParticleEmitter->Data().DontInheritTranslation = ParticleEmitter.Node.DontInheritTranslation;
ModelParticleEmitter->Data().DontInheritRotation = ParticleEmitter.Node.DontInheritRotation;
ModelParticleEmitter->Data().DontInheritScaling = ParticleEmitter.Node.DontInheritScaling;
ModelParticleEmitter->Data().Billboarded = ParticleEmitter.Node.Billboarded;
ModelParticleEmitter->Data().BillboardedLockX = ParticleEmitter.Node.BillboardedLockX;
ModelParticleEmitter->Data().BillboardedLockY = ParticleEmitter.Node.BillboardedLockY;
ModelParticleEmitter->Data().BillboardedLockZ = ParticleEmitter.Node.BillboardedLockZ;
ModelParticleEmitter->Data().CameraAnchored = ParticleEmitter.Node.CameraAnchored;
ModelParticleEmitter->Data().EmissionRate.SetStaticScalar(ParticleEmitter.EmissionRate);
ModelParticleEmitter->Data().Gravity.SetStaticScalar(ParticleEmitter.Gravity);
ModelParticleEmitter->Data().Longitude.SetStaticScalar(ParticleEmitter.Longitude);
ModelParticleEmitter->Data().Latitude.SetStaticScalar(ParticleEmitter.Latitude);
ModelParticleEmitter->Data().Visibility.SetStaticScalar(ParticleEmitter.Visibility);
ModelParticleEmitter->Data().ParticleFileName = ParticleEmitter.ParticleFileName;
ModelParticleEmitter->Data().ParticleLifeSpan.SetStaticScalar(ParticleEmitter.ParticleLifeSpan);
ModelParticleEmitter->Data().ParticleInitialVelocity.SetStaticScalar(ParticleEmitter.ParticleInitialVelocity);
ModelParticleEmitter->Data().EmitterUsesMdl = ParticleEmitter.EmitterUsesMdl;
ModelParticleEmitter->Data().EmitterUsesTga = ParticleEmitter.EmitterUsesTga;
if(!Model.AddParticleEmitter(ModelParticleEmitter)) return FALSE;
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Creates a particle emitter 2
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateParticleEmitter2(CONST WAR3_MODEL_PARTICLE_EMITTER_2& ParticleEmitter2)
{
MODEL_PARTICLE_EMITTER_2* ModelParticleEmitter2;
ModelParticleEmitter2 = new MODEL_PARTICLE_EMITTER_2();
if(ModelParticleEmitter2 == NULL) return FALSE;
ModelParticleEmitter2->Data().Name = ParticleEmitter2.Node.Name;
ModelParticleEmitter2->Data().ObjectId = ParticleEmitter2.Node.ObjectId;
ModelParticleEmitter2->Data().ParentId = ParticleEmitter2.Node.ParentId;
ModelParticleEmitter2->Data().DontInheritTranslation = ParticleEmitter2.Node.DontInheritTranslation;
ModelParticleEmitter2->Data().DontInheritRotation = ParticleEmitter2.Node.DontInheritRotation;
ModelParticleEmitter2->Data().DontInheritScaling = ParticleEmitter2.Node.DontInheritScaling;
ModelParticleEmitter2->Data().Billboarded = ParticleEmitter2.Node.Billboarded;
ModelParticleEmitter2->Data().BillboardedLockX = ParticleEmitter2.Node.BillboardedLockX;
ModelParticleEmitter2->Data().BillboardedLockY = ParticleEmitter2.Node.BillboardedLockY;
ModelParticleEmitter2->Data().BillboardedLockZ = ParticleEmitter2.Node.BillboardedLockZ;
ModelParticleEmitter2->Data().CameraAnchored = ParticleEmitter2.Node.CameraAnchored;
ModelParticleEmitter2->Data().FilterMode = static_cast<FILTER_MODE>(ParticleEmitter2.FilterMode);
ModelParticleEmitter2->Data().Speed.SetStaticScalar(ParticleEmitter2.Speed);
ModelParticleEmitter2->Data().Variation.SetStaticScalar(ParticleEmitter2.Variation);
ModelParticleEmitter2->Data().Latitude.SetStaticScalar(ParticleEmitter2.Latitude);
ModelParticleEmitter2->Data().Gravity.SetStaticScalar(ParticleEmitter2.Gravity);
ModelParticleEmitter2->Data().Visibility.SetStaticScalar(ParticleEmitter2.Visibility);
ModelParticleEmitter2->Data().EmissionRate.SetStaticScalar(ParticleEmitter2.EmissionRate);
ModelParticleEmitter2->Data().Width.SetStaticScalar(ParticleEmitter2.Width);
ModelParticleEmitter2->Data().Length.SetStaticScalar(ParticleEmitter2.Length);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -