Licar/frontend_sdl.c

127 lines
2.6 KiB
C

#include <stdio.h>
#include <SDL2/SDL.h>
#define LCR_SETTING_LOG_LEVEL 2
#include "game.h"
#include "debug.h"
SDL_Window *window;
SDL_Renderer *renderer;
SDL_Texture *texture;
SDL_Surface *screenSurface;
uint16_t screen[LCR_SETTING_RESOLUTION_X * LCR_SETTING_RESOLUTION_Y];
const uint8_t *keyboardState;
uint8_t LCR_keyPressed(uint8_t key)
{
switch (key)
{
case LCR_KEY_UP: return
keyboardState[SDL_SCANCODE_W] | keyboardState[SDL_SCANCODE_UP]; break;
case LCR_KEY_RIGHT: return
keyboardState[SDL_SCANCODE_D] | keyboardState[SDL_SCANCODE_RIGHT]; break;
case LCR_KEY_DOWN: return
keyboardState[SDL_SCANCODE_S] | keyboardState[SDL_SCANCODE_DOWN]; break;
case LCR_KEY_LEFT: return
keyboardState[SDL_SCANCODE_A] | keyboardState[SDL_SCANCODE_LEFT]; break;
case LCR_KEY_A: return
keyboardState[SDL_SCANCODE_K] | keyboardState[SDL_SCANCODE_RETURN]; break;
case LCR_KEY_B: return
keyboardState[SDL_SCANCODE_L] | keyboardState[SDL_SCANCODE_ESCAPE]; break;
default: break;
}
return 0;
}
void LCR_sleep(uint16_t timeMs)
{
usleep(timeMs * 1000);
}
void LCR_drawPixel(unsigned long index, uint16_t color)
{
screen[index] = color;
}
void LCR_log(const char *str)
{
printf("LOG: %s\n",str);
}
int main(int argc, char *argv[])
{
uint8_t running = 1;
LCR_gameInit();
SDL_Init(0);
window =
SDL_CreateWindow("Licar", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, LCR_SETTING_RESOLUTION_X, LCR_SETTING_RESOLUTION_Y,
SDL_WINDOW_SHOWN);
if (!window)
{
fputs("ERROR: couldn't create window",stderr);
return 1;
}
renderer = SDL_CreateRenderer(window,-1,0);
if (!renderer)
{
fputs("ERROR: couldn't create renderer",stderr);
return 1;
}
texture =
SDL_CreateTexture(renderer,SDL_PIXELFORMAT_RGB565,SDL_TEXTUREACCESS_STATIC,
LCR_SETTING_RESOLUTION_X,LCR_SETTING_RESOLUTION_Y);
if (!texture)
{
fputs("ERROR: couldn't create texture",stderr);
return 1;
}
screenSurface = SDL_GetWindowSurface(window);
SDL_ShowCursor(0);
SDL_PumpEvents();
keyboardState = SDL_GetKeyboardState(NULL);
while (running)
{
SDL_PumpEvents();
keyboardState = SDL_GetKeyboardState(NULL);
running = !keyboardState[SDL_SCANCODE_Q];
running &= LCR_gameStep(SDL_GetTicks());
SDL_UpdateTexture(texture,NULL,screen,
LCR_SETTING_RESOLUTION_X * sizeof(uint16_t));
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer,texture,NULL,NULL);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
LCR_gameEnd();
return 0;
}