Files
ss/src/d/lyt/d_lyt_map_global.cpp
T
robojumper ec6979b211 More
2025-10-17 21:24:27 +02:00

88 lines
2.5 KiB
C++

#include "d/lyt/d_lyt_map_global.h"
#include "m/m_vec.h"
dLytMapGlobal_c *dLytMapGlobal_c::sInstance;
dLytMapGlobal_c::dLytMapGlobal_c()
: mMapScroll(0.0f, 0.0f, 0.0f),
field_0x0C(0.0f, 0.0f),
mMapRotationCenter(0.0f, 0.0f, 0.0f),
field_0x20(0.0f, 0.0f),
field_0x28(0.0f, 0.0f),
mMapRotation(0),
field_0x40(1.0f),
field_0x44(1.0f),
mFloor(0),
field_0x4C(0),
field_0x4D(0),
mAlpha(0),
field_0x4F(0),
mMapEvent(0) {
sInstance = this;
}
void dLytMapGlobal_c::projectOntoMap(
mVec2_c &result, const mVec3_c &position, const mVec3_c &mapScroll, const mVec3_c &mapRotationCenter, const mAng &rot,
f32 f1, f32 f2
) const {
// Initializing like this fixes regswaps, even if it's not needed...
mVec3_c work(0.0f, 0.0f, 0.0f);
work.x = position.x - mapRotationCenter.x;
work.z = position.z - mapRotationCenter.z;
work.y = 0.0f;
work.rotY(-rot);
work.x += mapRotationCenter.x - mapScroll.x;
work.z += mapRotationCenter.z - mapScroll.z;
work.x *= f2 * f1;
work.z *= f2 * f1;
work.x *= field_0x28.x;
result.x = work.x;
result.y = -work.z;
}
void dLytMapGlobal_c::projectOntoMap(mVec2_c &result, const mVec3_c &position) const {
projectOntoMap(result, position, mMapScroll, mMapRotationCenter, mMapRotation, field_0x44, field_0x40);
}
void dLytMapGlobal_c::unprojectFromMap(mVec3_c &result, const mVec2_c &position) const {
unprojectFromMap(
result, position, field_0x20, mMapScroll, mMapRotationCenter, mMapRotation, field_0x44, field_0x40
);
}
void dLytMapGlobal_c::unprojectFromMap(mVec3_c &result, const mVec2_c &position, const mAng &rot) const {
unprojectFromMap(result, position, field_0x20, mMapScroll, mMapRotationCenter, rot, field_0x44, field_0x40);
}
void dLytMapGlobal_c::unprojectFromMap(mVec3_c &result, const mVec2_c &position, const mVec3_c &v2, const mAng &rot)
const {
unprojectFromMap(result, position, field_0x20, v2, mMapRotationCenter, rot, field_0x44, field_0x40);
}
void dLytMapGlobal_c::unprojectFromMap(
mVec3_c &result, const mVec2_c &position, const mVec2_c &v1, const mVec3_c &mapScroll, const mVec3_c &mapRotationCenter,
const mAng &rot, f32 f1, f32 f2
) const {
mVec3_c work(0.0f, 0.0f, 0.0f);
f1 *= f2;
f32 tmp = 1.0f / f1;
mVec2_c diff = position - v1;
work.x = diff.x * tmp * (1.0f / field_0x28.x);
work.z = -diff.y * tmp;
work = work + mapScroll;
work = work - mapRotationCenter;
work.rotY(rot);
work += mapRotationCenter;
result = work;
}