Add CSFML
This commit is contained in:
parent
5a2f7df84c
commit
bf2cd38337
3 changed files with 242 additions and 4 deletions
5
data
5
data
|
@ -137,3 +137,8 @@ details
|
||||||
#RLCtiny1 00'10'659;00LCtiny1;ae1ab677 0000323:0011:0389:0021:00b9:0041:0039:0031:0149:0091:0183:0031:00d3:00c1:0065:0047:0033:0051:00b3:0181:0069:0011:0175:0041:0203:0061:00a9:0041:0093:0061
|
#RLCtiny1 00'10'659;00LCtiny1;ae1ab677 0000323:0011:0389:0021:00b9:0041:0039:0031:0149:0091:0183:0031:00d3:00c1:0065:0047:0033:0051:00b3:0181:0069:0011:0175:0041:0203:0061:00a9:0041:0093:0061
|
||||||
#BLCtiny1;
|
#BLCtiny1;
|
||||||
#RLCtiny1 00'10'098;00LCtiny1;ae1ab677 0000306:0011:00e9:0041:0203:0031:0099:0031:00a9:0021:0149:00d1:0103:0061:00d3:0031:0083:00c5:0081:0023:01f1:00a9:0061:00c5:0041:01b9:0031:0133:0041:0089
|
#RLCtiny1 00'10'098;00LCtiny1;ae1ab677 0000306:0011:00e9:0041:0203:0031:0099:0031:00a9:0021:0149:00d1:0103:0061:00d3:0031:0083:00c5:0081:0023:01f1:00a9:0061:00c5:0041:01b9:0031:0133:0041:0089
|
||||||
|
#RLCtiny3 00'26'136;00LCtiny3;df0bd8ce 0000792:0011:0143:0041:00b3:0051:0049:00a1:0053:0051:00d9:0041:0159:0031:0469:0051:0043:0061:0059:0061:0069:0241:0233:0081:0073:0031:0069:0041:00f9:0041:0193:0061:0093:0051:0123:00a1:0063:0091:00c3:00f1:00a3:0041:0179:00b1:0063:00f1:0303:0041:00a9:0061:0049:0061:0089:01f1:0063:0071:0299:0031:0063:0031:0099:0041:00d3:00d1:01d3:0041:0139
|
||||||
|
#BLCtiny3;
|
||||||
|
#RLCtiny5 00'10'362;00LCtiny5;5c14d8b6 0000314:00a1:0179:00a1:0089:0071:0093:0031:00c3:0041:0059:0031:0023:0161:0033:0081:0083:0051:0049:0131:0053:0091:0093:0041:00a3:00d1:0063:0051:0093:0041:0293:00a1:0149:0031
|
||||||
|
#BLCtiny5;
|
||||||
|
#RLCtiny5 00'09'240;00LCtiny5;5c14d8b6 0000280:0011:00b3:0051:0049:0061:0099:0091:0059:0041:0059:0041:0079:0021:0093:0061:0059:0033:0181:0119:0051:0079:0051:0033:0071:00b3:0091:0033:0071:0043:0031:0033:0051:03d3:0031:0079
|
||||||
|
|
227
frontend_csfml.c
Normal file
227
frontend_csfml.c
Normal file
|
@ -0,0 +1,227 @@
|
||||||
|
/**
|
||||||
|
CSFML frontend for Licar.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <SFML/Audio.h>
|
||||||
|
#include <SFML/Graphics.h>
|
||||||
|
#include <SFML/System.h>
|
||||||
|
#include <SFML/Audio/Types.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define LCR_SETTING_LOG_LEVEL 2
|
||||||
|
#define DATA_FILE_NAME "data"
|
||||||
|
|
||||||
|
//#define LCR_LOADING_COMMAND SDL_PumpEvents();
|
||||||
|
|
||||||
|
// #define LCR_FPS_GET_MS SDL_GetTicks() // uncomment for FPS measuring
|
||||||
|
|
||||||
|
#include "game.h"
|
||||||
|
|
||||||
|
#define WINDOW_SIZE (LCR_SETTING_RESOLUTION_X * LCR_SETTING_RESOLUTION_Y)
|
||||||
|
|
||||||
|
sfUint32 windowPixels[WINDOW_SIZE * 2];
|
||||||
|
uint8_t fullscreen = 1;
|
||||||
|
FILE *musicFile = 0;
|
||||||
|
FILE *dataFile = 0;
|
||||||
|
sfClock *clock;
|
||||||
|
sfRenderWindow* window;
|
||||||
|
sfSoundStream *sound;
|
||||||
|
|
||||||
|
#define AUDIO_BUFFER_SIZE 256
|
||||||
|
|
||||||
|
int16_t audioBuffer[AUDIO_BUFFER_SIZE];
|
||||||
|
uint8_t musicBuffer[AUDIO_BUFFER_SIZE];
|
||||||
|
|
||||||
|
char LCR_getNextDataFileChar(void)
|
||||||
|
{
|
||||||
|
if (!dataFile)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
int c = fgetc(dataFile);
|
||||||
|
|
||||||
|
if (c == EOF)
|
||||||
|
{
|
||||||
|
rewind(dataFile);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LCR_appendDataStr(const char *str)
|
||||||
|
{
|
||||||
|
fclose(dataFile);
|
||||||
|
|
||||||
|
dataFile = fopen(DATA_FILE_NAME,"a");
|
||||||
|
|
||||||
|
if (dataFile)
|
||||||
|
{
|
||||||
|
fprintf(dataFile,"%s",str);
|
||||||
|
fclose(dataFile);
|
||||||
|
dataFile = fopen(DATA_FILE_NAME,"r");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t LCR_keyPressed(uint8_t key)
|
||||||
|
{
|
||||||
|
#define k(x) sfKeyboard_isKeyPressed(sfKey ## x)
|
||||||
|
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
case LCR_KEY_UP: return k(W) || k(Up) || k(Num8); break;
|
||||||
|
case LCR_KEY_RIGHT: return k(E) || k(Right) || k(Num6); break;
|
||||||
|
case LCR_KEY_DOWN: return k(S) || k(Down) || k(Num5) || k(Num2); break;
|
||||||
|
case LCR_KEY_LEFT: return k(Q) || k(Left) || k(Num4); break;
|
||||||
|
case LCR_KEY_A: return k(K) || k(Return); break;
|
||||||
|
case LCR_KEY_B: return k(L) || k(Escape); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LCR_sleep(uint16_t timeMs)
|
||||||
|
{
|
||||||
|
sfTime t;
|
||||||
|
t.microseconds = timeMs * 1000;
|
||||||
|
sfSleep(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LCR_drawPixel(unsigned long index, uint16_t color)
|
||||||
|
{
|
||||||
|
windowPixels[index] = 0xff000000 | ((color & 0x07e0) << 5) |
|
||||||
|
(((color << 19) | (color >> 8)) & 0x00f800f8) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LCR_log(const char *str)
|
||||||
|
{
|
||||||
|
printf("LOG: %s\n",str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printHelp(void)
|
||||||
|
{
|
||||||
|
printf(
|
||||||
|
"Licar, 3D racing game, v. " LCR_VERSION ", CSFML frontend, args:\n"
|
||||||
|
" -h print help and quit\n"
|
||||||
|
" -wN window (N = 1) or fullscreen (N = 0)\n"
|
||||||
|
LCR_ARG_HELP_STR);
|
||||||
|
}
|
||||||
|
|
||||||
|
sfBool soundFill(sfSoundStreamChunk *data, void *userdata)
|
||||||
|
{
|
||||||
|
if (musicFile && LCR_gameMusicOn())
|
||||||
|
{
|
||||||
|
if (!fread(musicBuffer,1,AUDIO_BUFFER_SIZE,musicFile))
|
||||||
|
rewind(musicFile);
|
||||||
|
|
||||||
|
for (int i = 0; i < AUDIO_BUFFER_SIZE; ++i)
|
||||||
|
audioBuffer[i] = musicBuffer[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
for (int i = 0; i < AUDIO_BUFFER_SIZE; ++i)
|
||||||
|
audioBuffer[i] = 127;
|
||||||
|
|
||||||
|
for (int i = 0; i < AUDIO_BUFFER_SIZE; ++i)
|
||||||
|
audioBuffer[i] =
|
||||||
|
(audioBuffer[i] + LCR_gameGetNextAudioSample() - 255) * 64;
|
||||||
|
|
||||||
|
data->samples = audioBuffer;
|
||||||
|
data->sampleCount = AUDIO_BUFFER_SIZE;
|
||||||
|
|
||||||
|
return sfTrue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void soundSeek(sfTime t, void *userData)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
for (int i = 0; i < argc; ++i)
|
||||||
|
if (argv[i][0] == '-')
|
||||||
|
switch (argv[i][1])
|
||||||
|
{
|
||||||
|
case 'h': printHelp(); return 0; break;
|
||||||
|
case 'w': fullscreen = argv[i][2] == '0'; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
dataFile = fopen(DATA_FILE_NAME,"r");
|
||||||
|
|
||||||
|
if (!dataFile)
|
||||||
|
LCR_log("couldn't open data file");
|
||||||
|
|
||||||
|
musicFile = fopen("assets/music","rb");
|
||||||
|
|
||||||
|
if (!musicFile)
|
||||||
|
fputs("could not open music file",stderr);
|
||||||
|
|
||||||
|
LCR_log("initializing game");
|
||||||
|
LCR_gameInit(argc,(const char **) argv);
|
||||||
|
|
||||||
|
LCR_log("initializing SFML");
|
||||||
|
sfVideoMode mode = {LCR_SETTING_RESOLUTION_X,LCR_SETTING_RESOLUTION_Y,32};
|
||||||
|
sfEvent event;
|
||||||
|
clock = sfClock_create();
|
||||||
|
sfClock_restart(clock);
|
||||||
|
|
||||||
|
LCR_log("initializing audio");
|
||||||
|
|
||||||
|
for (int i = 0; i < AUDIO_BUFFER_SIZE; ++i)
|
||||||
|
audioBuffer[i] = 0;
|
||||||
|
|
||||||
|
sound = sfSoundStream_create(soundFill,soundSeek,1,8000,0);
|
||||||
|
|
||||||
|
sfTexture* windowTexture =
|
||||||
|
sfTexture_create(LCR_SETTING_RESOLUTION_X,LCR_SETTING_RESOLUTION_Y);
|
||||||
|
|
||||||
|
sfTexture_setSmooth(windowTexture,sfTrue);
|
||||||
|
|
||||||
|
sfSprite* windowSprite = sfSprite_create();
|
||||||
|
|
||||||
|
window = sfRenderWindow_create(mode,"Licar",
|
||||||
|
fullscreen ? sfFullscreen : (sfResize | sfClose ),NULL);
|
||||||
|
|
||||||
|
sfSprite_setTexture(windowSprite,windowTexture,sfTrue);
|
||||||
|
sfWindow_setVerticalSyncEnabled((sfWindow *) window,sfFalse);
|
||||||
|
|
||||||
|
sfSoundStream_play(sound);
|
||||||
|
|
||||||
|
puts("starting");
|
||||||
|
|
||||||
|
while (sfRenderWindow_isOpen(window))
|
||||||
|
{
|
||||||
|
while (sfRenderWindow_pollEvent(window,&event))
|
||||||
|
if (event.type == sfEvtClosed)
|
||||||
|
sfRenderWindow_close(window);
|
||||||
|
|
||||||
|
if (!LCR_gameStep(sfClock_getElapsedTime(clock).microseconds / 1000))
|
||||||
|
break;
|
||||||
|
|
||||||
|
sfTexture_updateFromPixels(windowTexture,(const sfUint8 *) windowPixels,
|
||||||
|
LCR_SETTING_RESOLUTION_X,LCR_SETTING_RESOLUTION_Y,0,0);
|
||||||
|
sfRenderWindow_clear(window,sfBlack);
|
||||||
|
sfRenderWindow_drawSprite(window,windowSprite,NULL);
|
||||||
|
sfRenderWindow_display(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
LCR_log("ending");
|
||||||
|
|
||||||
|
if (musicFile)
|
||||||
|
fclose(musicFile);
|
||||||
|
|
||||||
|
if (dataFile)
|
||||||
|
fclose(dataFile);
|
||||||
|
|
||||||
|
sfSoundStream_stop(sound);
|
||||||
|
sfSoundStream_destroy(sound);
|
||||||
|
sfSprite_destroy(windowSprite);
|
||||||
|
sfTexture_destroy(windowTexture);
|
||||||
|
sfRenderWindow_destroy(window);
|
||||||
|
sfClock_destroy(clock);
|
||||||
|
|
||||||
|
LCR_gameEnd();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
14
make.sh
14
make.sh
|
@ -31,18 +31,24 @@ fi
|
||||||
|
|
||||||
if [ $PLATFORM = "sdl" ]; then
|
if [ $PLATFORM = "sdl" ]; then
|
||||||
# PC SDL build, requires:
|
# PC SDL build, requires:
|
||||||
# - g++
|
|
||||||
# - SDL2 (dev) package
|
# - SDL2 (dev) package
|
||||||
|
|
||||||
SDL_FLAGS=`sdl2-config --cflags --libs`
|
SDL_FLAGS=`sdl2-config --cflags --libs`
|
||||||
${COMPILER} ${C_FLAGS} frontend_sdl.c -I/usr/local/include ${SDL_FLAGS}
|
COMMAND="${COMPILER} ${C_FLAGS} frontend_sdl.c -I/usr/local/include ${SDL_FLAGS}"
|
||||||
|
elif [ $PLATFORM = "csfml" ]; then
|
||||||
|
# PC CMFML build, requires:
|
||||||
|
# - csfml (dev) package
|
||||||
|
|
||||||
|
COMMAND="${COMPILER} ${C_FLAGS} frontend_csfml.c -lcsfml-graphics -lcsfml-window -lcsfml-system -lcsfml-audio"
|
||||||
elif [ $PLATFORM = "emscripten" ]; then
|
elif [ $PLATFORM = "emscripten" ]; then
|
||||||
# emscripten (browser Javascript) build, requires:
|
# emscripten (browser Javascript) build, requires:
|
||||||
# - emscripten
|
# - emscripten
|
||||||
# COMMAND="../emsdk/upstream/emscripten/emcc ./frontend_sdl.c -s USE_SDL=2 -O3 -lopenal --shell-file HTMLshell.html -o licar.html -s EXPORTED_FUNCTIONS=\'[\"_main\",\"_webButton\"]\' -s EXPORTED_RUNTIME_METHODS=\'[\"ccall\",\"cwrap\"]\'"
|
COMMAND="../emsdk/upstream/emscripten/emcc ./frontend_sdl.c -s USE_SDL=2 -O3 -lopenal --shell-file HTMLshell.html -o licar.html -s EXPORTED_FUNCTIONS='[\"_main\",\"_webButton\"]' -s EXPORTED_RUNTIME_METHODS='[\"ccall\",\"cwrap\"]'"
|
||||||
../emsdk/upstream/emscripten/emcc ./frontend_sdl.c -s USE_SDL=2 -O3 -lopenal --shell-file HTMLshell.html -o licar.html -s EXPORTED_FUNCTIONS='["_main","_webButton"]' -s EXPORTED_RUNTIME_METHODS='["ccall","cwrap"]'
|
|
||||||
else
|
else
|
||||||
echo "unknown frontend"
|
echo "unknown frontend"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo ${COMMAND}
|
||||||
|
eval ${COMMAND}
|
||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
Loading…
Reference in a new issue