76 lines
1.1 KiB
C++
76 lines
1.1 KiB
C++
|
|
#include "gxdevice.hpp"
|
|
#include "gxruntime.hpp"
|
|
#include "std.hpp"
|
|
|
|
gxDevice::gxDevice()
|
|
{
|
|
reset();
|
|
}
|
|
|
|
gxDevice::~gxDevice() {}
|
|
|
|
void gxDevice::reset()
|
|
{
|
|
memset(down_state, 0, sizeof(down_state));
|
|
memset(axis_states, 0, sizeof(axis_states));
|
|
memset(hit_count, 0, sizeof(hit_count));
|
|
put = get = 0;
|
|
}
|
|
|
|
void gxDevice::downEvent(int key)
|
|
{
|
|
down_state[key] = true;
|
|
++hit_count[key];
|
|
if (put - get < QUE_SIZE)
|
|
que[put++ & QUE_MASK] = key;
|
|
}
|
|
|
|
void gxDevice::upEvent(int key)
|
|
{
|
|
down_state[key] = false;
|
|
}
|
|
|
|
void gxDevice::setDownState(int key, bool down)
|
|
{
|
|
if (down == down_state[key])
|
|
return;
|
|
if (down)
|
|
downEvent(key);
|
|
else
|
|
upEvent(key);
|
|
}
|
|
|
|
void gxDevice::flush()
|
|
{
|
|
update();
|
|
memset(hit_count, 0, sizeof(hit_count));
|
|
put = get = 0;
|
|
}
|
|
|
|
bool gxDevice::keyDown(int key)
|
|
{
|
|
update();
|
|
return down_state[key];
|
|
}
|
|
|
|
int gxDevice::keyHit(int key)
|
|
{
|
|
update();
|
|
int n = hit_count[key];
|
|
hit_count[key] -= n;
|
|
return n;
|
|
}
|
|
|
|
int gxDevice::getKey()
|
|
{
|
|
update();
|
|
return get < put ? que[get++ & QUE_MASK] : 0;
|
|
}
|
|
|
|
float gxDevice::getAxisState(int axis)
|
|
{
|
|
update();
|
|
return axis_states[axis];
|
|
}
|