45 lines
1.8 KiB
C#
45 lines
1.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|