c_xyz and c_angle sinit

This commit is contained in:
lepelog 2021-04-08 00:29:42 +02:00
parent ed3df56644
commit 80051063ff
3 changed files with 37 additions and 187 deletions

View File

@ -9,7 +9,13 @@ private:
s16 mAngle;
public:
const static cSAngle _0;
const static cSAngle _1;
const static cSAngle _90;
const static cSAngle _180;
const static cSAngle _270;
cSAngle() {}
~cSAngle() {}
cSAngle(const cSAngle&);
cSAngle(s16);
cSAngle(float);
@ -39,8 +45,8 @@ public:
bool operator>(const cSAngle& other) const { return mAngle > other.mAngle; }
operator s16(void) const { return mAngle; }
void operator=(const cSAngle& other) { mAngle = other.mAngle; }
static cSAngle getMaxNegative(void) { return cSAngle((s16)-0x8000); }
void mirrorAtMaxNeg(void) { *this = getMaxNegative() - *this; }
static inline cSAngle getMaxNegative(void) { return cSAngle((s16)-0x8000); }
inline void mirrorAtMaxNeg(void) { *this = cSAngle((s16)-0x8000) - *this; }
};
cSAngle operator+(short, const cSAngle&);

View File

@ -8,80 +8,18 @@
#include "dolphin/types.h"
#include "msl_c/math.h"
f32 cAngle_NS_Adjust(f32,f32,f32);
extern "C" void __ct__7cSAngleFRC7cSAngle();
extern "C" void __ct__7cSAngleFs();
extern "C" void __ct__7cSAngleFf();
extern "C" void Val__7cSAngleFRC7cSAngle();
extern "C" void Val__7cSAngleFs();
extern "C" void Val__7cSAngleFf();
extern "C" void Degree__7cSAngleCFv();
extern "C" void Radian__7cSAngleCFv();
extern "C" void Norm__7cSAngleCFv();
extern "C" void Abs__7cSAngleCFv();
extern "C" void Inv__7cSAngleCFv();
extern "C" void Sin__7cSAngleCFv();
extern "C" void Cos__7cSAngleCFv();
extern "C" void __mi__7cSAngleCFv();
extern "C" void __pl__7cSAngleCFRC7cSAngle();
extern "C" void __mi__7cSAngleCFRC7cSAngle();
extern "C" void __apl__7cSAngleFRC7cSAngle();
extern "C" void __ami__7cSAngleFRC7cSAngle();
extern "C" void __pl__7cSAngleCFs();
extern "C" void __mi__7cSAngleCFs();
extern "C" void __apl__7cSAngleFs();
extern "C" void __ml__7cSAngleCFf();
extern "C" void __amu__7cSAngleFf();
extern "C" void __pl__FsRC7cSAngle();
extern "C" void __mi__FsRC7cSAngle();
extern "C" void __ct__7cDegreeFf();
extern "C" void Formal__7cDegreeFv();
extern "C" void Val__7cDegreeFf();
extern "C" void Radian__7cDegreeCFv();
extern "C" void Sin__7cDegreeCFv();
extern "C" void Cos__7cDegreeCFv();
extern "C" void Tan__7cDegreeCFv();
extern "C" void __ct__7cSPolarFRC4cXyz();
extern "C" void Formal__7cSPolarFv();
extern "C" void Val__7cSPolarFfss();
extern "C" void Val__7cSPolarFRC4cXyz();
extern "C" void Xyz__7cSPolarCFv();
extern "C" void Globe__7cSPolarCFP7cSGlobe();
extern "C" void __ct__7cSGlobeFRC7cSGlobe();
extern "C" void __ct__7cSGlobeFfss();
extern "C" void __ct__7cSGlobeFfRC7cSAngleRC7cSAngle();
extern "C" void __ct__7cSGlobeFRC4cXyz();
extern "C" void Formal__7cSGlobeFv();
extern "C" void Val__7cSGlobeFRC7cSGlobe();
extern "C" void Val__7cSGlobeFfss();
extern "C" void Val__7cSGlobeFfRC7cSAngleRC7cSAngle();
extern "C" void Val__7cSGlobeFRC4cXyz();
extern "C" void Xyz__7cSGlobeCFv();
extern "C" void Polar__7cSGlobeCFP7cSPolar();
extern "C" void Norm__7cSGlobeCFv();
extern "C" void Invert__7cSGlobeFv();
extern "C" void func_80271BA8();
extern "C" void __sinit_c_angle_cpp();
extern "C" extern u8 _0__7cSAngle[2 + 2 /* padding */];
extern "C" extern u8 _90__7cSAngle[2 + 2 /* padding */];
extern "C" extern u8 _180__7cSAngle[2 + 2 /* padding */];
extern "C" extern u8 _270__7cSAngle[2 + 6 /* padding */];
//
// External References:
//
f32 cM_atan2f(f32, f32);
extern "C" void __dt__7cSAngleFv();
extern "C" void cM_atan2f__Fff();
extern "C" void __register_global_object();
extern f32 cM_atan2f(f32, f32);
//
// Declarations:
//
const cSAngle cSAngle::_0(static_cast<s16>(0));
const cSAngle cSAngle::_1(static_cast<s16>(0xb6));
const cSAngle cSAngle::_90(static_cast<s16>(0x4000));
const cSAngle cSAngle::_180(static_cast<s16>(-0x8000));
const cSAngle cSAngle::_270(static_cast<s16>(-0x4000));
/* 80270F68-80270F98 0030+00 s=0 e=33 z=2 None .text __ct__7cSAngleFRC7cSAngle */
cSAngle::cSAngle(const cSAngle& angle) {
this->Val(angle);
@ -212,9 +150,26 @@ cDegree::cDegree(float f) {
this->Val(f);
}
struct cAngle {
template <typename T>
static T Adjust(T f1, T f2, T f3);
};
template <typename T>
T cAngle::Adjust(T f1, T f2, T f3) {
while (f1 >= f3) {
f1 -= f3 - f2;
}
while (f1 < f2) {
f1 += f3 - f2;
}
return f1;
}
/* 8027137C-802713BC 0040+00 s=1 e=0 z=0 None .text Formal__7cDegreeFv */
cDegree& cDegree::Formal(void) {
mDegree = cAngle_NS_Adjust(mDegree, -180.0f, 180.0f);
mDegree = cAngle::Adjust<f32>(mDegree, -180.0f, 180.0f);
// mDegree = cAngle_NS_Adjust(mDegree, -180.0f, 180.0f);
return *this;
}
@ -335,7 +290,8 @@ cSGlobe& cSGlobe::Formal(void) {
mInclination.Val(mInclination.Inv());
}
if (mAzimuth.Val() < -0x4000 || 0x4000 < mAzimuth.Val()) {
mAzimuth.mirrorAtMaxNeg();
// mAzimuth.mirrorAtMaxNeg();
mAzimuth = cSAngle((s16)-0x8000) - mAzimuth;
mInclination.Val(mInclination.Inv());
}
return *this;
@ -395,77 +351,3 @@ cSGlobe& cSGlobe::Invert(void) {
mRadius = -mRadius;
return this->Formal();
}
/* 80271BA8-80271BD4 002C+00 s=1 e=0 z=0 None .text Adjust<f>__6cAngleFfff */
// cAngle::Adjust<f32>(f32, f32, f32)
float cAngle_NS_Adjust(float f1, float f2, float f3) {
while (f1 >= f3) {
f1 -= f3 - f2;
}
while (f1 < f2) {
f1 += f3 - f2;
}
return f1;
}
/* ############################################################################################## */
/* 80430F98-80430FA4 05DCB8 000C+00 1/1 0/0 0/0 .bss @2401 */
static u8 lit_2401[12];
/* 80430FA4-80430FB0 05DCC4 000C+00 0/1 0/0 0/0 .bss @2402 */
#pragma push
#pragma force_active on
static u8 lit_2402[12];
#pragma pop
/* 80430FB0-80430FBC 05DCD0 000C+00 0/1 0/0 0/0 .bss @2403 */
#pragma push
#pragma force_active on
static u8 lit_2403[12];
#pragma pop
/* 80430FBC-80430FC8 05DCDC 000C+00 0/1 0/0 0/0 .bss @2404 */
#pragma push
#pragma force_active on
static u8 lit_2404[12];
#pragma pop
/* 80430FC8-80430FD8 05DCE8 000C+04 0/1 0/0 0/0 .bss @2405 */
#pragma push
#pragma force_active on
static u8 lit_2405[12 + 4 /* padding */];
#pragma pop
/* 80451188-8045118C 000688 0002+02 1/1 22/22 0/0 .sbss _0__7cSAngle */
extern u8 _0__7cSAngle[2 + 2 /* padding */];
u8 _0__7cSAngle[2 + 2 /* padding */];
/* 8045118C-80451190 00068C 0002+02 1/1 0/0 0/0 .sbss _1__7cSAngle */
static u8 _1__7cSAngle[2 + 2 /* padding */];
/* 80451190-80451194 000690 0002+02 1/1 6/6 0/0 .sbss _90__7cSAngle */
extern u8 _90__7cSAngle[2 + 2 /* padding */];
u8 _90__7cSAngle[2 + 2 /* padding */];
/* 80451194-80451198 000694 0002+02 1/1 2/2 0/0 .sbss _180__7cSAngle */
extern u8 _180__7cSAngle[2 + 2 /* padding */];
u8 _180__7cSAngle[2 + 2 /* padding */];
/* 80451198-804511A0 000698 0002+06 1/1 3/3 0/0 .sbss _270__7cSAngle */
extern u8 _270__7cSAngle[2 + 6 /* padding */];
u8 _270__7cSAngle[2 + 6 /* padding */];
/* 80271BD4-80271C8C 26C514 00B8+00 0/0 1/0 0/0 .text __sinit_c_angle_cpp */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void __sinit_c_angle_cpp() {
nofralloc
#include "asm/SSystem/SComponent/c_angle/__sinit_c_angle_cpp.s"
}
#pragma pop
#pragma push
#pragma force_active on
SECTION_CTORS void* const _ctors_80271BD4 = (void*)__sinit_c_angle_cpp;
#pragma pop

View File

@ -7,18 +7,12 @@
#include "dol2asm.h"
#include "dolphin/types.h"
//
// External References:
//
extern "C" void __ct__5csXyzFsss();
extern "C" void __dt__5csXyzFv();
extern "C" void __register_global_object();
//
// Declarations:
//
const csXyz csXyz::Zero = csXyz(0,0,0);
/* 802673F4-80267404 0010+00 s=4 e=19 z=119 None .text __ct__5csXyzFsss */
csXyz::csXyz(s16 param_0, s16 param_1, s16 param_2) {
mX = param_0;
@ -47,35 +41,3 @@ csXyz csXyz::operator-(csXyz& param_0) {
csXyz csXyz::operator*(f32 param_0) {
return csXyz(mX* param_0, mY * param_0, mZ * param_0);
}
#ifdef NON_MATCHING
csXyz Zero__5csXyz = csXyz(0,0,0);
#else
/* ############################################################################################## */
/* 80430DA8-80430DB8 05DAC8 000C+04 1/1 0/0 0/0 .bss @262 */
static u8 lit_262[12 + 4 /* padding */];
/* 80451160-80451164 000660 0004+00 1/1 13/13 3/3 .sbss Zero__5csXyz */
extern u8 Zero__5csXyz[4];
u8 Zero__5csXyz[4];
/* 80451164-80451168 000664 0004+00 1/1 6/13 0/2 .sbss None */
extern u8 data_80451164[4];
u8 data_80451164[4];
/* 8026758C-802675E4 261ECC 0058+00 0/0 1/0 0/0 .text __sinit_c_sxyz_cpp */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void __sinit_c_sxyz_cpp() {
nofralloc
#include "asm/SSystem/SComponent/c_sxyz/__sinit_c_sxyz_cpp.s"
}
#pragma pop
#pragma push
#pragma force_active on
SECTION_CTORS void* const _ctors_8026758C = (void*)__sinit_c_sxyz_cpp;
#pragma pop
#endif