using AC2RE.Definitions; using System.Numerics; namespace LandblockExtraction.Tools { public static class MathOperations { public static uint GetXLandblock(uint landblock) { return (landblock & 0xFF000000) >> 24; } public static uint GetYLandblock(uint landblock) { return (landblock & 0x00FF0000) >> 16; } public static uint GetTerrainInCellInfo(uint cellInfo) { return (cellInfo >> 0) & (0x7f); } public static uint GetRoadInCellInfo(uint cellInfo) { return (cellInfo >> 24) & (0xff); } public static uint GetColorInCellInfo(uint cellInfo) { return (cellInfo >> 16) & (0xff); } public static uint GetSceneInCellInfo(uint cellInfo) { return (cellInfo >> 7) & (0x1f); } public static Vector4 RGBAColorToVector4(RGBAColor color) { return new Vector4(color.r, color.g, color.b, color.a); } // Calcule la normale d'un triangle à partir de trois points public static Vector3 CalculateTriangleNormal(Vector3 A, Vector3 B, Vector3 C) { Vector3 AB = B - A; Vector3 AC = C - A; Vector3 normal = Vector3.Cross(AB, AC); normal = Vector3.Normalize(normal); return normal; } // Calcule la normale moyenne d'un quadrilatère en utilisant deux de ses triangles public static Vector3 CalculateQuadNormal(Vector3 A, Vector3 B, Vector3 C, Vector3 D) { Vector3 normal1 = CalculateTriangleNormal(A, B, C); Vector3 normal2 = CalculateTriangleNormal(C, B, D); Vector3 averageNormal = (normal1 + normal2) / 2; return Vector3.Normalize(averageNormal); } } }