mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-18 22:04:54 +00:00
rename code_8007BF90.c to z_olib.c, rename functions in z_olib.c (#181)
* rename code_8007BF90.c to z_olib.c, rename functions in z_olib.c * pr updates
This commit is contained in:
parent
69e30364b9
commit
d6fc300ed2
56 changed files with 501 additions and 503 deletions
182
src/code/z_olib.c
Normal file
182
src/code/z_olib.c
Normal file
|
@ -0,0 +1,182 @@
|
|||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
f32 OLib_Vec3fDist(Vec3f* a, Vec3f* b) {
|
||||
f32 dx = a->x - b->x;
|
||||
f32 dy = a->y - b->y;
|
||||
f32 dz = a->z - b->z;
|
||||
|
||||
return sqrtf(SQ(dx) + SQ(dy) + SQ(dz));
|
||||
}
|
||||
|
||||
f32 OLib_Vec3fDistOutDiff(Vec3f* a, Vec3f* b, Vec3f* dest) {
|
||||
dest->x = a->x - b->x;
|
||||
dest->y = a->y - b->y;
|
||||
dest->z = a->z - b->z;
|
||||
|
||||
return sqrtf(SQ(dest->x) + SQ(dest->y) + SQ(dest->z));
|
||||
}
|
||||
|
||||
f32 OLib_Vec3fDistXZ(Vec3f* a, Vec3f* b) {
|
||||
return sqrtf(SQ(a->x - b->x) + SQ(a->z - b->z));
|
||||
}
|
||||
|
||||
f32 func_8007C058(f32 arg0, f32 arg1) {
|
||||
return (arg1 <= fabsf(arg0)) ? arg0 : ((arg0 >= 0) ? arg1 : -arg1);
|
||||
}
|
||||
|
||||
f32 func_8007C0A8(f32 arg0, f32 arg1) {
|
||||
return (fabsf(arg0) <= arg1) ? arg0 : ((arg0 >= 0) ? arg1 : -arg1);
|
||||
}
|
||||
|
||||
Vec3f* OLib_Vec3fDistNormalize(Vec3f* dest, Vec3f* a, Vec3f* b) {
|
||||
Vec3f v1;
|
||||
Vec3f v2;
|
||||
f32 temp;
|
||||
|
||||
v1.x = b->x - a->x;
|
||||
v1.y = b->y - a->y;
|
||||
v1.z = b->z - a->z;
|
||||
|
||||
temp = func_8007C058(sqrtf(SQ(v1.x) + SQ(v1.y) + SQ(v1.z)), 0.01f);
|
||||
|
||||
v2.x = v1.x / temp;
|
||||
v2.y = v1.y / temp;
|
||||
v2.z = v1.z / temp;
|
||||
|
||||
*dest = v2;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
Vec3f* OLib_VecSphToVec3f(Vec3f* dest, VecSph* sph) {
|
||||
Vec3f v;
|
||||
f32 sinPhi;
|
||||
f32 cosPhi;
|
||||
f32 sinTheta;
|
||||
f32 cosTheta;
|
||||
|
||||
cosPhi = Math_Coss(sph->phi);
|
||||
cosTheta = Math_Coss(sph->theta);
|
||||
sinPhi = Math_Sins(sph->phi);
|
||||
sinTheta = Math_Sins(sph->theta);
|
||||
|
||||
v.x = sph->r * sinPhi * sinTheta;
|
||||
v.y = sph->r * cosPhi;
|
||||
v.z = sph->r * sinPhi * cosTheta;
|
||||
|
||||
*dest = v;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
void OLib_VecSphRot90ToVec3f(Vec3f* dest, VecSph* sph) {
|
||||
VecSph src;
|
||||
|
||||
src.r = sph->r;
|
||||
src.phi = 0x3FFF - sph->phi;
|
||||
src.theta = sph->theta;
|
||||
|
||||
OLib_VecSphToVec3f(dest, &src);
|
||||
}
|
||||
|
||||
VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) {
|
||||
VecSph sph;
|
||||
|
||||
f32 distSquared;
|
||||
f32 dist;
|
||||
|
||||
distSquared = SQ(vec->x) + SQ(vec->z);
|
||||
dist = sqrtf(distSquared);
|
||||
|
||||
if ((dist == 0.0f) && (vec->y == 0.0f)) {
|
||||
sph.phi = 0;
|
||||
} else {
|
||||
sph.phi = Math_atan2f(dist, vec->y) * 57.295776f * 182.04167f + 0.5f;
|
||||
}
|
||||
|
||||
sph.r = sqrtf(SQ(vec->y) + distSquared);
|
||||
if ((vec->x == 0.0f) && (vec->z == 0.0f)) {
|
||||
sph.theta = 0;
|
||||
} else {
|
||||
sph.theta = Math_atan2f(vec->x, vec->z) * 57.295776f * 182.04167f + 0.5f;
|
||||
}
|
||||
|
||||
*dest = sph;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
VecSph* OLib_Vec3fToVecSphRot90(VecSph* dest, Vec3f* vec) {
|
||||
VecSph sph;
|
||||
|
||||
OLib_Vec3fToVecSph(&sph, vec);
|
||||
sph.phi = 0x3FFF - sph.phi;
|
||||
|
||||
*dest = sph;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
VecSph* OLib_Vec3fDiffToVecSph(VecSph* dest, Vec3f* a, Vec3f* b) {
|
||||
Vec3f sph;
|
||||
|
||||
sph.x = b->x - a->x;
|
||||
sph.y = b->y - a->y;
|
||||
sph.z = b->z - a->z;
|
||||
|
||||
return OLib_Vec3fToVecSph(dest, &sph);
|
||||
}
|
||||
|
||||
VecSph* OLib_Vec3fDiffToVecSphRot90(VecSph* dest, Vec3f* a, Vec3f* b) {
|
||||
Vec3f sph;
|
||||
|
||||
sph.x = b->x - a->x;
|
||||
sph.y = b->y - a->y;
|
||||
sph.z = b->z - a->z;
|
||||
|
||||
return OLib_Vec3fToVecSphRot90(dest, &sph);
|
||||
}
|
||||
|
||||
Vec3f* func_8007C4E0(Vec3f* dest, Vec3f* a, Vec3f* b) {
|
||||
Vec3f var;
|
||||
|
||||
var.x = Math_atan2f(b->z - a->z, b->y - a->y);
|
||||
var.y = Math_atan2f(b->x - a->x, b->z - a->z);
|
||||
var.z = 0;
|
||||
|
||||
*dest = var;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
Vec3f* func_8007C574(Vec3f* arg0, Vec3f* arg1, Vec3f* arg2) {
|
||||
Vec3f sp24;
|
||||
Vec3f sp18;
|
||||
|
||||
func_8007C4E0(&sp24, arg1, arg2);
|
||||
|
||||
// ~180 / pi
|
||||
sp18.x = sp24.x * 57.295776f;
|
||||
sp18.y = sp24.y * 57.295776f;
|
||||
sp18.z = 0.0f;
|
||||
|
||||
*arg0 = sp18;
|
||||
|
||||
return arg0;
|
||||
}
|
||||
|
||||
Vec3s* func_8007C5E0(Vec3s* arg0, Vec3f* arg1, Vec3f* arg2) {
|
||||
Vec3f sp24;
|
||||
Vec3s sp18;
|
||||
|
||||
func_8007C4E0(&sp24, arg1, arg2);
|
||||
|
||||
sp18.x = (((sp24.x * 57.295776f)) * 182.04167f) + 0.5f;
|
||||
sp18.y = (((sp24.y * 57.295776f)) * 182.04167f) + 0.5f;
|
||||
sp18.z = 0.0f;
|
||||
|
||||
*arg0 = sp18;
|
||||
|
||||
return arg0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue