//actor must be an Actor public static Matrix GetLocalToWorld(ExportEntry actor) { PropertyCollection props = actor.GetProperties(); var rotationProp = props.GetProp <StructProperty>("Rotation"); var locationsProp = props.GetProp <StructProperty>("location"); var drawScale3DProp = props.GetProp <StructProperty>("DrawScale3D"); var prePivotProp = props.GetProp <StructProperty>("PrePivot"); float drawScale = props.GetProp <FloatProperty>("DrawScale")?.Value ?? 1; Vector3 location = locationsProp != null?CommonStructs.GetVector3(locationsProp) : Vector3.Zero; Vector3 scale = drawScale * (drawScale3DProp != null ? CommonStructs.GetVector3(drawScale3DProp) : Vector3.One); Vector3 pivot = prePivotProp != null?CommonStructs.GetVector3(prePivotProp) : Vector3.Zero; Rotator rotator = rotationProp != null?CommonStructs.GetRotator(rotationProp) : new Rotator(0, 0, 0); return(ComposeLocalToWorld(location, rotator, scale, pivot)); }
public static Matrix GetWorldToLocal(ExportEntry actor) { PropertyCollection props = actor.GetProperties(); var rotationProp = props.GetProp <StructProperty>("Rotation"); var locationsProp = props.GetProp <StructProperty>("location"); var drawScale3DProp = props.GetProp <StructProperty>("DrawScale3D"); var prePivotProp = props.GetProp <StructProperty>("PrePivot"); float drawScale = props.GetProp <FloatProperty>("DrawScale")?.Value ?? 1; Vector3 location = locationsProp != null?CommonStructs.GetVector3(locationsProp) : Vector3.Zero; (float scaleX, float scaleY, float scaleZ) = drawScale3DProp != null?CommonStructs.GetVector3(drawScale3DProp) : Vector3.One; Vector3 prePivot = prePivotProp != null?CommonStructs.GetVector3(prePivotProp) : Vector3.Zero; Rotator rotation = rotationProp != null?CommonStructs.GetRotator(rotationProp) : new Rotator(0, 0, 0); return(Matrix.Translation(-location) * InverseRotation(rotation) * Matrix.Scaling(new Vector3(1f / scaleX, 1f / scaleY, 1f / scaleZ) / drawScale) * Matrix.Translation(prePivot)); }