mirror of https://github.com/zeldaret/tp.git
112 lines
2.9 KiB
C++
112 lines
2.9 KiB
C++
#ifndef C_ANGLE_H
|
|
#define C_ANGLE_H
|
|
|
|
#include "SSystem/SComponent/c_xyz.h"
|
|
#include "dolphin/types.h"
|
|
|
|
class cSAngle {
|
|
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);
|
|
s16 Val() const { return this->mAngle; }
|
|
// void Set(s16 angle) { this->mAngle = angle; }
|
|
void Val(const cSAngle&);
|
|
void Val(s16);
|
|
void Val(float);
|
|
float Degree(void) const;
|
|
float Radian(void) const;
|
|
float Norm(void) const;
|
|
s16 Abs(void) const;
|
|
s16 Inv(void) const;
|
|
float Sin(void) const;
|
|
float Cos(void) const;
|
|
cSAngle operator-(void) const;
|
|
cSAngle operator+(const cSAngle&) const;
|
|
cSAngle operator-(const cSAngle&) const;
|
|
void operator+=(const cSAngle&);
|
|
void operator-=(const cSAngle&);
|
|
cSAngle operator+(short) const;
|
|
cSAngle operator-(short) const;
|
|
void operator+=(short);
|
|
cSAngle operator*(float) const;
|
|
void operator*=(float);
|
|
bool operator<(const cSAngle& other) const { return mAngle < other.mAngle; }
|
|
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 inline cSAngle getMaxNegative(void) { return cSAngle((s16)-0x8000); }
|
|
inline void mirrorAtMaxNeg(void) { *this = cSAngle((s16)-0x8000) - *this; }
|
|
};
|
|
|
|
cSAngle operator+(short, const cSAngle&);
|
|
cSAngle operator-(short, const cSAngle&);
|
|
|
|
class cDegree {
|
|
private:
|
|
float mDegree;
|
|
|
|
public:
|
|
cDegree(float);
|
|
cDegree& Formal(void);
|
|
void Val(float);
|
|
float Radian(void) const;
|
|
float Sin(void) const;
|
|
float Cos(void) const;
|
|
float Tan(void) const;
|
|
};
|
|
|
|
class cSPolar {
|
|
private:
|
|
float mRadial;
|
|
cSAngle mAngle1;
|
|
cSAngle mAngle2;
|
|
|
|
public:
|
|
cSPolar() {}
|
|
cSPolar(const cXyz&);
|
|
cSPolar& Formal(void);
|
|
void Val(float, short, short);
|
|
void Val(const cXyz&);
|
|
cXyz Xyz(void) const;
|
|
void Globe(class cSGlobe*) const;
|
|
};
|
|
|
|
class cSGlobe {
|
|
private:
|
|
float mRadius;
|
|
cSAngle mAzimuth; // original: V
|
|
cSAngle mInclination; // original: U
|
|
|
|
public:
|
|
cSGlobe(const cSGlobe&);
|
|
cSGlobe(float, short, short);
|
|
cSGlobe(float, const cSAngle&, const cSAngle&);
|
|
cSGlobe(const cXyz&);
|
|
~cSGlobe() {}
|
|
cSGlobe& Formal(void);
|
|
void Val(const cSGlobe&);
|
|
void Val(float, short, short);
|
|
void Val(float, const cSAngle&, const cSAngle&);
|
|
void Val(const cXyz&);
|
|
float R(void) const { return mRadius; }
|
|
const cSAngle& V(void) const { return mAzimuth; }
|
|
const cSAngle& U(void) const { return mInclination; }
|
|
cXyz Xyz(void) const;
|
|
void Polar(cSPolar*) const;
|
|
cXyz Norm(void) const;
|
|
cSGlobe& Invert(void);
|
|
};
|
|
|
|
#endif /* C_ANGLE_H */
|