Make TTY and Raylib identical
This commit is contained in:
@@ -7,19 +7,109 @@
|
||||
|
||||
#include "platform/platform.h"
|
||||
#include "platform/term/term.h"
|
||||
#include "platform/tty/platformtty.h"
|
||||
#include "input.h"
|
||||
#include <time.h>
|
||||
|
||||
void platformInit() {
|
||||
termInit();
|
||||
typedef struct ttyinputmap_s {
|
||||
int key;
|
||||
uint8_t action;
|
||||
} ttyinputmap_t;
|
||||
|
||||
static const ttyinputmap_t TERM_INPUT_MAP[] = {
|
||||
{ KEY_UP, INPUT_ACTION_UP },
|
||||
{ 'w', INPUT_ACTION_UP },
|
||||
{ KEY_DOWN, INPUT_ACTION_DOWN },
|
||||
{ 's', INPUT_ACTION_DOWN },
|
||||
{ KEY_LEFT, INPUT_ACTION_LEFT },
|
||||
{ 'a', INPUT_ACTION_LEFT },
|
||||
{ KEY_RIGHT, INPUT_ACTION_RIGHT },
|
||||
{ 'd', INPUT_ACTION_RIGHT },
|
||||
{ 'j', INPUT_ACTION_A },
|
||||
{ 'e', INPUT_ACTION_A },
|
||||
{ 'k', INPUT_ACTION_B },
|
||||
{ 'q', INPUT_ACTION_B },
|
||||
{ KEY_ENTER, INPUT_ACTION_START },
|
||||
{ ' ', INPUT_ACTION_SELECT },
|
||||
{ -1, 0 }
|
||||
};
|
||||
|
||||
platformtty_t PLATFORM_TTY;
|
||||
|
||||
uint8_t platformInit() {
|
||||
memset(&PLATFORM_TTY, 0, sizeof(platformtty_t));
|
||||
|
||||
initscr();
|
||||
cbreak();
|
||||
noecho();
|
||||
keypad(stdscr, TRUE);
|
||||
nodelay(stdscr, TRUE);
|
||||
curs_set(0);
|
||||
start_color();
|
||||
use_default_colors();
|
||||
|
||||
// Color Pairs
|
||||
init_pair(TERM_COLOR_BLACK, COLOR_BLACK, -1);
|
||||
init_pair(TERM_COLOR_RED, COLOR_RED, -1);
|
||||
init_pair(TERM_COLOR_GREEN, COLOR_GREEN, -1);
|
||||
init_pair(TERM_COLOR_YELLOW, COLOR_YELLOW, -1);
|
||||
init_pair(TERM_COLOR_BLUE, COLOR_BLUE, -1);
|
||||
init_pair(TERM_COLOR_MAGENTA, COLOR_MAGENTA, -1);
|
||||
init_pair(TERM_COLOR_CYAN, COLOR_CYAN, -1);
|
||||
init_pair(TERM_COLOR_WHITE, COLOR_WHITE, -1);
|
||||
|
||||
|
||||
// Set in-game time to real world time.
|
||||
time_t now = time(NULL);
|
||||
struct tm *t = localtime(&now);
|
||||
|
||||
GAME.time.days = t->tm_wday;
|
||||
GAME.time.hours = t->tm_hour;
|
||||
GAME.time.minutes = t->tm_min;
|
||||
GAME.time.seconds = t->tm_sec;
|
||||
|
||||
return PLATFORM_OK;
|
||||
}
|
||||
|
||||
void platformUpdate() {
|
||||
termUpdate();
|
||||
uint8_t platformUpdate() {
|
||||
PLATFORM_TTY.inputPrevious = PLATFORM_TTY.inputCurrent;
|
||||
PLATFORM_TTY.inputCurrent = 0;
|
||||
|
||||
int ch = getch();
|
||||
if(ch == ERR) {
|
||||
PLATFORM_TTY.lastch = ERR;
|
||||
return PLATFORM_OK;
|
||||
}
|
||||
|
||||
if(ch == PLATFORM_TTY.lastch) {
|
||||
return PLATFORM_OK;
|
||||
}
|
||||
PLATFORM_TTY.lastch = ch;
|
||||
|
||||
const ttyinputmap_t *map = TERM_INPUT_MAP;
|
||||
while(map->key != -1) {
|
||||
if(map->key == ch) {
|
||||
PLATFORM_TTY.inputCurrent |= map->action;
|
||||
break;
|
||||
}
|
||||
map++;
|
||||
}
|
||||
|
||||
return PLATFORM_OK;
|
||||
}
|
||||
|
||||
void platformDraw() {
|
||||
clear();
|
||||
|
||||
termDraw();
|
||||
|
||||
attroff(COLOR_PAIR(1));
|
||||
refresh();
|
||||
|
||||
// 16ms delay (60FPS)
|
||||
napms(16);
|
||||
}
|
||||
|
||||
void platformDispose() {
|
||||
termDispose();
|
||||
endwin();
|
||||
}
|
||||
Reference in New Issue
Block a user