heres my animated model code
protected Model mymodel;
string mydictname;
CustomKeysValuesLoadManager myloader;
AnimationPlayer player;
public AnimatedModel(string dictname) : base(dictname)
{
mydictname = dictname;
CanDraw = true;
CanLoad = true;
CanUpdate = true;
}
public override void LoadContent(ContentManager content, GraphicsDevice device)
{
List<KeysValueClass> kvc = new List<KeysValueClass>();
myloader = new CustomKeysValuesLoadManager(content);
kvc = myloader.Load(mydictname);
for (int i = 0; i < kvc.Count; i++)
{
if (kvc[i].ValueClass == WindowsGame2.Loading.ValueType.String)
{
if (kvc[i].Name == "Texture Name")
{
StringKeysValueClass strkvc = kvc[i] as StringKeysValueClass;
Texture = content.Load<Texture2D>(strkvc.strValue);
TexPath = strkvc.strValue;
}
if (kvc[i].Name == "BumpTexture Name")
{
StringKeysValueClass strkvc = kvc[i] as StringKeysValueClass;
BumpTexture = content.Load<Texture2D>(strkvc.strValue);
BumpTexPath = strkvc.strValue;
}
if (kvc[i].Name == "HeightTexture Name")
{
StringKeysValueClass strkvc = kvc[i] as StringKeysValueClass;
HeightTexture = content.Load<Texture2D>(strkvc.strValue);
HeightTexPath = strkvc.strValue;
}
if (kvc[i].Name == "Effect Name")
{
StringKeysValueClass strkvc = kvc[i] as StringKeysValueClass;
Effect = content.Load<Effect>(strkvc.strValue);
EffectPath = strkvc.strValue;
}
if (kvc[i].Name == "Model Name")
{
StringKeysValueClass strkvc = kvc[i] as StringKeysValueClass;
mymodel = content.Load<Model>(strkvc.strValue);
ModelPath = strkvc.strValue;
player = new AnimationPlayer(mymodel.Tag as SkinningData);
SkinningData skinningData = mymodel.Tag as SkinningData;
AnimationClip clip = skinningData.AnimationClips["Take 001"];
player.StartClip(clip);
}
}
}
base.LoadContent(content, device);
}
public override List<string> GetSaveData()
{
List<string> datalist = base.GetSaveData();
datalist.Add("String");
datalist.Add("Texture Name");
datalist.Add(TexPath);
datalist.Add("String");
datalist.Add("Effect Name");
datalist.Add(EffectPath);
datalist.Add("String");
datalist.Add("Model Name");
datalist.Add(ModelPath);
if (BumpTexture != null)
{
datalist.Add("String");
datalist.Add("BumpTexture Name");
datalist.Add(BumpTexPath);
}
if (HeightTexture != null)
{
datalist.Add("String");
datalist.Add("HeightTexture Name");
datalist.Add(HeightTexPath);
}
return datalist;
}
public override void Update(GameTime gametime)
{
Matrix world = Matrix.CreateScale(Scale) *
Matrix.CreateFromQuaternion(Rotation) *
Matrix.CreateTranslation(Position);
player.Update(gametime.ElapsedGameTime, true, Matrix.Identity);
}
public override void Draw(GraphicsDeviceManager manager)
{
GraphicsDevice device = manager.GraphicsDevice;
Matrix[] bones = player.GetSkinTransforms();
Matrix world = Matrix.CreateScale(Scale) *
Matrix.CreateFromQuaternion(Rotation) *
Matrix.CreateTranslation(Position);
if (Effect != null)
{
if (Effect.Parameters["World"] != null)
{
Effect.Parameters["World"].SetValue(world);
}
if (Effect.Parameters["WVP"] != null)
{
Effect.Parameters["WVP"].SetValue(world * CameraManager.ActiveCamera.View * CameraManager.ActiveCamera.Projection);
if (Effect.Parameters["Bones"] != null)
{
Effect.Parameters["Bones"].SetValue(bones);
}
if (Effect.Parameters["MyTexture"] != null)
{
Effect.Parameters["MyTexture"].SetValue(Texture);
}
if (Effect.Parameters["ColorMap"] != null)
{
Effect.Parameters["ColorMap"].SetValue(Texture);
}
if (Effect.Parameters["BumpMap"] != null)
{
Effect.Parameters["BumpMap"].SetValue(BumpTexture);
}
if (Effect.Parameters["HeightMap"] != null)
{
Effect.Parameters["HeightMap"].SetValue(HeightTexture);
}
if (Effect.Parameters["View"] != null)
{
Effect.Parameters["View"].SetValue(CameraManager.ActiveCamera.View);
}
if (Effect.Parameters["Color"] != null)
{
Effect.Parameters["Color"].SetValue(Color);
}
if (Effect.Parameters["AmbientLightColor"] != null)
{
Effect.Parameters["AmbientLightColor"].SetValue(new Vector4(0.25f, 0.25f, 0.25f, 1.0f));
}
if (Effect.Parameters["DiffuseColor"] != null)
{
Effect.Parameters["DiffuseColor"].SetValue(new Vector4(0.50f, 0.50f, 0.50f, 1.00f));
}
if (Effect.Parameters["SpecularPower"] != null)
{
Effect.Parameters["SpecularPower"].SetValue(1);
}
if (Effect.Parameters["EyePosition"] != null)
{
Effect.Parameters["EyePosition"].SetValue(CameraManager.ActiveCamera.Position);
}
if (Effect.Parameters["LightPosition"] != null)
{
Effect.Parameters["LightPosition"].SetValue(CameraManager.ActiveCamera.Position);
}
if (Effect.Parameters["LightDirection"] != null)
{
Vector3 dir = Position - CameraManager.ActiveCamera.Position;
dir.Normalize();
Effect.Parameters["LightDirection"].SetValue(new Vector3(1, -1, -1));
}
if (Effect.Parameters["LightDiffuseColor"] != null)
{
Effect.Parameters["LightDiffuseColor"].SetValue(new Vector4(0.25f, 0.25f, 1.0f, 1.0f));
}
if (Effect.Parameters["LightSpecularColor"] != null)
{
Effect.Parameters["LightSpecularColor"].SetValue(new Vector4(0.85f, 0.85f, 1.0f, 1.0f));
}
if (Effect.Parameters["Projection"] != null)
{
Effect.Parameters["Projection"].SetValue(CameraManager.ActiveCamera.Projection);
}
}
CullMode defaultcull = manager.GraphicsDevice.RenderState.CullMode;
manager.GraphicsDevice.RenderState.CullMode = CullMode.None;
foreach (ModelMesh mesh in mymodel.Meshes)
{
device.Indices = mesh.IndexBuffer;
Effect.Begin();
foreach (EffectPass pass in Effect.CurrentTechnique.Passes)
{
pass.Begin();
foreach (ModelMeshPart part in mesh.MeshParts)
{
device.VertexDeclaration = part.VertexDeclaration;
device.Vertices[0].SetSource(
mesh.VertexBuffer,
part.StreamOffset,
part.VertexStride
);
device.DrawIndexedPrimitives(
PrimitiveType.TriangleList,
part.BaseVertex, 0,
part.NumVertices,
part.StartIndex,
part.PrimitiveCount
);
}
pass.End();
}
Effect.End();
}
manager.GraphicsDevice.RenderState.CullMode = defaultcull;
}
}
}