2024-10-22 00:52:51 +00:00
|
|
|
#include <audio.h>
|
2024-10-16 04:25:31 +00:00
|
|
|
#include <assets.h>
|
2024-10-20 04:08:37 +00:00
|
|
|
#include <controller.h>
|
2024-10-15 04:24:13 +00:00
|
|
|
#include <game.h>
|
2024-10-23 23:01:54 +00:00
|
|
|
#include <SDL2/SDL.h>
|
2024-10-19 22:04:15 +00:00
|
|
|
#include <stdbool.h>
|
2024-10-15 04:24:13 +00:00
|
|
|
#include <time.h>
|
|
|
|
|
2024-10-19 22:04:15 +00:00
|
|
|
typedef struct {
|
|
|
|
GraphicsContext *gfx;
|
2024-10-22 00:52:51 +00:00
|
|
|
AudioContext aud;
|
|
|
|
int16_t audioBuffer[834 * 2];
|
2024-10-19 22:04:15 +00:00
|
|
|
} GameState;
|
|
|
|
|
|
|
|
int onFrame(VB *sim) {
|
|
|
|
static uint8_t leftEye[384*224];
|
|
|
|
static uint8_t rightEye[384*224];
|
|
|
|
GameState *state;
|
2024-10-22 00:52:51 +00:00
|
|
|
void *samples;
|
|
|
|
uint32_t samplePairs;
|
2024-10-19 22:04:15 +00:00
|
|
|
|
|
|
|
state = vbGetUserData(sim);
|
|
|
|
|
|
|
|
vbGetPixels(sim, leftEye, 1, 384, rightEye, 1, 384);
|
2024-10-28 03:33:17 +00:00
|
|
|
gfxUpdateEyes(state->gfx, leftEye, rightEye);
|
2024-10-22 00:52:51 +00:00
|
|
|
|
|
|
|
samples = vbGetSamples(sim, NULL, &samplePairs);
|
|
|
|
audioUpdate(&state->aud, samples, samplePairs * 4);
|
|
|
|
vbSetSamples(sim, samples, 834);
|
|
|
|
gfxRender(state->gfx);
|
2024-10-19 22:04:15 +00:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
#define MAX_STEP_CLOCKS 20000000
|
2024-10-15 04:24:13 +00:00
|
|
|
|
2024-10-16 04:25:31 +00:00
|
|
|
int runGame(VB *sim, GraphicsContext *gfx) {
|
2024-10-15 04:24:13 +00:00
|
|
|
uint32_t clocks;
|
|
|
|
SDL_Event event;
|
2024-10-19 22:04:15 +00:00
|
|
|
GameState state;
|
2024-10-20 04:08:37 +00:00
|
|
|
ControllerState ctrl;
|
2024-10-19 22:04:15 +00:00
|
|
|
|
|
|
|
state.gfx = gfx;
|
2024-10-22 00:52:51 +00:00
|
|
|
audioInit(&state.aud);
|
|
|
|
vbSetSamples(sim, &state.audioBuffer, 834);
|
2024-10-19 22:04:15 +00:00
|
|
|
vbSetUserData(sim, &state);
|
|
|
|
vbSetFrameCallback(sim, &onFrame);
|
2024-10-15 04:24:13 +00:00
|
|
|
|
2024-10-20 04:08:37 +00:00
|
|
|
ctrlInit(&ctrl);
|
|
|
|
|
2024-10-28 03:33:17 +00:00
|
|
|
gfxUpdateEyes(gfx, LEFT_EYE_DEFAULT, RIGHT_EYE_DEFAULT);
|
2024-10-16 04:25:31 +00:00
|
|
|
|
2024-10-15 04:24:13 +00:00
|
|
|
while (1) {
|
|
|
|
clocks = MAX_STEP_CLOCKS;
|
|
|
|
vbEmulate(sim, &clocks);
|
2024-10-20 04:08:37 +00:00
|
|
|
|
2024-10-26 05:20:25 +00:00
|
|
|
gfxMenuInputBegin(gfx);
|
2024-10-15 04:24:13 +00:00
|
|
|
while (SDL_PollEvent(&event)) {
|
2024-10-23 23:01:54 +00:00
|
|
|
if (event.type == SDL_QUIT) {
|
2024-10-15 04:24:13 +00:00
|
|
|
return 0;
|
|
|
|
}
|
2024-10-23 23:01:54 +00:00
|
|
|
if (event.type == SDL_KEYDOWN) {
|
|
|
|
ctrlKeyDown(&ctrl, event.key.keysym.sym);
|
2024-10-20 04:08:37 +00:00
|
|
|
}
|
2024-10-23 23:01:54 +00:00
|
|
|
if (event.type == SDL_KEYUP) {
|
|
|
|
ctrlKeyUp(&ctrl, event.key.keysym.sym);
|
2024-10-20 04:08:37 +00:00
|
|
|
}
|
2024-10-26 05:20:25 +00:00
|
|
|
gfxMenuHandleEvent(gfx, &event);
|
2024-10-15 04:24:13 +00:00
|
|
|
}
|
2024-10-26 05:20:25 +00:00
|
|
|
gfxMenuInputEnd(gfx);
|
2024-10-20 04:08:37 +00:00
|
|
|
vbSetKeys(sim, ctrlKeys(&ctrl));
|
2024-10-15 04:24:13 +00:00
|
|
|
}
|
2024-10-16 04:25:31 +00:00
|
|
|
}
|