Cleanup input.h

This commit is contained in:
Alexander Batalov 2022-10-05 09:54:46 +03:00
parent 1c73fb7240
commit 32c7883f82
3 changed files with 59 additions and 81 deletions

View File

@ -5,6 +5,7 @@
#include "audio_engine.h"
#include "color.h"
#include "core.h"
#include "dinput.h"
#include "draw.h"
#include "kb.h"
#include "memory.h"
@ -15,24 +16,52 @@
namespace fallout {
typedef struct InputEvent {
// This is either logical key or input event id, which can be either
// character code pressed or some other numbers used throughout the
// game interface.
int logicalKey;
int mouseX;
int mouseY;
} InputEvent;
typedef struct RepeatInfo {
// Time when appropriate key was pressed down or -1 if it's up.
int tick;
int repeatCount;
} RepeatInfo;
typedef struct TickerListNode {
int flags;
TickerProc* proc;
struct TickerListNode* next;
} TickerListNode;
static int dequeueInputEvent();
static void pauseGame();
static int pauseHandlerDefaultImpl();
static void screenshotBlitter(unsigned char* src, int src_pitch, int a3, int x, int y, int width, int height, int dest_x, int dest_y);
static void buildNormalizedQwertyKeys();
static void _GNW95_process_key(KeyboardData* data);
static void idleImpl();
// 0x51E234
IdleFunc* _idle_func = NULL;
static IdleFunc* _idle_func = NULL;
// 0x51E238
FocusFunc* _focus_func = NULL;
static FocusFunc* _focus_func = NULL;
// 0x51E23C
int gKeyboardKeyRepeatRate = 80;
static int gKeyboardKeyRepeatRate = 80;
// 0x51E240
int gKeyboardKeyRepeatDelay = 500;
static int gKeyboardKeyRepeatDelay = 500;
// A map of SDL_SCANCODE_* constants normalized for QWERTY keyboard.
//
// 0x6ABC70
int gNormalizedQwertyKeys[SDL_NUM_SCANCODES];
static int gNormalizedQwertyKeys[SDL_NUM_SCANCODES];
// Ring buffer of input events.
//
@ -40,52 +69,52 @@ int gNormalizedQwertyKeys[SDL_NUM_SCANCODES];
// buffer is full it will not overwrite values until they are dequeued.
//
// 0x6ABD70
InputEvent gInputEventQueue[40];
static InputEvent gInputEventQueue[40];
// 0x6ABF50
STRUCT_6ABF50 _GNW95_key_time_stamps[SDL_NUM_SCANCODES];
static RepeatInfo _GNW95_key_time_stamps[SDL_NUM_SCANCODES];
// 0x6AC750
int _input_mx;
static int _input_mx;
// 0x6AC754
int _input_my;
static int _input_my;
// 0x6AC75C
bool gPaused;
static bool gPaused;
// 0x6AC760
int gScreenshotKeyCode;
static int gScreenshotKeyCode;
// 0x6AC764
int _using_msec_timer;
static int _using_msec_timer;
// 0x6AC768
int gPauseKeyCode;
static int gPauseKeyCode;
// 0x6AC76C
ScreenshotHandler* gScreenshotHandler;
static ScreenshotHandler* gScreenshotHandler;
// 0x6AC770
int gInputEventQueueReadIndex;
static int gInputEventQueueReadIndex;
// 0x6AC774
unsigned char* gScreenshotBuffer;
static unsigned char* gScreenshotBuffer;
// 0x6AC778
PauseHandler* gPauseHandler;
static PauseHandler* gPauseHandler;
// 0x6AC77C
int gInputEventQueueWriteIndex;
static int gInputEventQueueWriteIndex;
// 0x6AC780
bool gRunLoopDisabled;
static bool gRunLoopDisabled;
// 0x6AC784
TickerListNode* gTickerListHead;
static TickerListNode* gTickerListHead;
// 0x6AC788
unsigned int gTickerLastTimestamp;
static unsigned int gTickerLastTimestamp;
// 0x4C8A70
int coreInit(int a1)
@ -232,7 +261,7 @@ void enqueueInputEvent(int a1)
}
// 0x4C8C9C
int dequeueInputEvent()
static int dequeueInputEvent()
{
if (gInputEventQueueReadIndex == -1) {
return -1;
@ -341,7 +370,7 @@ void tickersDisable()
}
// 0x4C8DFC
void pauseGame()
static void pauseGame()
{
if (!gPaused) {
gPaused = true;
@ -357,7 +386,7 @@ void pauseGame()
}
// 0x4C8E38
int pauseHandlerDefaultImpl()
static int pauseHandlerDefaultImpl()
{
int windowWidth = fontGetStringWidth("Paused") + 32;
int windowHeight = 3 * fontGetLineHeight() + 16;
@ -439,7 +468,7 @@ void takeScreenshot()
}
// 0x4C8FF0
void screenshotBlitter(unsigned char* src, int srcPitch, int a3, int srcX, int srcY, int width, int height, int destX, int destY)
static void screenshotBlitter(unsigned char* src, int srcPitch, int a3, int srcX, int srcY, int width, int height, int destX, int destY)
{
int destWidth = _scr_size.right - _scr_size.left + 1;
blitBufferToBuffer(src + srcPitch * srcY + srcX, width, height, srcPitch, gScreenshotBuffer + destWidth * destY + destX, destWidth);
@ -702,7 +731,7 @@ IdleFunc* inputGetIdleFunc()
}
// 0x4C9490
void buildNormalizedQwertyKeys()
static void buildNormalizedQwertyKeys()
{
int* keys = gNormalizedQwertyKeys;
int k;
@ -1097,7 +1126,7 @@ void _GNW95_process_message()
int tick = _get_time();
for (int key = 0; key < SDL_NUM_SCANCODES; key++) {
STRUCT_6ABF50* ptr = &(_GNW95_key_time_stamps[key]);
RepeatInfo* ptr = &(_GNW95_key_time_stamps[key]);
if (ptr->tick != -1) {
int elapsedTime = ptr->tick > tick ? INT_MAX : tick - ptr->tick;
int delay = ptr->repeatCount == 0 ? gKeyboardKeyRepeatDelay : gKeyboardKeyRepeatRate;
@ -1124,7 +1153,7 @@ void _GNW95_clear_time_stamps()
}
// 0x4C9E14
void _GNW95_process_key(KeyboardData* data)
static void _GNW95_process_key(KeyboardData* data)
{
data->key = gNormalizedQwertyKeys[data->key];
@ -1134,7 +1163,7 @@ void _GNW95_process_key(KeyboardData* data)
vcrStop();
}
} else {
STRUCT_6ABF50* ptr = &(_GNW95_key_time_stamps[data->key]);
RepeatInfo* ptr = &(_GNW95_key_time_stamps[data->key]);
if (data->down == 1) {
ptr->tick = _get_time();
ptr->repeatCount = 0;

View File

@ -1,78 +1,28 @@
#ifndef FALLOUT_INPUT_H_
#define FALLOUT_INPUT_H_
#include "dinput.h"
namespace fallout {
typedef struct STRUCT_6ABF50 {
// Time when appropriate key was pressed down or -1 if it's up.
int tick;
int repeatCount;
} STRUCT_6ABF50;
typedef struct InputEvent {
// This is either logical key or input event id, which can be either
// character code pressed or some other numbers used throughout the
// game interface.
int logicalKey;
int mouseX;
int mouseY;
} InputEvent;
typedef void(IdleFunc)();
typedef void(FocusFunc)(bool focus);
typedef void(TickerProc)();
typedef struct TickerListNode {
int flags;
TickerProc* proc;
struct TickerListNode* next;
} TickerListNode;
typedef int(PauseHandler)();
typedef int(ScreenshotHandler)(int width, int height, unsigned char* buffer, unsigned char* palette);
extern IdleFunc* _idle_func;
extern FocusFunc* _focus_func;
extern int gKeyboardKeyRepeatRate;
extern int gKeyboardKeyRepeatDelay;
extern bool _keyboard_hooked;
extern int gNormalizedQwertyKeys[SDL_NUM_SCANCODES];
extern InputEvent gInputEventQueue[40];
extern STRUCT_6ABF50 _GNW95_key_time_stamps[SDL_NUM_SCANCODES];
extern int _input_mx;
extern int _input_my;
extern bool gPaused;
extern int gScreenshotKeyCode;
extern int _using_msec_timer;
extern int gPauseKeyCode;
extern ScreenshotHandler* gScreenshotHandler;
extern int gInputEventQueueReadIndex;
extern unsigned char* gScreenshotBuffer;
extern PauseHandler* gPauseHandler;
extern int gInputEventQueueWriteIndex;
extern bool gRunLoopDisabled;
extern TickerListNode* gTickerListHead;
extern unsigned int gTickerLastTimestamp;
int coreInit(int a1);
void coreExit();
int _get_input();
void _process_bk();
void enqueueInputEvent(int a1);
int dequeueInputEvent();
void inputEventQueueReset();
void tickersExecute();
void tickersAdd(TickerProc* fn);
void tickersRemove(TickerProc* fn);
void tickersEnable();
void tickersDisable();
void pauseGame();
int pauseHandlerDefaultImpl();
void pauseHandlerConfigure(int keyCode, PauseHandler* fn);
void takeScreenshot();
void screenshotBlitter(unsigned char* src, int src_pitch, int a3, int x, int y, int width, int height, int dest_x, int dest_y);
int screenshotHandlerDefaultImpl(int width, int height, unsigned char* data, unsigned char* palette);
void screenshotHandlerConfigure(int keyCode, ScreenshotHandler* handler);
unsigned int _get_time();
@ -89,11 +39,9 @@ void inputSetFocusFunc(FocusFunc* func);
FocusFunc* inputGetFocusFunc();
void inputSetIdleFunc(IdleFunc* func);
IdleFunc* inputGetIdleFunc();
void buildNormalizedQwertyKeys();
int _GNW95_input_init();
void _GNW95_process_message();
void _GNW95_clear_time_stamps();
void _GNW95_process_key(KeyboardData* data);
void _GNW95_lost_focus();
} // namespace fallout

View File

@ -9,6 +9,7 @@
#include "color.h"
#include "core.h"
#include "debug.h"
#include "dinput.h"
#include "draw.h"
#include "input.h"
#include "memory.h"