public static Matrix GetWmoDoodadTransformation(DoodadInstance inst, WorldModelHandler.WorldModelDefinition root) { var rootTransformation = GetTransformation(root); var translation = Matrix.Translation(inst.Position); var scale = Matrix.Scaling(new Vector3(inst.Scale)); var rotation = Matrix.RotationY(MathHelper.Pi); var quatRotation = Matrix.RotationQuaternion(new Quaternion(-inst.QuatY, inst.QuatZ, -inst.QuatX, inst.QuatW)); return(scale * rotation * quatRotation * translation * rootTransformation); }
/// <summary> /// Gets the file reference pointing to the model of a doodad instance. /// </summary> /// <param name="doodadInstance">The doodad instance to locate.</param> /// <returns>A file reference pointing to the instance.</returns> public FileReference GetReferenceForDoodad(DoodadInstance doodadInstance) { var doodadReference = GetReferenceForPath(doodadInstance.Name); if (doodadReference != null) { return(doodadReference); } // Doodads may have the *.mdx extension instead of *.m2. Try with that as well. doodadReference = GetReferenceForPath(Path.ChangeExtension(doodadInstance.Name, "m2")); if (doodadReference == null) { throw new ArgumentException($"Failed to retrieve doodad reference for {doodadInstance.Name}", nameof(doodadInstance)); } return(doodadReference); }