mirror of
https://github.com/zeldaret/oot.git
synced 2025-02-18 04:45:24 +00:00
Cleanup VecSph
: Better Distinguish Between "Spherical" vs. "Geographic" Coordinates (#1407)
* begin geo and sph docs * cleanup * cleanup * cleanup struct * PR suggestions * spacing
This commit is contained in:
parent
b806ac0191
commit
a2d62eedb2
9 changed files with 561 additions and 539 deletions
|
@ -950,10 +950,10 @@ f32 OLib_Vec3fDistXZ(Vec3f* a, Vec3f* b);
|
|||
f32 OLib_ClampMinDist(f32 val, f32 min);
|
||||
f32 OLib_ClampMaxDist(f32 val, f32 max);
|
||||
Vec3f* OLib_Vec3fDistNormalize(Vec3f* dest, Vec3f* a, Vec3f* b);
|
||||
Vec3f* OLib_VecSphGeoToVec3f(Vec3f* dest, VecSph* sph);
|
||||
Vec3f* OLib_VecGeoToVec3f(Vec3f* dest, VecGeo* geo);
|
||||
VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec);
|
||||
VecSph* OLib_Vec3fToVecSphGeo(VecSph* dest, Vec3f* vec);
|
||||
VecSph* OLib_Vec3fDiffToVecSphGeo(VecSph* dest, Vec3f* a, Vec3f* b);
|
||||
VecGeo* OLib_Vec3fToVecGeo(VecGeo* dest, Vec3f* vec);
|
||||
VecGeo* OLib_Vec3fDiffToVecGeo(VecGeo* dest, Vec3f* a, Vec3f* b);
|
||||
Vec3f* OLib_Vec3fDiffRad(Vec3f* dest, Vec3f* a, Vec3f* b);
|
||||
s16 OnePointCutscene_Init(PlayState* play, s16 csId, s16 timer, Actor* actor, s16 parentCamId);
|
||||
s16 OnePointCutscene_EndCutscene(PlayState* play, s16 subCamId);
|
||||
|
@ -1360,7 +1360,7 @@ u32 Letterbox_GetSize(void);
|
|||
void Letterbox_Init(void);
|
||||
void Letterbox_Destroy(void);
|
||||
void Letterbox_Update(s32 updateRate);
|
||||
// ? DbCamera_AddVecSph(?);
|
||||
// ? DbCamera_AddVecGeoToVec3f(?);
|
||||
// ? DbCamera_CalcUpFromPitchYawRoll(?);
|
||||
// ? DbCamera_SetTextValue(?);
|
||||
// ? DbCamera_Vec3SToF(?);
|
||||
|
|
|
@ -439,7 +439,9 @@ typedef struct {
|
|||
typedef struct {
|
||||
/* 0x00 */ SwingAnimation swing;
|
||||
/* 0x1C */ f32 unk_1C;
|
||||
/* 0x20 */ VecSph unk_20;
|
||||
/* 0x20 */ f32 unk_20;
|
||||
/* 0x24 */ s16 unk_24;
|
||||
/* 0x26 */ s16 unk_26;
|
||||
} Jump1ReadWriteData; // size = 0x28
|
||||
|
||||
typedef struct {
|
||||
|
@ -670,7 +672,9 @@ typedef struct {
|
|||
} KeepOn3ReadOnlyData; // size = 0x2C
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ Vec3f eyeToAtTarget; // esentially a VecSph, but all floats.
|
||||
/* 0x00 */ f32 eyeToAtTargetR;
|
||||
/* 0x08 */ f32 eyeToAtTargetYaw;
|
||||
/* 0x04 */ f32 eyeToAtTargetPitch;
|
||||
/* 0x0C */ Actor* target;
|
||||
/* 0x10 */ Vec3f atTarget;
|
||||
/* 0x1C */ s16 animTimer;
|
||||
|
@ -1098,7 +1102,7 @@ typedef struct {
|
|||
/* 0x10 */ Vec3f eyeTarget;
|
||||
/* 0x1C */ Vec3f playerPos;
|
||||
/* 0x28 */ f32 fovTarget;
|
||||
/* 0x2C */ VecSph atEyeOffsetTarget;
|
||||
/* 0x2C */ VecGeo atEyeOffsetTarget;
|
||||
/* 0x34 */ s16 rollTarget;
|
||||
/* 0x36 */ s16 curKeyFrameIdx;
|
||||
/* 0x38 */ s16 unk_38;
|
||||
|
@ -1344,7 +1348,7 @@ typedef struct {
|
|||
/* 0x00 */ Vec3f pos;
|
||||
/* 0x0C */ Vec3f norm;
|
||||
/* 0x18 */ CollisionPoly* poly;
|
||||
/* 0x1C */ VecSph sphNorm;
|
||||
/* 0x1C */ VecGeo geoNorm;
|
||||
/* 0x24 */ s32 bgId;
|
||||
} CamColChk; // size = 0x28
|
||||
|
||||
|
|
|
@ -69,12 +69,19 @@ typedef struct {
|
|||
/* 0x000C */ Vec3f b;
|
||||
} Linef; // size = 0x18
|
||||
|
||||
// Defines a point in the spherical coordinate system
|
||||
typedef struct {
|
||||
/* 0x00 */ f32 r; // radius
|
||||
/* 0x04 */ s16 pitch; // polar (zenith) angle
|
||||
/* 0x06 */ s16 yaw; // azimuthal angle
|
||||
} VecSph; // size = 0x08
|
||||
/* 0x0 */ f32 r; // radius
|
||||
/* 0x4 */ s16 pitch; // depends on coordinate system. See below.
|
||||
/* 0x6 */ s16 yaw; // azimuthal angle
|
||||
} VecSphGeo; // size = 0x8
|
||||
|
||||
// Defines a point in the spherical coordinate system.
|
||||
// Pitch is 0 along the positive y-axis (up)
|
||||
typedef VecSphGeo VecSph;
|
||||
|
||||
// Defines a point in the geographic coordinate system.
|
||||
// Pitch is 0 along the xz-plane (horizon)
|
||||
typedef VecSphGeo VecGeo;
|
||||
|
||||
#define LERP(x, y, scale) (((y) - (x)) * (scale) + (x))
|
||||
#define LERP32(x, y, scale) ((s32)(((y) - (x)) * (scale)) + (x))
|
||||
|
|
|
@ -96,17 +96,19 @@ static DbCamera* sDbCamPtr;
|
|||
static s16 D_8016110C;
|
||||
static DbCameraAnim sDbCamAnim;
|
||||
|
||||
Vec3f* DbCamera_AddVecSph(Vec3f* out, Vec3f* in, VecSph* sph) {
|
||||
Vec3f ret;
|
||||
Vec3f vec;
|
||||
Vec3f* DbCamera_AddVecGeoToVec3f(Vec3f* dest, Vec3f* a, VecGeo* geo) {
|
||||
Vec3f sum;
|
||||
Vec3f b;
|
||||
|
||||
OLib_VecSphGeoToVec3f(&vec, sph);
|
||||
OLib_VecGeoToVec3f(&b, geo);
|
||||
|
||||
ret.x = in->x + vec.x;
|
||||
ret.y = in->y + vec.y;
|
||||
ret.z = in->z + vec.z;
|
||||
*out = ret;
|
||||
return out;
|
||||
sum.x = a->x + b.x;
|
||||
sum.y = a->y + b.y;
|
||||
sum.z = a->z + b.z;
|
||||
|
||||
*dest = sum;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
Vec3f* DbCamera_CalcUpFromPitchYawRoll(Vec3f* dest, s16 pitch, s16 yaw, s16 roll) {
|
||||
|
@ -224,25 +226,28 @@ void DbCamera_Vec3SToF2(Vec3s* in, Vec3f* out) {
|
|||
}
|
||||
|
||||
void func_800B3F94(PosRot* posRot, Vec3f* vec, Vec3s* out) {
|
||||
VecSph sph;
|
||||
VecGeo geo;
|
||||
Vec3f tempVec;
|
||||
OLib_Vec3fDiffToVecSphGeo(&sph, &posRot->pos, vec);
|
||||
sph.yaw -= posRot->rot.y;
|
||||
OLib_VecSphGeoToVec3f(&tempVec, &sph);
|
||||
|
||||
OLib_Vec3fDiffToVecGeo(&geo, &posRot->pos, vec);
|
||||
geo.yaw -= posRot->rot.y;
|
||||
OLib_VecGeoToVec3f(&tempVec, &geo);
|
||||
DbCamera_Vec3FToS(&tempVec, out);
|
||||
}
|
||||
|
||||
void func_800B3FF4(PosRot* posRot, Vec3f* vec, Vec3f* out) {
|
||||
VecSph sph;
|
||||
VecGeo geo;
|
||||
Vec3f tempVec;
|
||||
|
||||
DbCamera_CopyVec3f(vec, &tempVec);
|
||||
OLib_Vec3fToVecSphGeo(&sph, &tempVec);
|
||||
sph.yaw += posRot->rot.y;
|
||||
DbCamera_AddVecSph(out, &posRot->pos, &sph);
|
||||
OLib_Vec3fToVecGeo(&geo, &tempVec);
|
||||
geo.yaw += posRot->rot.y;
|
||||
DbCamera_AddVecGeoToVec3f(out, &posRot->pos, &geo);
|
||||
}
|
||||
|
||||
void func_800B404C(PosRot* posRot, Vec3s* vec, Vec3f* out) {
|
||||
Vec3f tempVec;
|
||||
|
||||
DbCamera_Vec3SToF(vec, &tempVec);
|
||||
func_800B3FF4(posRot, &tempVec, out);
|
||||
}
|
||||
|
@ -318,7 +323,7 @@ s32 func_800B42C0(DbCamera* dbCamera, Camera* cameraPtr) {
|
|||
s32 func_800B4370(DbCamera* dbCamera, s16 idx, Camera* cam) {
|
||||
CutsceneCameraPoint* lookAt = &dbCamera->sub.lookAt[idx];
|
||||
CutsceneCameraPoint* position = &dbCamera->sub.position[idx];
|
||||
VecSph sph;
|
||||
VecGeo geo;
|
||||
Vec3f at;
|
||||
|
||||
if (dbCamera->sub.mode != 1) {
|
||||
|
@ -335,10 +340,10 @@ s32 func_800B4370(DbCamera* dbCamera, s16 idx, Camera* cam) {
|
|||
}
|
||||
dbCamera->at = at;
|
||||
}
|
||||
sph.pitch = 0x2000;
|
||||
sph.yaw -= 0x7FFF;
|
||||
sph.r = 250.0f;
|
||||
DbCamera_AddVecSph(&dbCamera->eye, &dbCamera->at, &sph);
|
||||
geo.pitch = 0x2000;
|
||||
geo.yaw -= 0x7FFF;
|
||||
geo.r = 250.0f;
|
||||
DbCamera_AddVecGeoToVec3f(&dbCamera->eye, &dbCamera->at, &geo);
|
||||
dbCamera->roll = lookAt->cameraRoll;
|
||||
dbCamera->rollDegrees = dbCamera->roll * (360.0f / 256.0f);
|
||||
dbCamera->fov = lookAt->viewAngle;
|
||||
|
@ -572,9 +577,9 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
char sp111;
|
||||
char sp110;
|
||||
f32 temp_f2_2;
|
||||
VecSph sp104;
|
||||
VecSph spFC;
|
||||
VecSph spF4;
|
||||
VecGeo sp104;
|
||||
VecGeo spFC;
|
||||
VecGeo spF4;
|
||||
PosRot* temp_s6;
|
||||
UNUSED Vec3f* eye;
|
||||
UNUSED Vec3f* at;
|
||||
|
@ -588,7 +593,7 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
Vec3f spB8;
|
||||
Vec3f spAC;
|
||||
s16 spAA;
|
||||
VecSph spA0;
|
||||
VecGeo spA0;
|
||||
|
||||
sp90 = &dbCamera->unk_54;
|
||||
temp_s6 = &cam->playerPosRot;
|
||||
|
@ -671,9 +676,9 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
phi_s0 = sp124;
|
||||
|
||||
if (!D_80161144) {
|
||||
OLib_Vec3fDiffToVecSphGeo(&sp104, sp7C, sp80);
|
||||
OLib_Vec3fDiffToVecGeo(&sp104, sp7C, sp80);
|
||||
} else {
|
||||
OLib_Vec3fDiffToVecSphGeo(&sp104, sp80, sp7C);
|
||||
OLib_Vec3fDiffToVecGeo(&sp104, sp80, sp7C);
|
||||
}
|
||||
|
||||
if (dbCamera->unk_44 > 100) {
|
||||
|
@ -709,11 +714,11 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
spFC.r = temp_f2;
|
||||
if (!D_80161144) {
|
||||
spFC.yaw = sp104.yaw;
|
||||
DbCamera_AddVecSph(sp7C, sp7C, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp7C, &spFC);
|
||||
} else {
|
||||
spFC.pitch = -spFC.pitch;
|
||||
spFC.yaw = sp104.yaw - 0x7FFF;
|
||||
DbCamera_AddVecSph(sp80, sp80, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp80, &spFC);
|
||||
}
|
||||
if (dbCamera->unk_40 == 0xB) {
|
||||
dbCamera->unk_44++;
|
||||
|
@ -737,11 +742,11 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
spFC.r = -temp_f2;
|
||||
if (!D_80161144) {
|
||||
spFC.yaw = sp104.yaw;
|
||||
DbCamera_AddVecSph(sp7C, sp7C, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp7C, &spFC);
|
||||
} else {
|
||||
spFC.pitch = -spFC.pitch;
|
||||
spFC.yaw = sp104.yaw - 0x7FFF;
|
||||
DbCamera_AddVecSph(sp80, sp80, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp80, &spFC);
|
||||
}
|
||||
if (dbCamera->unk_40 == 0xC) {
|
||||
dbCamera->unk_44++;
|
||||
|
@ -760,10 +765,10 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
spFC.pitch = 0;
|
||||
if (!D_80161144) {
|
||||
spFC.yaw = sp104.yaw;
|
||||
DbCamera_AddVecSph(sp7C, sp7C, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp7C, &spFC);
|
||||
} else {
|
||||
spFC.yaw = sp104.yaw - 0x7FFF;
|
||||
DbCamera_AddVecSph(sp80, sp80, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp80, &spFC);
|
||||
}
|
||||
|
||||
if (dbCamera->unk_40 == 1) {
|
||||
|
@ -778,10 +783,10 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
spFC.pitch = 0;
|
||||
if (!D_80161144) {
|
||||
spFC.yaw = sp104.yaw;
|
||||
DbCamera_AddVecSph(sp7C, sp7C, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp7C, &spFC);
|
||||
} else {
|
||||
spFC.yaw = sp104.yaw - 0x7FFF;
|
||||
DbCamera_AddVecSph(sp80, sp80, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp80, &spFC);
|
||||
}
|
||||
if (dbCamera->unk_40 == 2) {
|
||||
dbCamera->unk_44++;
|
||||
|
@ -795,9 +800,9 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
spFC.pitch = 0x3FFF;
|
||||
spFC.yaw = sp104.yaw;
|
||||
if (!D_80161144) {
|
||||
DbCamera_AddVecSph(sp7C, sp7C, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp7C, &spFC);
|
||||
} else {
|
||||
DbCamera_AddVecSph(sp80, sp80, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp80, &spFC);
|
||||
}
|
||||
if (dbCamera->unk_40 == 3) {
|
||||
dbCamera->unk_44++;
|
||||
|
@ -811,9 +816,9 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
spFC.pitch = -0x3FFF;
|
||||
spFC.yaw = sp104.yaw;
|
||||
if (!D_80161144) {
|
||||
DbCamera_AddVecSph(sp7C, sp7C, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp7C, &spFC);
|
||||
} else {
|
||||
DbCamera_AddVecSph(sp80, sp80, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp80, &spFC);
|
||||
}
|
||||
if (dbCamera->unk_40 == 4) {
|
||||
dbCamera->unk_44++;
|
||||
|
@ -828,10 +833,10 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
spFC.pitch = 0;
|
||||
if (!D_80161144) {
|
||||
spFC.yaw = sp104.yaw + 0x3FFF;
|
||||
DbCamera_AddVecSph(sp7C, sp7C, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp7C, &spFC);
|
||||
} else {
|
||||
spFC.yaw = sp104.yaw - 0x3FFF;
|
||||
DbCamera_AddVecSph(sp80, sp80, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp80, &spFC);
|
||||
}
|
||||
if (dbCamera->unk_40 == 5) {
|
||||
dbCamera->unk_44++;
|
||||
|
@ -846,10 +851,10 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
spFC.pitch = 0;
|
||||
if (!D_80161144) {
|
||||
spFC.yaw = sp104.yaw - 0x3FFF;
|
||||
DbCamera_AddVecSph(sp7C, sp7C, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp7C, &spFC);
|
||||
} else {
|
||||
spFC.yaw = sp104.yaw + 0x3FFF;
|
||||
DbCamera_AddVecSph(sp80, sp80, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp80, &spFC);
|
||||
}
|
||||
if (dbCamera->unk_40 == 6) {
|
||||
dbCamera->unk_44++;
|
||||
|
@ -873,11 +878,11 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
spFC.r = temp_f2;
|
||||
if (!D_80161144) {
|
||||
spFC.yaw = sp104.yaw;
|
||||
DbCamera_AddVecSph(sp7C, sp7C, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp7C, &spFC);
|
||||
} else {
|
||||
spFC.pitch = -spFC.pitch;
|
||||
spFC.yaw = sp104.yaw - 0x7FFF;
|
||||
DbCamera_AddVecSph(sp80, sp80, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp80, &spFC);
|
||||
}
|
||||
if (dbCamera->unk_40 == 0xB) {
|
||||
dbCamera->unk_44++;
|
||||
|
@ -902,11 +907,11 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
spFC.r = -temp_f2;
|
||||
if (!D_80161144) {
|
||||
spFC.yaw = sp104.yaw;
|
||||
DbCamera_AddVecSph(sp7C, sp7C, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp7C, &spFC);
|
||||
} else {
|
||||
spFC.pitch = -spFC.pitch;
|
||||
spFC.yaw = sp104.yaw - 0x7FFF;
|
||||
DbCamera_AddVecSph(sp80, sp80, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp80, &spFC);
|
||||
}
|
||||
if (dbCamera->unk_40 == 0xC) {
|
||||
dbCamera->unk_44++;
|
||||
|
@ -964,18 +969,18 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
if (!D_80161144) {
|
||||
sp104.pitch += (s16)((temp_f0_5 >= 0.0f) ? pitch : -pitch);
|
||||
sp104.yaw += (s16)((temp_f2_2 >= 0.0f) ? yaw : -yaw);
|
||||
DbCamera_AddVecSph(sp80, sp7C, &sp104);
|
||||
DbCamera_AddVecGeoToVec3f(sp80, sp7C, &sp104);
|
||||
dbCamera->sub.unk_104A.x = -sp104.pitch;
|
||||
dbCamera->sub.unk_104A.y = sp104.yaw - 0x7FFF;
|
||||
} else {
|
||||
sp104.pitch += (s16)((temp_f0_5 >= 0.0f) ? -pitch : pitch);
|
||||
sp104.yaw += (s16)((temp_f2_2 >= 0.0f) ? -yaw : yaw);
|
||||
DbCamera_AddVecSph(sp7C, sp80, &sp104);
|
||||
DbCamera_AddVecGeoToVec3f(sp7C, sp80, &sp104);
|
||||
dbCamera->sub.unk_104A.x = sp104.pitch;
|
||||
dbCamera->sub.unk_104A.y = sp104.yaw;
|
||||
}
|
||||
|
||||
OLib_Vec3fDiffToVecSphGeo(&spF4, sp80, sp7C);
|
||||
OLib_Vec3fDiffToVecGeo(&spF4, sp80, sp7C);
|
||||
DbCamera_CalcUpFromPitchYawRoll(&dbCamera->unk_1C, spF4.pitch, spF4.yaw,
|
||||
CAM_DEG_TO_BINANG(dbCamera->rollDegrees));
|
||||
if (dbCamera->unk_00 == 1) {
|
||||
|
@ -985,7 +990,7 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
cam->at = *sp7C;
|
||||
spFC = sp104;
|
||||
spFC.r = new_var2;
|
||||
DbCamera_AddVecSph(&cam->eye, &cam->at, &spFC);
|
||||
DbCamera_AddVecGeoToVec3f(&cam->eye, &cam->at, &spFC);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1370,7 +1375,7 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
func_8006376C(0x1E, 0x19, 2, &sp110);
|
||||
} else {
|
||||
if (D_8012CEE0[0]) {}
|
||||
OLib_Vec3fDiffToVecSphGeo(&spFC, sp90, sp7C);
|
||||
OLib_Vec3fDiffToVecGeo(&spFC, sp90, sp7C);
|
||||
spFC.yaw -= cam->playerPosRot.rot.y;
|
||||
func_8006376C(3, 0x16,
|
||||
((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && !D_80161144) ? 7
|
||||
|
@ -1383,7 +1388,7 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
func_8006376C(3, 0x18, 3, D_8012D0F8);
|
||||
DbCamera_SetTextValue(spFC.r, &D_8012D0D4[7], 6);
|
||||
func_8006376C(3, 0x19, 3, D_8012D0D4);
|
||||
OLib_Vec3fDiffToVecSphGeo(&spFC, sp90, sp80);
|
||||
OLib_Vec3fDiffToVecGeo(&spFC, sp90, sp80);
|
||||
spFC.yaw -= cam->playerPosRot.rot.y;
|
||||
func_8006376C(0x1E, 0x16,
|
||||
((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && D_80161144) ? 7
|
||||
|
@ -1413,7 +1418,7 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
func_800B404C(temp_s6, &(dbCamera->sub.lookAt + i)->pos, &spB8);
|
||||
func_800B404C(temp_s6, &(dbCamera->sub.position + i)->pos, &spAC);
|
||||
}
|
||||
OLib_Vec3fDiffToVecSphGeo(&spFC, &spAC, &spB8);
|
||||
OLib_Vec3fDiffToVecGeo(&spFC, &spAC, &spB8);
|
||||
spAA = dbCamera->sub.lookAt[i].cameraRoll * 0xB6;
|
||||
if (i == dbCamera->sub.unkIdx) {
|
||||
DebugDisplay_AddObject(spAC.x, spAC.y, spAC.z, spFC.pitch * -1, spFC.yaw, spAA, .5f, .5f, .5f,
|
||||
|
@ -1481,7 +1486,7 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
D_8012D110++;
|
||||
D_8012D110 %= 50;
|
||||
|
||||
OLib_Vec3fDiffToVecSphGeo(&spA0, &cam->eye, &cam->at);
|
||||
OLib_Vec3fDiffToVecGeo(&spA0, &cam->eye, &cam->at);
|
||||
DebugDisplay_AddObject(dbCamera->at.x, dbCamera->at.y + 1.0f, dbCamera->at.z, 0, 0, 0, 0.02f, 2.0f, 0.02f, 0xFF,
|
||||
0xFF, 0x7F, 0x2D, 0, cam->play->view.gfxCtx);
|
||||
DebugDisplay_AddObject(dbCamera->at.x, dbCamera->at.y + 1.0f, dbCamera->at.z, 0, 0, 0, 2.0f, 0.02f, 0.02f, 0x7F,
|
||||
|
@ -1492,7 +1497,7 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
0x7F, 0x7F, 0x80, 5, cam->play->view.gfxCtx);
|
||||
DebugDisplay_AddObject(cam->at.x, cam->at.y, cam->at.z, spA0.pitch * -1, spA0.yaw, 0, 1.5f, 2.0f, 1.0f, 0xFF,
|
||||
0x7F, 0x7F, 0x80, 4, cam->play->view.gfxCtx);
|
||||
OLib_Vec3fDiffToVecSphGeo(&spA0, &cam->eyeNext, &cam->at);
|
||||
OLib_Vec3fDiffToVecGeo(&spA0, &cam->eyeNext, &cam->at);
|
||||
DebugDisplay_AddObject(cam->eyeNext.x, cam->eyeNext.y, cam->eyeNext.z, spA0.pitch * -1, spA0.yaw, 0, .5f, .5f,
|
||||
.5f, 0xFF, 0xC0, 0x7F, 0x50, 5, cam->play->view.gfxCtx);
|
||||
}
|
||||
|
@ -1845,7 +1850,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
s16 idx3;
|
||||
char sp74[(ARRAY_COUNT(sDbCameraCuts) - 1 + 4) * 2];
|
||||
DbCameraCut sp64;
|
||||
VecSph sp5C;
|
||||
VecGeo sp5C;
|
||||
s32 (*callbacks[])(char*) = { DbCamera_SaveCallback, DbCamera_LoadCallback, DbCamera_ClearCallback };
|
||||
|
||||
func_8006376C(0xE, 5, 0, D_8012CF44); // DEMO CONTROL
|
||||
|
@ -2148,7 +2153,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
Audio_PlaySfxGeneral(NA_SE_SY_GET_RUPY, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
}
|
||||
OLib_Vec3fDiffToVecSphGeo(&sp5C, &dbCamera->eye, &dbCamera->at);
|
||||
OLib_Vec3fDiffToVecGeo(&sp5C, &dbCamera->eye, &dbCamera->at);
|
||||
DbCamera_CalcUpFromPitchYawRoll(&dbCamera->unk_1C, sp5C.pitch, sp5C.yaw,
|
||||
CAM_DEG_TO_BINANG(dbCamera->rollDegrees));
|
||||
return 2;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -93,16 +93,16 @@ Vec3f* OLib_VecSphToVec3f(Vec3f* dest, VecSph* sph) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Takes the geographic point `sph` and converts it into a x,y,z position
|
||||
* Takes the geographic point `geo` and converts it into a x,y,z position
|
||||
*/
|
||||
Vec3f* OLib_VecSphGeoToVec3f(Vec3f* dest, VecSph* sph) {
|
||||
VecSph geo;
|
||||
Vec3f* OLib_VecGeoToVec3f(Vec3f* dest, VecGeo* geo) {
|
||||
VecSph sph;
|
||||
|
||||
geo.r = sph->r;
|
||||
geo.pitch = 0x3FFF - sph->pitch;
|
||||
geo.yaw = sph->yaw;
|
||||
sph.r = geo->r;
|
||||
sph.pitch = 0x3FFF - geo->pitch;
|
||||
sph.yaw = geo->yaw;
|
||||
|
||||
return OLib_VecSphToVec3f(dest, &geo);
|
||||
return OLib_VecSphToVec3f(dest, &sph);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -110,17 +110,16 @@ Vec3f* OLib_VecSphGeoToVec3f(Vec3f* dest, VecSph* sph) {
|
|||
*/
|
||||
VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) {
|
||||
VecSph sph;
|
||||
f32 distXZSq = SQ(vec->x) + SQ(vec->z);
|
||||
f32 distXZ = sqrtf(distXZSq);
|
||||
|
||||
f32 distSquared = SQ(vec->x) + SQ(vec->z);
|
||||
f32 dist = sqrtf(distSquared);
|
||||
|
||||
if ((dist == 0.0f) && (vec->y == 0.0f)) {
|
||||
if ((distXZ == 0.0f) && (vec->y == 0.0f)) {
|
||||
sph.pitch = 0;
|
||||
} else {
|
||||
sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(dist, vec->y)));
|
||||
sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(distXZ, vec->y)));
|
||||
}
|
||||
|
||||
sph.r = sqrtf(SQ(vec->y) + distSquared);
|
||||
sph.r = sqrtf(SQ(vec->y) + distXZSq);
|
||||
if ((vec->x == 0.0f) && (vec->z == 0.0f)) {
|
||||
sph.yaw = 0;
|
||||
} else {
|
||||
|
@ -135,7 +134,7 @@ VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) {
|
|||
/**
|
||||
* Takes the point `vec`, and converts it to a geographic coordinate
|
||||
*/
|
||||
VecSph* OLib_Vec3fToVecSphGeo(VecSph* dest, Vec3f* vec) {
|
||||
VecGeo* OLib_Vec3fToVecGeo(VecGeo* dest, Vec3f* vec) {
|
||||
VecSph sph;
|
||||
|
||||
OLib_Vec3fToVecSph(&sph, vec);
|
||||
|
@ -150,26 +149,26 @@ VecSph* OLib_Vec3fToVecSphGeo(VecSph* dest, Vec3f* vec) {
|
|||
* Takes the differences of positions `a` and `b`, and converts them to spherical coordinates
|
||||
*/
|
||||
VecSph* OLib_Vec3fDiffToVecSph(VecSph* dest, Vec3f* a, Vec3f* b) {
|
||||
Vec3f sph;
|
||||
Vec3f diff;
|
||||
|
||||
sph.x = b->x - a->x;
|
||||
sph.y = b->y - a->y;
|
||||
sph.z = b->z - a->z;
|
||||
diff.x = b->x - a->x;
|
||||
diff.y = b->y - a->y;
|
||||
diff.z = b->z - a->z;
|
||||
|
||||
return OLib_Vec3fToVecSph(dest, &sph);
|
||||
return OLib_Vec3fToVecSph(dest, &diff);
|
||||
}
|
||||
|
||||
/**
|
||||
* Takes the difference of positions `a` and `b`, and converts them to geographic coordinates
|
||||
*/
|
||||
VecSph* OLib_Vec3fDiffToVecSphGeo(VecSph* dest, Vec3f* a, Vec3f* b) {
|
||||
Vec3f sph;
|
||||
VecGeo* OLib_Vec3fDiffToVecGeo(VecGeo* dest, Vec3f* a, Vec3f* b) {
|
||||
Vec3f diff;
|
||||
|
||||
sph.x = b->x - a->x;
|
||||
sph.y = b->y - a->y;
|
||||
sph.z = b->z - a->z;
|
||||
diff.x = b->x - a->x;
|
||||
diff.y = b->y - a->y;
|
||||
diff.z = b->z - a->z;
|
||||
|
||||
return OLib_Vec3fToVecSphGeo(dest, &sph);
|
||||
return OLib_Vec3fToVecGeo(dest, &diff);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -9,17 +9,19 @@ static s32 sPrevFrameCs1100 = -4096;
|
|||
|
||||
#include "z_onepointdemo_data.inc.c"
|
||||
|
||||
void OnePointCutscene_AddVecSphToVec3f(Vec3f* dst, Vec3f* src, VecSph* vecSph) {
|
||||
Vec3f out;
|
||||
Vec3f vec;
|
||||
Vec3f* OnePointCutscene_AddVecGeoToVec3f(Vec3f* dest, Vec3f* a, VecGeo* geo) {
|
||||
Vec3f sum;
|
||||
Vec3f b;
|
||||
|
||||
OLib_VecSphGeoToVec3f(&vec, vecSph);
|
||||
OLib_VecGeoToVec3f(&b, geo);
|
||||
|
||||
out.x = src->x + vec.x;
|
||||
out.y = src->y + vec.y;
|
||||
out.z = src->z + vec.z;
|
||||
if (dst) {}
|
||||
*dst = out;
|
||||
sum.x = a->x + b.x;
|
||||
sum.y = a->y + b.y;
|
||||
sum.z = a->z + b.z;
|
||||
|
||||
*dest = sum;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
s16 OnePointCutscene_Vec3fYaw(Vec3f* vec1, Vec3f* vec2) {
|
||||
|
@ -62,7 +64,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
Camera* childCam = play->cameraPtrs[subCam->childCamId];
|
||||
Camera* mainCam = play->cameraPtrs[CAM_ID_MAIN];
|
||||
Player* player = mainCam->player;
|
||||
VecSph spD0;
|
||||
VecGeo spD0;
|
||||
s32 i;
|
||||
Vec3f spC0;
|
||||
Vec3f spB4;
|
||||
|
@ -95,7 +97,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
D_80120964[0].atTargetInit = play->view.at;
|
||||
D_80120964[0].eyeTargetInit = play->view.eye;
|
||||
D_80120964[0].fovTargetInit = play->view.fovy;
|
||||
OLib_Vec3fDiffToVecSphGeo(&spD0, &mainCam->at, &mainCam->eye);
|
||||
OLib_Vec3fDiffToVecGeo(&spD0, &mainCam->at, &mainCam->eye);
|
||||
D_80120964[1].eyeTargetInit.y = CAM_BINANG_TO_DEG(spD0.yaw);
|
||||
D_80120964[1].timerInit = timer - 1;
|
||||
|
||||
|
@ -108,9 +110,9 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
D_801209B4[0].atTargetInit = D_801209B4[1].atTargetInit = play->view.at;
|
||||
D_801209B4[0].eyeTargetInit = play->view.eye;
|
||||
D_801209B4[0].fovTargetInit = D_801209B4[2].fovTargetInit = play->view.fovy;
|
||||
OLib_Vec3fDiffToVecSphGeo(&spD0, &actor->focus.pos, &mainCam->at);
|
||||
OLib_Vec3fDiffToVecGeo(&spD0, &actor->focus.pos, &mainCam->at);
|
||||
spD0.r = mainCam->dist;
|
||||
OnePointCutscene_AddVecSphToVec3f(&D_801209B4[1].eyeTargetInit, &D_801209B4[1].atTargetInit, &spD0);
|
||||
OnePointCutscene_AddVecGeoToVec3f(&D_801209B4[1].eyeTargetInit, &D_801209B4[1].atTargetInit, &spD0);
|
||||
D_801209B4[1].atTargetInit.y += 20.0f;
|
||||
|
||||
csInfo->keyFrames = D_801209B4;
|
||||
|
@ -298,7 +300,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
spD0.yaw = spA0.rot.y;
|
||||
spD0.pitch = 0x3E8;
|
||||
|
||||
OnePointCutscene_AddVecSphToVec3f(&spB4, &spC0, &spD0);
|
||||
OnePointCutscene_AddVecGeoToVec3f(&spB4, &spC0, &spD0);
|
||||
Play_CameraChangeSetting(play, subCamId, CAM_SET_FREE2);
|
||||
Play_CameraSetAtEye(play, subCamId, &spC0, &spB4);
|
||||
func_8002DF54(play, NULL, 8);
|
||||
|
@ -309,7 +311,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
}
|
||||
break;
|
||||
case 2210:
|
||||
OLib_Vec3fDiffToVecSphGeo(&spD0, &player->actor.world.pos, &actor->world.pos);
|
||||
OLib_Vec3fDiffToVecGeo(&spD0, &player->actor.world.pos, &actor->world.pos);
|
||||
D_801213B4[0].eyeTargetInit.y = D_801213B4[1].eyeTargetInit.y = D_801213B4[2].eyeTargetInit.y =
|
||||
D_801213B4[2].atTargetInit.y = CAM_BINANG_TO_DEG(spD0.yaw);
|
||||
if (Rand_ZeroOne() < 0.0f) {
|
||||
|
@ -521,7 +523,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
spD0.r = 250.0f;
|
||||
Actor_GetWorld(&spA0, &player->actor);
|
||||
spD0.yaw = OnePointCutscene_Vec3fYaw(&spC0, &spA0.pos) - 0x7D0;
|
||||
OnePointCutscene_AddVecSphToVec3f(&spB4, &spC0, &spD0);
|
||||
OnePointCutscene_AddVecGeoToVec3f(&spB4, &spC0, &spD0);
|
||||
Play_CameraChangeSetting(play, subCamId, CAM_SET_FREE2);
|
||||
Play_CameraSetAtEye(play, subCamId, &spC0, &spB4);
|
||||
Play_CopyCamera(play, CAM_ID_MAIN, subCamId);
|
||||
|
@ -535,7 +537,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
spD0.pitch = 0;
|
||||
spD0.yaw = spA0.rot.y;
|
||||
spD0.r = 150.0f;
|
||||
OnePointCutscene_AddVecSphToVec3f(&spB4, &spC0, &spD0);
|
||||
OnePointCutscene_AddVecGeoToVec3f(&spB4, &spC0, &spD0);
|
||||
Play_CameraChangeSetting(play, subCamId, CAM_SET_FREE2);
|
||||
Play_CameraSetAtEye(play, subCamId, &spC0, &spB4);
|
||||
subCam->roll = 0;
|
||||
|
@ -549,7 +551,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
spD0.r = 300.0f;
|
||||
spD0.yaw = spA0.rot.y;
|
||||
spD0.pitch = -0xAF0;
|
||||
OnePointCutscene_AddVecSphToVec3f(&spB4, &spC0, &spD0);
|
||||
OnePointCutscene_AddVecGeoToVec3f(&spB4, &spC0, &spD0);
|
||||
Play_CameraChangeSetting(play, subCamId, CAM_SET_FREE2);
|
||||
Play_CameraSetAtEye(play, subCamId, &spC0, &spB4);
|
||||
subCam->roll = 0;
|
||||
|
@ -578,10 +580,10 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
spC0.x = sp8C.pos.x;
|
||||
spC0.y = sp8C.pos.y + 70.0f;
|
||||
spC0.z = sp8C.pos.z;
|
||||
OLib_Vec3fDiffToVecSphGeo(&spD0, &spA0.pos, &sp8C.pos);
|
||||
OLib_Vec3fDiffToVecGeo(&spD0, &spA0.pos, &sp8C.pos);
|
||||
spD0.pitch = 0x5DC;
|
||||
spD0.r = 120.0f;
|
||||
OnePointCutscene_AddVecSphToVec3f(&spB4, &spC0, &spD0);
|
||||
OnePointCutscene_AddVecGeoToVec3f(&spB4, &spC0, &spD0);
|
||||
Play_CameraSetAtEye(play, CAM_ID_MAIN, &spC0, &spB4);
|
||||
|
||||
i = Quake_Request(subCam, QUAKE_TYPE_3);
|
||||
|
@ -596,7 +598,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
spC0.y += 70.0f;
|
||||
spD0.yaw = spA0.rot.y + 0x7FFF;
|
||||
spD0.r = 300.0f;
|
||||
OnePointCutscene_AddVecSphToVec3f(&spB4, &spC0, &spD0);
|
||||
OnePointCutscene_AddVecGeoToVec3f(&spB4, &spC0, &spD0);
|
||||
Play_CameraChangeSetting(play, subCamId, CAM_SET_FREE2);
|
||||
Play_CameraSetAtEye(play, subCamId, &spC0, &spB4);
|
||||
subCam->roll = 0;
|
||||
|
@ -608,10 +610,10 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
spC0 = spA0.pos;
|
||||
func_800C0808(play, subCamId, player, CAM_SET_PIVOT_VERTICAL);
|
||||
Actor_GetWorld(&spA0, &player->actor);
|
||||
OLib_Vec3fDiffToVecSphGeo(&spD0, &spC0, &spA0.pos);
|
||||
OLib_Vec3fDiffToVecGeo(&spD0, &spC0, &spA0.pos);
|
||||
spD0.yaw += 0x3E8;
|
||||
spD0.r = 400.0f;
|
||||
OnePointCutscene_AddVecSphToVec3f(&spB4, &spC0, &spD0);
|
||||
OnePointCutscene_AddVecGeoToVec3f(&spB4, &spC0, &spD0);
|
||||
spB4.y = spA0.pos.y + 60.0f;
|
||||
Play_CameraSetAtEye(play, subCamId, &spC0, &spB4);
|
||||
subCam->roll = 0;
|
||||
|
@ -971,12 +973,12 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
|||
D_801231B4[2].atTargetInit.z = 0.0f;
|
||||
}
|
||||
Actor_GetWorldPosShapeRot(&spA0, &player->actor);
|
||||
OLib_Vec3fDiffToVecSphGeo(&spD0, &spA0.pos, &mainCam->at);
|
||||
OLib_Vec3fDiffToVecGeo(&spD0, &spA0.pos, &mainCam->at);
|
||||
spD0.yaw -= spA0.rot.y;
|
||||
OLib_VecSphGeoToVec3f(&D_801231B4[3].atTargetInit, &spD0);
|
||||
OLib_Vec3fDiffToVecSphGeo(&spD0, &spA0.pos, &mainCam->eye);
|
||||
OLib_VecGeoToVec3f(&D_801231B4[3].atTargetInit, &spD0);
|
||||
OLib_Vec3fDiffToVecGeo(&spD0, &spA0.pos, &mainCam->eye);
|
||||
spD0.yaw -= spA0.rot.y;
|
||||
OLib_VecSphGeoToVec3f(&D_801231B4[3].eyeTargetInit, &spD0);
|
||||
OLib_VecGeoToVec3f(&D_801231B4[3].eyeTargetInit, &spD0);
|
||||
D_801231B4[3].fovTargetInit = mainCam->fov;
|
||||
D_801231B4[3].timerInit = timer - 50;
|
||||
|
||||
|
|
|
@ -22,11 +22,11 @@ QuakeRequest sQuakeRequests[4];
|
|||
s16 sQuakeUnused = 1;
|
||||
s16 sQuakeRequestCount = 0;
|
||||
|
||||
Vec3f* Quake_VecSphGeoAddToVec3f(Vec3f* dst, Vec3f* a, VecSph* sph) {
|
||||
Vec3f* Quake_AddVecGeoToVec3f(Vec3f* dst, Vec3f* a, VecGeo* geo) {
|
||||
Vec3f vec;
|
||||
Vec3f b;
|
||||
|
||||
OLib_VecSphGeoToVec3f(&b, sph);
|
||||
OLib_VecGeoToVec3f(&b, geo);
|
||||
vec.x = a->x + b.x;
|
||||
vec.y = a->y + b.y;
|
||||
vec.z = a->z + b.z;
|
||||
|
@ -40,38 +40,38 @@ void Quake_UpdateShakeInfo(QuakeRequest* req, ShakeInfo* shake, f32 y, f32 x) {
|
|||
Vec3f* at = &req->cam->at;
|
||||
Vec3f* eye = &req->cam->eye;
|
||||
Vec3f offset;
|
||||
VecSph sph;
|
||||
VecSph eyeToAtSph;
|
||||
VecGeo geo;
|
||||
VecGeo eyeToAtGeo;
|
||||
|
||||
if (req->isRelativeToScreen) {
|
||||
offset.x = 0;
|
||||
offset.y = 0;
|
||||
offset.z = 0;
|
||||
OLib_Vec3fDiffToVecSphGeo(&eyeToAtSph, eye, at);
|
||||
OLib_Vec3fDiffToVecGeo(&eyeToAtGeo, eye, at);
|
||||
|
||||
// y shake
|
||||
sph.r = req->y * y;
|
||||
geo.r = req->y * y;
|
||||
// point unit vector up, then add on `req->orientation`
|
||||
sph.pitch = eyeToAtSph.pitch + req->orientation.x + 0x4000;
|
||||
sph.yaw = eyeToAtSph.yaw + req->orientation.y;
|
||||
geo.pitch = eyeToAtGeo.pitch + req->orientation.x + 0x4000;
|
||||
geo.yaw = eyeToAtGeo.yaw + req->orientation.y;
|
||||
// apply y shake
|
||||
Quake_VecSphGeoAddToVec3f(&offset, &offset, &sph);
|
||||
Quake_AddVecGeoToVec3f(&offset, &offset, &geo);
|
||||
|
||||
// x shake
|
||||
sph.r = req->x * x;
|
||||
geo.r = req->x * x;
|
||||
// point unit vector left, then add on `req->orientation`
|
||||
sph.pitch = eyeToAtSph.pitch + req->orientation.x;
|
||||
sph.yaw = eyeToAtSph.yaw + req->orientation.y + 0x4000;
|
||||
geo.pitch = eyeToAtGeo.pitch + req->orientation.x;
|
||||
geo.yaw = eyeToAtGeo.yaw + req->orientation.y + 0x4000;
|
||||
// apply x shake
|
||||
Quake_VecSphGeoAddToVec3f(&offset, &offset, &sph);
|
||||
Quake_AddVecGeoToVec3f(&offset, &offset, &geo);
|
||||
} else {
|
||||
offset.x = 0;
|
||||
offset.y = req->y * y;
|
||||
offset.z = 0;
|
||||
sph.r = req->x * x;
|
||||
sph.pitch = req->orientation.x;
|
||||
sph.yaw = req->orientation.y;
|
||||
Quake_VecSphGeoAddToVec3f(&offset, &offset, &sph);
|
||||
geo.r = req->x * x;
|
||||
geo.pitch = req->orientation.x;
|
||||
geo.yaw = req->orientation.y;
|
||||
Quake_AddVecGeoToVec3f(&offset, &offset, &geo);
|
||||
}
|
||||
|
||||
shake->atOffset = shake->eyeOffset = offset;
|
||||
|
|
|
@ -730,26 +730,29 @@ void DemoKankyo_Vec3fCopy(Vec3f* src, Vec3f* dst) {
|
|||
dst->z = src->z;
|
||||
}
|
||||
|
||||
Vec3f* DemoKankyo_Vec3fAddVecSph(Vec3f* dst, Vec3f* vec, VecSph* sph) {
|
||||
Vec3f result;
|
||||
Vec3f sphVec;
|
||||
Vec3f* DemoKankyo_AddVecGeoToVec3f(Vec3f* dest, Vec3f* a, VecGeo* geo) {
|
||||
Vec3f sum;
|
||||
Vec3f b;
|
||||
|
||||
OLib_VecSphGeoToVec3f(&sphVec, sph);
|
||||
result.x = vec->x + sphVec.x;
|
||||
result.y = vec->y + sphVec.y;
|
||||
result.z = vec->z + sphVec.z;
|
||||
*dst = result;
|
||||
return dst;
|
||||
OLib_VecGeoToVec3f(&b, geo);
|
||||
|
||||
sum.x = a->x + b.x;
|
||||
sum.y = a->y + b.y;
|
||||
sum.z = a->z + b.z;
|
||||
|
||||
*dest = sum;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
void DemoKankyo_Vec3fAddPosRot(PosRot* posRot, Vec3f* vec, Vec3f* dst) {
|
||||
VecSph sph;
|
||||
VecGeo geo;
|
||||
Vec3f vecCopy;
|
||||
|
||||
DemoKankyo_Vec3fCopy(vec, &vecCopy);
|
||||
OLib_Vec3fToVecSphGeo(&sph, &vecCopy);
|
||||
sph.yaw += posRot->rot.y;
|
||||
DemoKankyo_Vec3fAddVecSph(dst, &posRot->pos, &sph);
|
||||
OLib_Vec3fToVecGeo(&geo, &vecCopy);
|
||||
geo.yaw += posRot->rot.y;
|
||||
DemoKankyo_AddVecGeoToVec3f(dst, &posRot->pos, &geo);
|
||||
}
|
||||
|
||||
void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) {
|
||||
|
|
Loading…
Add table
Reference in a new issue