mirror of
https://github.com/blawar/ooot.git
synced 2024-06-30 16:29:55 +00:00
framete class tweaks
This commit is contained in:
parent
14faa84c73
commit
1640ea6068
|
@ -76,9 +76,23 @@ u64 frameRateDivisor();
|
|||
class Timer
|
||||
{
|
||||
public:
|
||||
enum class Type
|
||||
{
|
||||
U8 = 0xFF,
|
||||
S8 = 0X7F,
|
||||
U16 = 0xFFFF,
|
||||
S16 = 0x8000
|
||||
};
|
||||
|
||||
Timer();
|
||||
Timer(const Timer& t);
|
||||
Timer(float n);
|
||||
Timer(float n, s64 min, s64 max);
|
||||
Timer(s64 min, s64 max) : m_counter(0), m_counterInt(0), m_min(min), m_max(max)
|
||||
{
|
||||
}
|
||||
|
||||
float frac() const;
|
||||
|
||||
static Timer invalid();
|
||||
|
||||
|
@ -121,19 +135,55 @@ class Timer
|
|||
return (u16)m_counter;
|
||||
}
|
||||
|
||||
void setRange(s64 min, s64 max);
|
||||
|
||||
constexpr static float INVALID = -FRAMERATE_MAX / 20.0f;
|
||||
|
||||
protected:
|
||||
void update();
|
||||
float m_counter;
|
||||
s64 m_counterInt;
|
||||
s64 m_min;
|
||||
s64 m_max;
|
||||
};
|
||||
|
||||
typedef Timer Counter;
|
||||
class TimerU8 : public Timer
|
||||
{
|
||||
public:
|
||||
TimerU8() : Timer(-0x80, 0x7F)
|
||||
{
|
||||
}
|
||||
|
||||
TimerU8(const Timer& t) : Timer(t)
|
||||
{
|
||||
}
|
||||
|
||||
TimerU8(float n) : Timer(n, -0x80, 0x7F)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class TimerU16 : public Timer
|
||||
{
|
||||
public:
|
||||
TimerU16() : Timer(-0x8000, 0x7FFF)
|
||||
{
|
||||
}
|
||||
|
||||
TimerU16(const Timer& t) : Timer(t)
|
||||
{
|
||||
}
|
||||
|
||||
TimerU16(float n) : Timer(n, -0x8000, 0x7FFF)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
typedef TimerU16 Counter;
|
||||
typedef Timer Rotation;
|
||||
typedef Timer Position;
|
||||
typedef Timer TimerU8;
|
||||
typedef Timer TimerU16;
|
||||
//typedef Timer TimerU8;
|
||||
//typedef Timer TimerU16;
|
||||
typedef Timer TimerS16;
|
||||
typedef Timer TimerS32;
|
||||
typedef Timer TimerU32;
|
||||
|
|
|
@ -79,7 +79,7 @@ u64 frameRateDivisor()
|
|||
return R_UPDATE_RATE;
|
||||
}
|
||||
|
||||
Timer::Timer() : m_counter(0), m_counterInt(0)
|
||||
Timer::Timer() : m_counter(0), m_counterInt(0), m_min(-0x8000), m_max(0x7FFF)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -87,27 +87,38 @@ Timer::Timer(const Timer& t)
|
|||
{
|
||||
m_counter = t.m_counter;
|
||||
m_counterInt = t.m_counterInt;
|
||||
m_min = t.m_min;
|
||||
m_max = t.m_max;
|
||||
}
|
||||
|
||||
Timer::Timer(float n) : m_counter(n), m_counterInt(n * COUNTER_SCALER)
|
||||
|
||||
Timer::Timer(float n) : m_counter(n), m_counterInt(n * COUNTER_SCALER), m_min(-0x8000), m_max(0x7FFF)
|
||||
{
|
||||
if(n == 0xFFFF)
|
||||
{
|
||||
bool error = true;
|
||||
}
|
||||
/*if(m_counterInt == 0)
|
||||
}
|
||||
|
||||
Timer::Timer(float n, s64 min, s64 max) : m_counter(n), m_counterInt(n * COUNTER_SCALER), m_min(min), m_max(max)
|
||||
{
|
||||
if(n == 0xFFFF)
|
||||
{
|
||||
if(n < 1.0f && n > 0.0f)
|
||||
{
|
||||
m_counterInt = 1;
|
||||
update();
|
||||
bool error = true;
|
||||
}
|
||||
else if(n > -1.0f && n < 0.0f)
|
||||
{
|
||||
m_counterInt = -1;
|
||||
update();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
void Timer::setRange(s64 min, s64 max)
|
||||
{
|
||||
m_min = min;
|
||||
m_max = max;
|
||||
}
|
||||
|
||||
float Timer::frac() const
|
||||
{
|
||||
float integer;
|
||||
return modf(m_counter, &integer);
|
||||
//return (m_counterInt % (s64)FRAMERATE_SCALER_INV) / (float)FRAMERATE_SCALER_INV;
|
||||
}
|
||||
|
||||
Timer Timer::invalid()
|
||||
|
@ -119,6 +130,16 @@ Timer Timer::invalid()
|
|||
|
||||
void Timer::update()
|
||||
{
|
||||
while(m_counterInt > m_max * COUNTER_SCALER)
|
||||
{
|
||||
m_counterInt = (m_min * COUNTER_SCALER) + (m_counterInt - (m_max * COUNTER_SCALER + 1));
|
||||
}
|
||||
|
||||
while(m_counterInt < m_min * COUNTER_SCALER)
|
||||
{
|
||||
m_counterInt = (m_max * COUNTER_SCALER) + (m_counterInt - (m_min * COUNTER_SCALER - 1));
|
||||
}
|
||||
|
||||
m_counter = (float)m_counterInt * COUNTER_STEP;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user