#include "Utility/AffineMatrix.h" #include #include float ClientSin(float radians) { return std::sin(radians); } float ClientCos(float radians) { return std::cos(radians); } namespace { // OFFSET: 0x00554280 // FUNCTION: fn_02021 // The six adjacent arrays are one contiguous addressing domain: negative lookup indices intentionally reach // the preceding array's tail, not abs(index) in the negative array. struct AngleTables { float radians[361]; float negativeRadians[361]; float sine[361]; float negativeSine[361]; float cosine[361]; float negativeCosine[361]; AngleTables() { for (int index = 0; index <= 360; ++index) { const float angle = (static_cast(index) / 180.0f) * 3.141592f; radians[index] = angle; sine[index] = ClientSin(angle); cosine[index] = ClientCos(angle); negativeRadians[index] = -angle; negativeSine[index] = -sine[index]; negativeCosine[index] = -cosine[index]; } } }; const AngleTables tables; int Wrapped(int degrees) { return degrees > 360 || degrees < -360 ? degrees % 360 : degrees; } } // OFFSET: 0x00554420 // FUNCTION: fn_02024 float ClientRadians(int degrees) { const int index = Wrapped(degrees); return tables.radians[index >= 0 ? index : 361 + index]; } // OFFSET: 0x00554470 // FUNCTION: fn_02025 float ClientSine(int degrees) { const int index = Wrapped(degrees); return tables.sine[index >= 0 ? index : 361 + index]; } // OFFSET: 0x005543D0 // FUNCTION: fn_02023 float ClientCosine(int degrees) { const int index = Wrapped(degrees); return tables.cosine[index >= 0 ? index : 361 + index]; }