/// <summary> /// MSTS WFiles represent some location with a position, 3x3 matrix and tile coordinates /// This converts it to the ORTS WorldPosition representation /// </summary> static WorldPosition WorldPositionFromMSTSLocation(int tileX, int tileZ, STFPositionItem MSTSPosition, Matrix3x3 MSTSMatrix) { var XNAPosition = new Vector3((float)MSTSPosition.X, (float)MSTSPosition.Y, -(float)MSTSPosition.Z); var XNAMatrix = Matrix.Identity; XNAMatrix.M11 = MSTSMatrix.AX; XNAMatrix.M12 = MSTSMatrix.AY; XNAMatrix.M13 = -MSTSMatrix.AZ; XNAMatrix.M14 = 0; XNAMatrix.M21 = MSTSMatrix.BX; XNAMatrix.M22 = MSTSMatrix.BY; XNAMatrix.M23 = -MSTSMatrix.BZ; XNAMatrix.M24 = 0; XNAMatrix.M31 = -MSTSMatrix.CX; XNAMatrix.M32 = -MSTSMatrix.CY; XNAMatrix.M33 = MSTSMatrix.CZ; XNAMatrix.M34 = 0; XNAMatrix.M41 = 0; XNAMatrix.M42 = 0; XNAMatrix.M43 = 0; XNAMatrix.M44 = 1; XNAMatrix *= Matrix.CreateTranslation(XNAPosition); var worldMatrix = new WorldPosition(); worldMatrix.TileX = tileX; worldMatrix.TileZ = tileZ; worldMatrix.XNAMatrix = XNAMatrix; return(worldMatrix); }
/// <summary> /// MSTS WFiles represent some location with a position, quaternion and tile coordinates /// This converts it to the ORTS WorldPosition representation /// </summary> static WorldPosition WorldPositionFromMSTSLocation(int tileX, int tileZ, STFPositionItem MSTSPosition, STFQDirectionItem MSTSQuaternion) { var XNAQuaternion = new Quaternion((float)MSTSQuaternion.A, (float)MSTSQuaternion.B, -(float)MSTSQuaternion.C, (float)MSTSQuaternion.D); var XNAPosition = new Vector3((float)MSTSPosition.X, (float)MSTSPosition.Y, -(float)MSTSPosition.Z); var XNAMatrix = Matrix.CreateFromQuaternion(XNAQuaternion); XNAMatrix *= Matrix.CreateTranslation(XNAPosition); var worldMatrix = new WorldPosition(); worldMatrix.TileX = tileX; worldMatrix.TileZ = tileZ; worldMatrix.XNAMatrix = XNAMatrix; return(worldMatrix); }