54 lines
784 B
C
54 lines
784 B
C
|
/*
|
||
|
* events.c
|
||
|
*
|
||
|
* Event queue.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#include "rockmacros.h"
|
||
|
#include "input.h"
|
||
|
|
||
|
|
||
|
char keystates[MAX_KEYS];
|
||
|
int nkeysdown;
|
||
|
|
||
|
#define MAX_EVENTS 32
|
||
|
|
||
|
static event_t eventqueue[MAX_EVENTS];
|
||
|
static int eventhead, eventpos;
|
||
|
|
||
|
|
||
|
int ev_postevent(event_t *ev)
|
||
|
{
|
||
|
int nextevent;
|
||
|
nextevent = (eventhead+1)%MAX_EVENTS;
|
||
|
if (nextevent == eventpos)
|
||
|
return 0;
|
||
|
eventqueue[eventhead] = *ev;
|
||
|
eventhead = nextevent;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
int ev_getevent(event_t *ev)
|
||
|
{
|
||
|
if (eventpos == eventhead)
|
||
|
{
|
||
|
ev->type = EV_NONE;
|
||
|
return 0;
|
||
|
}
|
||
|
*ev = eventqueue[eventpos];
|
||
|
eventpos = (eventpos+1)%MAX_EVENTS;
|
||
|
if (ev->type == EV_PRESS)
|
||
|
{
|
||
|
keystates[ev->code] = 1;
|
||
|
nkeysdown++;
|
||
|
}
|
||
|
if (ev->type == EV_RELEASE)
|
||
|
{
|
||
|
keystates[ev->code] = 0;
|
||
|
nkeysdown--;
|
||
|
if (nkeysdown < 0) nkeysdown = 0;
|
||
|
}
|
||
|
return 1;
|
||
|
}
|