rodecomp/Source/Utility/Math/ClientAngles.cpp
ragnarok-clanker 9f6fb7853f Decompile fn_02021 (??0AngleTables@?A0x87babb67@@QAE@XZ)
Batch #1298 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review.

- fn_02021 ??0AngleTables@?A0x87babb67@@QAE@XZ: logic confirmed by peer review (annotation added to existing code)

Reviewed-by: ragnarok-clanker
2026-10-28 11:06:58 +00:00

67 lines
1.5 KiB
C++

#include "Utility/Math/AffineMatrix.h"
#include <bit>
#include <cmath>
// INLINED
float ClientSin(float radians) {
return std::sin(radians);
}
// INLINED
float ClientCos(float radians) {
return std::cos(radians);
}
namespace {
struct AngleTables {
float radians[361];
float negativeRadians[361];
float sine[361];
float negativeSine[361];
float cosine[361];
float negativeCosine[361];
// OFFSET: 0x00554280
// FUNCTION: fn_02021
AngleTables() {
for (int index = 0; index <= 360; ++index) {
const float angle = (static_cast<float>(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;
// INLINED
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];
}