prime/include/Kyoto/Animation/CCharAnimTime.hpp

81 lines
2.3 KiB
C++

#ifndef _CCHARANIMTIME
#define _CCHARANIMTIME
#include "types.h"
class COutputStream;
class CInputStream;
class CCharAnimTime {
public:
enum EType {
kT_NonZero,
kT_ZeroIncreasing,
kT_ZeroSteady,
kT_ZeroDecreasing,
kT_Infinity,
};
float GetSeconds() const { return x0_time; }
explicit CCharAnimTime(CInputStream& in);
explicit CCharAnimTime(float time);
explicit CCharAnimTime(const EType& type, const float& time) : x0_time(time), x4_type(type) {}
CCharAnimTime(const CCharAnimTime& other) : x0_time(other.x0_time), x4_type(other.x4_type) {}
bool operator>(const CCharAnimTime& other) const;
bool operator==(const CCharAnimTime& other) const;
bool operator!=(const CCharAnimTime& other) const;
bool operator<(const CCharAnimTime& other) const;
float operator/(const CCharAnimTime& other) const;
CCharAnimTime operator*(const float& other) const;
CCharAnimTime operator-(const CCharAnimTime& other) const;
CCharAnimTime operator+(const CCharAnimTime& other) const;
const CCharAnimTime& operator+=(const CCharAnimTime& other);
const CCharAnimTime& operator-=(const CCharAnimTime& other);
bool operator<=(const CCharAnimTime& other) const;
bool operator>=(const CCharAnimTime& other) const;
bool GreaterThanZero() const;
bool EqualsZero() const;
void PutTo(COutputStream& out) const;
static CCharAnimTime Infinity() { return CCharAnimTime(kT_Infinity, 1.0f); }
static CCharAnimTime ZeroFlat() { return CCharAnimTime(kT_ZeroSteady, 0.f); }
static CCharAnimTime ZeroPlus() { return CCharAnimTime(kT_ZeroIncreasing, 0.f); }
static CCharAnimTime ZeroMinus() { return CCharAnimTime(kT_ZeroDecreasing, 0.f); }
int ZeroOrdering() const {
if (x4_type == kT_ZeroDecreasing) {
return -1;
}
if (x4_type == kT_ZeroSteady) {
return 0;
}
return 1;
}
static EType ZeroTypeFromOrdering(int ordering) {
if (ordering == -1) {
return kT_ZeroDecreasing;
}
if (ordering == 0) {
return kT_ZeroSteady;
}
return kT_ZeroIncreasing;
}
CCharAnimTime ZeroSignScale(float other) const {
if (other > 0.f) {
return *this;
} else if (other < 0.f) {
return CCharAnimTime(ZeroTypeFromOrdering(-ZeroOrdering()), 0.f);
}
return ZeroFlat();
}
private:
float x0_time;
EType x4_type;
};
CHECK_SIZEOF(CCharAnimTime, 0x8)
#endif // _CCHARANIMTIME