Example #1
0
        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);
        }
Example #2
0
        /// <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);
        }