1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#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;
}
|