Move Lexicon*, Text (TextTokens, TextEscapes, Base64), Math/RadialGrid, Hash (MD5, XxHash32) and Cipher (Rijndael, XorBytes) into Source/Utility subfolders; update includes, guards, compile.json and CMakeLists.txt. Backfill // OFFSET: above every standalone // FUNCTION: block (89 IDs, addresses from the symbol database) and make it mandatory in CODING_RULES.md and AGENTS.md. Remove the MatchLexicon cast chain.
58 lines
1.8 KiB
C++
58 lines
1.8 KiB
C++
#include "Contents/Actors/RenderObject.h"
|
|
#include "Utility/Math/AffineMatrix.h"
|
|
|
|
#include <cmath>
|
|
|
|
// OFFSET: 0x00CA9580
|
|
// FUNCTION: fn_21007
|
|
float __stdcall CRenderObject::Heading(float x, float z, float targetX, float targetZ) {
|
|
const float deltaX = targetX - x;
|
|
const float deltaZ = targetZ - z;
|
|
float angle = (static_cast<float>(std::atan2(static_cast<double>(deltaX), static_cast<double>(-deltaZ))) / 3.141592f) * 180.0f;
|
|
if (angle >= 360.0f) {
|
|
angle -= 360.0f;
|
|
}
|
|
|
|
if (angle < 0.0f) {
|
|
angle += 360.0f;
|
|
}
|
|
|
|
return angle;
|
|
}
|
|
|
|
// OFFSET: 0x00CA9610
|
|
// FUNCTION: fn_21008
|
|
void CRenderObject::Face(float x, float z) {
|
|
const float deltaX = x - this->render.position[0];
|
|
const float deltaZ = z - this->render.position[2];
|
|
if (deltaX != 0.0f || deltaZ != 0.0f) {
|
|
float angle = (static_cast<float>(std::atan2(static_cast<double>(deltaX), static_cast<double>(-deltaZ))) / 3.141592f) * 180.0f;
|
|
this->render.angle = angle;
|
|
if (angle >= 360.0f) {
|
|
angle -= 360.0f;
|
|
this->render.angle = angle;
|
|
}
|
|
|
|
if (angle < 0.0f) {
|
|
this->render.angle = angle + 360.0f;
|
|
}
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00CA96C0
|
|
// FUNCTION: fn_21009
|
|
float CRenderObject::HorizontalDistance(float x, float z) const {
|
|
const float deltaX = x - this->render.position[0];
|
|
const float deltaZ = z - this->render.position[2];
|
|
return SquareRoot(deltaZ * deltaZ + deltaX * deltaX);
|
|
}
|
|
|
|
// OFFSET: 0x00CA9700
|
|
// FUNCTION: fn_21010
|
|
float CRenderObject::Distance(float x, float y, float z) const {
|
|
const float deltaX = x - this->render.position[0];
|
|
const float deltaZ = z - this->render.position[2];
|
|
const float deltaY = y - this->render.position[1];
|
|
const float horizontal = SquareRoot(deltaZ * deltaZ + deltaX * deltaX);
|
|
return SquareRoot(horizontal * horizontal + deltaY * deltaY);
|
|
}
|