|
- #include "IZ_app.h"
-
- IZ_ProcedureResult IZ_AppInitialize(IZ_App* app) {
- u32 flags = (
- SDL_INIT_VIDEO
- | SDL_INIT_GAMECONTROLLER
- | SDL_INIT_EVENTS
- );
-
- if (SDL_Init(flags) < 0) {
- // TODO fix logging
- fprintf_s(stderr, "SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
- return 1;
- }
-
- char config_path[128];
- IZ_ConfigGetPath(config_path, 128);
- if (IZ_VideoInitialize(config_path, &app->video_state)) {
- return 2;
- }
-
- if (IZ_InputInitialize(config_path, &app->input_state)) {
- return 3;
- }
-
- IZ_PoolInitialize(&app->pool, POOL_MAX_SIZE);
-
- // TODO put into its timer module
- app->ticks = 0;
- return 0;
- }
-
- void IZ_AppTeardown(IZ_App* app) {
- IZ_PoolTeardown(&app->pool);
- IZ_InputTeardown(&app->input_state);
- IZ_VideoTeardown(&app->video_state);
- SDL_Quit();
- }
-
- IZ_ProcedureResult IZ_AppHandleSDLEvents(IZ_App* app) {
- while (SDL_PollEvent(&app->input_state.sdl_event) != 0) {
- if (app->input_state.sdl_event.type == SDL_QUIT) {
- return 1;
- }
-
- IZ_InputHandleSDLEvents(&app->input_state);
- }
- return 0;
- }
-
- void IZ_AppHandlePortMIDIEvents(IZ_App* app) {
- u8 player_index;
- i32* midi_events_count;
- u32 midi_event_index;
- for (player_index = 0; player_index < PLAYERS; player_index += 1) {
- midi_events_count = &app->input_state.midi_input_state[player_index].midi_events_count;
- *midi_events_count = Pm_Read(
- app->input_state.midi_input_state[player_index].stream,
- app->input_state.midi_input_state[player_index].event_buffer,
- 1024
- );
-
- if (*midi_events_count < 1) {
- continue;
- }
-
- for (midi_event_index = 0; midi_event_index < *midi_events_count; midi_event_index += 1) {
- IZ_InputHandlePortMIDIEvents(
- app->input_state.midi_input_state[player_index].event_buffer[midi_event_index],
- &app->input_state
- );
- }
- }
- }
-
- IZ_ProcedureResult IZ_AppHandleEvents(IZ_App* app) {
- if (IZ_AppHandleSDLEvents(app)) {
- return 1;
- }
- IZ_AppHandlePortMIDIEvents(app);
- return 0;
- }
-
- IZ_ProcedureResult IZ_AppRun(IZ_App* app, u8 arg_count, char* arg_values[]) {
- printf_s("Args (%u):\n", arg_count);
- u8 arg_index;
- for (arg_index = 0; arg_index < arg_count; arg_index += 1) {
- printf_s(" %s\n", arg_values[arg_index]);
- }
-
-
- IZ_ProcedureResult init_result = IZ_AppInitialize(app);
- if (init_result) {
- return init_result;
- }
-
- while (true) {
- app->ticks = SDL_GetTicks64();
-
- // TODO do audio processing
- // TODO do networking?
-
- if (IZ_AppHandleEvents(app)) {
- break;
- }
-
- IZ_VideoUpdate(&app->video_state, &app->input_state, app->ticks);
- }
-
- IZ_AppTeardown(app);
- return 0;
- }
|