@@ -30,26 +30,26 @@ void IZ_TeardownApp(IZ_App* app) { | |||
} | |||
void IZ_HandleSDLEvents(IZ_App* app) { | |||
while (SDL_PollEvent(&app->input_state.sdl_event) != 0) { | |||
if (app->input_state.sdl_event.type == SDL_QUIT) { | |||
while (SDL_PollEvent(&app->sdl_event) != 0) { | |||
if (app->sdl_event.type == SDL_QUIT) { | |||
app->quit = true; | |||
break; | |||
} | |||
IZ_HandleSDLInputEvents(app->input_state.sdl_event, &app->input_state); | |||
IZ_HandleSDLInputEvents(app->sdl_event, &app->input_state); | |||
} | |||
} | |||
void IZ_HandlePortMIDIEvents(IZ_App* app) { | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
int32_t midi_events_count = Pm_Read( | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
i32 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 > 0) { | |||
for (int32_t midi_event_index = 0; midi_event_index < midi_events_count; midi_event_index += 1) { | |||
for (i32 midi_event_index = 0; midi_event_index < midi_events_count; midi_event_index += 1) { | |||
IZ_HandlePortMIDIInputEvents( | |||
app->input_state.midi_input_state->event_buffer[midi_event_index], | |||
&app->input_state | |||
@@ -64,9 +64,9 @@ void IZ_HandleEvents(IZ_App* app) { | |||
IZ_HandlePortMIDIEvents(app); | |||
} | |||
IZ_ProcedureResult IZ_RunApp(IZ_App* app, uint8_t argc, char* argv[]) { | |||
IZ_ProcedureResult IZ_RunApp(IZ_App* app, u8 argc, char* argv[]) { | |||
printf_s("Args (%u):\n", argc); | |||
for (uint8_t i = 0; i < argc; i += 1) { | |||
for (u8 i = 0; i < argc; i += 1) { | |||
printf_s(" %s", argv[i]); | |||
} | |||
@@ -76,7 +76,7 @@ IZ_ProcedureResult IZ_RunApp(IZ_App* app, uint8_t argc, char* argv[]) { | |||
} | |||
while (true) { | |||
uint64_t ticks = SDL_GetTicks64(); | |||
u64 ticks = SDL_GetTicks64(); | |||
// TODO do audio processing | |||
// TODO do networking? | |||
@@ -8,6 +8,8 @@ | |||
#include "memory/IZ_pool.h" | |||
typedef struct { | |||
SDL_Event sdl_event; | |||
IZ_InputState input_state; | |||
IZ_VideoState video_state; | |||
@@ -15,6 +17,6 @@ typedef struct { | |||
bool quit; | |||
} IZ_App; | |||
IZ_ProcedureResult IZ_RunApp(IZ_App*, uint8_t, char**); | |||
IZ_ProcedureResult IZ_RunApp(IZ_App*, u8, char**); | |||
#endif |
@@ -3,10 +3,20 @@ | |||
#include <stdint.h> | |||
#define PLAYERS 1 | |||
#define PLAYERS (unsigned char) 1 | |||
#define APP_NAME "SDL2" | |||
static const char* APP_NAME = "SDL2"; | |||
typedef uint8_t u8; | |||
typedef uint16_t u16; | |||
typedef uint32_t u32; | |||
typedef uint64_t u64; | |||
typedef float f32; | |||
typedef double f64; | |||
typedef int8_t i8; | |||
typedef int16_t i16; | |||
typedef int32_t i32; | |||
typedef int64_t i64; | |||
typedef uint8_t IZ_ProcedureResult; | |||
typedef u8 IZ_ProcedureResult; | |||
#endif |
@@ -1,12 +1,13 @@ | |||
#ifndef IZ_CREATURE_H | |||
#define IZ_CREATURE_H | |||
#include "../IZ_common.h" | |||
#include "IZ_object.h" | |||
typedef struct { | |||
IZ_Object as_object; | |||
float hp; | |||
f32 hp; | |||
} IZ_Creature; | |||
#endif |
@@ -1,7 +1,9 @@ | |||
#ifndef IZ_POINT2D_H | |||
#define IZ_POINT2D_H | |||
typedef float IZ_GeoCoord; | |||
#include "../IZ_common.h" | |||
typedef f32 IZ_GeoCoord; | |||
typedef struct { | |||
IZ_GeoCoord x; | |||
@@ -3,9 +3,9 @@ | |||
#include "../IZ_common.h" | |||
#define CONTROLS 16 | |||
#define CONTROLS (unsigned char) 16 | |||
typedef uint16_t IZ_Action; | |||
typedef u16 IZ_Action; | |||
static const char* ACTION_NAMES[CONTROLS] = { | |||
"Up", | |||
@@ -27,7 +27,7 @@ void IZ_InitializeInput(const char* config_path, IZ_InputState* state) { | |||
fprintf_s(stderr, "Error committing MIDI input config. Code: %u.\n", midi_input_result); | |||
} | |||
for (uint8_t p = 0; p < PLAYERS; p += 1) { | |||
for (u8 p = 0; p < PLAYERS; p += 1) { | |||
state->action[p] = 0; | |||
} | |||
} | |||
@@ -8,7 +8,6 @@ | |||
typedef struct { | |||
IZ_Action action[PLAYERS]; | |||
SDL_Event sdl_event; | |||
IZ_KeyboardState keyboard_state[PLAYERS]; | |||
IZ_JoystickState joystick_state[PLAYERS]; | |||
IZ_MIDIInputState midi_input_state[PLAYERS]; | |||
@@ -65,9 +65,9 @@ void IZ_HandleJoystickHatEvents(SDL_Event e, IZ_Action* action) { | |||
} | |||
void IZ_HandleJoystickButtonEvents(SDL_Event e, IZ_JoystickState* state, IZ_Action* action) { | |||
for (uint8_t i = 4; i < CONTROLS; i += 1) { | |||
for (u8 i = 4; i < CONTROLS; i += 1) { | |||
if (e.jbutton.button == state->config.control_mapping[i]) { | |||
const uint16_t bitflag = (0x1 << i); | |||
const u16 bitflag = (0x1 << i); | |||
if (e.type == SDL_JOYBUTTONDOWN) { | |||
*action |= bitflag; | |||
@@ -83,7 +83,7 @@ void IZ_HandleJoystickButtonEvents(SDL_Event e, IZ_JoystickState* state, IZ_Acti | |||
} | |||
void IZ_HandleJoystickEvents(SDL_Event e, IZ_JoystickState(* state)[PLAYERS], IZ_Action(* action)[PLAYERS]) { | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
IZ_HandleJoystickDeviceEvents(e, state[player_index]); | |||
IZ_HandleJoystickAxisEvents(e, state[player_index], action[player_index]); | |||
IZ_HandleJoystickHatEvents(e, action[player_index]); | |||
@@ -94,10 +94,10 @@ void IZ_HandleJoystickEvents(SDL_Event e, IZ_JoystickState(* state)[PLAYERS], IZ | |||
void IZ_LoadJoystickConfig(const char* config_path, IZ_JoystickState(* state)[PLAYERS]) { | |||
char control_mapping_section_name[26]; | |||
char main_section_name[11]; | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
sprintf_s(control_mapping_section_name, 26, "Joystick.%d.ControlMapping", player_index); | |||
for (uint8_t i = 4; i < CONTROLS; i += 1) { | |||
for (u8 i = 4; i < CONTROLS; i += 1) { | |||
state[player_index]->config.control_mapping[i] = ini_getl( | |||
control_mapping_section_name, | |||
ACTION_NAMES[i], | |||
@@ -113,14 +113,14 @@ void IZ_LoadJoystickConfig(const char* config_path, IZ_JoystickState(* state)[PL | |||
} | |||
IZ_ProcedureResult IZ_SaveJoystickConfig(const char* config_path, IZ_JoystickState(* state)[PLAYERS]) { | |||
uint8_t problem = 0; | |||
u8 problem = 0; | |||
char control_mapping_section_name[26]; | |||
char main_section_name[11]; | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
sprintf_s(control_mapping_section_name, 26, "Joystick.%d.ControlMapping", player_index); | |||
for (uint8_t i = 4; i < CONTROLS; i += 1) { | |||
for (u8 i = 4; i < CONTROLS; i += 1) { | |||
if (!ini_putl( | |||
control_mapping_section_name, | |||
ACTION_NAMES[i], | |||
@@ -162,8 +162,8 @@ IZ_ProcedureResult IZ_InitializeJoystickState(const char* config_path, IZ_Joysti | |||
return 1; | |||
} | |||
uint8_t joysticks_count = SDL_NumJoysticks(); | |||
for (uint8_t player_index = 0; player_index < joysticks_count; player_index += 1) { | |||
u8 joysticks_count = SDL_NumJoysticks(); | |||
for (u8 player_index = 0; player_index < joysticks_count; player_index += 1) { | |||
state[player_index]->device = SDL_JoystickOpen(state[player_index]->config.device_id); | |||
} | |||
@@ -171,7 +171,7 @@ IZ_ProcedureResult IZ_InitializeJoystickState(const char* config_path, IZ_Joysti | |||
} | |||
void IZ_TeardownJoystickState(IZ_JoystickState(* state)[PLAYERS]) { | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
if (!state[player_index]->device) { | |||
continue; | |||
} | |||
@@ -6,9 +6,9 @@ | |||
#include <minIni.h> | |||
#include "IZ_action.h" | |||
typedef uint8_t IZ_PadButton; | |||
typedef u8 IZ_PadButton; | |||
static const uint16_t IZ_DEFAULT_AXIS_THRESHOLD = 8000; | |||
static const u16 IZ_DEFAULT_AXIS_THRESHOLD = 8000; | |||
typedef enum { | |||
IZ_JOY_AXIS_DIRECTION_HORIZONTAL1 = 0, | |||
@@ -18,7 +18,7 @@ typedef enum { | |||
} IZ_JoyAxisDirection; | |||
typedef struct { | |||
uint16_t axis_threshold; | |||
u16 axis_threshold; | |||
SDL_JoystickID device_id; | |||
IZ_PadButton control_mapping[CONTROLS]; | |||
} IZ_JoystickConfig; | |||
@@ -1,9 +1,9 @@ | |||
#include "IZ_keyboard.h" | |||
void IZ_HandleKewyboardKeyUpDownEvents(SDL_Event e, IZ_KeyboardState* state, IZ_Action* action) { | |||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||
for (u8 i = 0; i < CONTROLS; i += 1) { | |||
if (e.key.keysym.sym == state->config.control_mapping[i]) { | |||
const uint16_t bitflag = (0x1 << i); | |||
const u16 bitflag = (0x1 << i); | |||
if (e.type == SDL_KEYDOWN) { | |||
*action |= bitflag; | |||
return; | |||
@@ -17,17 +17,17 @@ void IZ_HandleKewyboardKeyUpDownEvents(SDL_Event e, IZ_KeyboardState* state, IZ_ | |||
} | |||
void IZ_HandleKeyboardEvents(SDL_Event e, IZ_KeyboardState(* state)[PLAYERS], IZ_Action(* action)[PLAYERS]) { | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
IZ_HandleKewyboardKeyUpDownEvents(e, state[player_index], action[player_index]); | |||
} | |||
} | |||
IZ_ProcedureResult IZ_SaveKeyboardConfig(const char* config_path, IZ_KeyboardState(* state)[PLAYERS]) { | |||
uint8_t problem = 0; | |||
u8 problem = 0; | |||
char control_mapping_section_name[26]; | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
sprintf_s(control_mapping_section_name, 26, "Keyboard.%d.ControlMapping", player_index); | |||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||
for (u8 i = 0; i < CONTROLS; i += 1) { | |||
if (!ini_puts( | |||
control_mapping_section_name, | |||
ACTION_NAMES[i], | |||
@@ -45,9 +45,9 @@ IZ_ProcedureResult IZ_SaveKeyboardConfig(const char* config_path, IZ_KeyboardSta | |||
void IZ_LoadKeyboardConfig(const char* config_path, IZ_KeyboardState(* state)[PLAYERS]) { | |||
char buffer[128]; | |||
char keyboard_section_name[26]; | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
sprintf_s(keyboard_section_name, 26, "Keyboard.%d.ControlMapping", player_index); | |||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||
for (u8 i = 0; i < CONTROLS; i += 1) { | |||
ini_gets( | |||
keyboard_section_name, | |||
ACTION_NAMES[i], | |||
@@ -1,6 +1,6 @@ | |||
#include "IZ_midi.h" | |||
char* IZ_GetMIDINoteName(uint8_t midi_note) { | |||
char* IZ_GetMIDINoteName(u8 midi_note) { | |||
static const char* pitch_names[] = { | |||
"C", | |||
"C#", | |||
@@ -16,24 +16,24 @@ char* IZ_GetMIDINoteName(uint8_t midi_note) { | |||
"B" | |||
}; | |||
const uint8_t pitch_class = midi_note % 12; | |||
const uint8_t octave = midi_note / 12; | |||
const u8 pitch_class = midi_note % 12; | |||
const u8 octave = midi_note / 12; | |||
static char note_name[4]; | |||
sprintf_s(note_name, 4, "%s%u", pitch_names[pitch_class], octave); | |||
return note_name; | |||
} | |||
uint8_t IZ_GetMIDINoteFromName(char* name) { | |||
u8 IZ_GetMIDINoteFromName(char* name) { | |||
char name_copy[4]; | |||
memcpy_s(name_copy, 4, name, 4); | |||
_strlwr_s(name_copy, 4); | |||
uint8_t octave; | |||
u8 octave; | |||
const char base_pitch_name[] = "c d ef g a b"; | |||
if (strlen(name_copy) == 2) { | |||
octave = name_copy[1] - '0'; | |||
for (uint8_t i = 0; i < 12; i += 1) { | |||
for (u8 i = 0; i < 12; i += 1) { | |||
if (base_pitch_name[i] == name_copy[0]) { | |||
return (octave * 12) + i; | |||
} | |||
@@ -41,7 +41,7 @@ uint8_t IZ_GetMIDINoteFromName(char* name) { | |||
return 255u; | |||
} | |||
uint8_t pitch_class; | |||
u8 pitch_class; | |||
octave = name_copy[2] - '0'; | |||
if (strstr(name_copy, "c#") || strstr(name_copy, "db")) { | |||
pitch_class = 1; | |||
@@ -61,13 +61,13 @@ uint8_t IZ_GetMIDINoteFromName(char* name) { | |||
} | |||
void IZ_HandleMIDINoteOnOffEvents(PmEvent e, IZ_MIDIInputState* state, IZ_Action* action) { | |||
uint32_t message = e.message; | |||
uint8_t status = message & 0xF0u; | |||
uint8_t channel = message & 0x0Fu; | |||
uint8_t data1 = (message >> 8) & 0xFFu; | |||
// uint8_t data2 = (message >> 16) & 0xFFu; | |||
u32 message = e.message; | |||
u8 status = message & 0xF0u; | |||
u8 channel = message & 0x0Fu; | |||
u8 data1 = (message >> 8) & 0xFFu; | |||
// u8 data2 = (message >> 16) & 0xFFu; | |||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||
for (u8 i = 0; i < CONTROLS; i += 1) { | |||
if ( | |||
data1 == state->config.control_mapping[i] | |||
&& ( | |||
@@ -75,7 +75,7 @@ void IZ_HandleMIDINoteOnOffEvents(PmEvent e, IZ_MIDIInputState* state, IZ_Action | |||
|| state->config.channel >= 16 | |||
) | |||
) { | |||
const uint16_t bitflag = (0x1 << i); | |||
const u16 bitflag = (0x1 << i); | |||
if (status == IZ_MIDI_NOTE_ON) { | |||
*action |= bitflag; | |||
return; | |||
@@ -89,20 +89,20 @@ void IZ_HandleMIDINoteOnOffEvents(PmEvent e, IZ_MIDIInputState* state, IZ_Action | |||
} | |||
void IZ_HandleMIDIInputEvents(PmEvent e, IZ_MIDIInputState(* state)[PLAYERS], IZ_Action(* action)[PLAYERS]) { | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
IZ_HandleMIDINoteOnOffEvents(e, state[player_index], action[player_index]); | |||
} | |||
} | |||
IZ_ProcedureResult IZ_SaveMIDIInputConfig(const char* config_path, IZ_MIDIInputState(* state)[PLAYERS]) { | |||
uint8_t problem = 0; | |||
u8 problem = 0; | |||
char control_mapping_section_name[27]; | |||
char main_section_name[12]; | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
sprintf_s(control_mapping_section_name, 27, "MIDIInput.%d.ControlMapping", player_index); | |||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||
for (u8 i = 0; i < CONTROLS; i += 1) { | |||
if (!ini_puts( | |||
control_mapping_section_name, | |||
ACTION_NAMES[i], | |||
@@ -141,9 +141,9 @@ void IZ_LoadMIDIInputConfig(const char* config_path, IZ_MIDIInputState(* state)[ | |||
char control_mapping_section_name[27]; | |||
char main_section_name[12]; | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
sprintf_s(control_mapping_section_name, 27, "MIDIInput.%d.ControlMapping", player_index); | |||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||
for (u8 i = 0; i < CONTROLS; i += 1) { | |||
ini_gets( | |||
control_mapping_section_name, | |||
ACTION_NAMES[i], | |||
@@ -173,7 +173,7 @@ IZ_ProcedureResult IZ_InitializeMIDIInput(const char* config_path, IZ_MIDIInputS | |||
return 2; | |||
} | |||
for (uint8_t player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
for (u8 player_index = 0; player_index < PLAYERS; player_index += 1) { | |||
state[player_index]->device_info = Pm_GetDeviceInfo(state[player_index]->config.device_id); | |||
state[player_index]->stream = NULL; | |||
Pm_OpenInput( | |||
@@ -190,7 +190,7 @@ IZ_ProcedureResult IZ_InitializeMIDIInput(const char* config_path, IZ_MIDIInputS | |||
} | |||
void IZ_TeardownMIDIInput(IZ_MIDIInputState(* state)[PLAYERS]) { | |||
for (uint8_t i = 0; i < PLAYERS; i += 1) { | |||
for (u8 i = 0; i < PLAYERS; i += 1) { | |||
if (!state[i]->stream) { | |||
continue; | |||
} | |||
@@ -9,15 +9,15 @@ | |||
#define MIDI_EVENT_BUFFER_SIZE 1024 | |||
typedef uint8_t IZ_MIDINote; | |||
typedef u8 IZ_MIDINote; | |||
static const uint8_t IZ_MIDI_NOTE_ON = 0x90u; | |||
static const u8 IZ_MIDI_NOTE_ON = 0x90u; | |||
static const uint8_t IZ_MIDI_NOTE_OFF = 0x80u; | |||
static const u8 IZ_MIDI_NOTE_OFF = 0x80u; | |||
typedef struct { | |||
PmDeviceID device_id; | |||
uint8_t channel; | |||
u8 channel; | |||
IZ_MIDINote control_mapping[CONTROLS]; | |||
} IZ_MIDIInputConfig; | |||
@@ -4,11 +4,11 @@ | |||
#include "IZ_keyboard.h" | |||
#include "IZ_joystick.h" | |||
int16_t GenerateAxisValueWithinThreshold(uint16_t threshold) { | |||
i16 GenerateAxisValueWithinThreshold(u16 threshold) { | |||
return rand() % threshold; | |||
} | |||
int16_t GenerateAxisValueOutsideThreshold(uint16_t threshold) { | |||
i16 GenerateAxisValueOutsideThreshold(u16 threshold) { | |||
return threshold + (rand() % (RAND_MAX - threshold - 1)) + 1; | |||
} | |||
@@ -199,7 +199,7 @@ spec("input") { | |||
e.type = SDL_JOYHATMOTION; | |||
} | |||
for (uint8_t i = 0; i < 4; i += 1) { | |||
for (u8 i = 0; i < 4; i += 1) { | |||
it("handles motion for %s action", ACTION_NAMES[i]) { | |||
e.jhat.value = (0x1u << i); | |||
action = 0; | |||
@@ -225,7 +225,7 @@ spec("input") { | |||
} | |||
describe("on button events") { | |||
for (uint8_t i = 4; i < CONTROLS; i += 1) { | |||
for (u8 i = 4; i < CONTROLS; i += 1) { | |||
it("handles %s action activation", ACTION_NAMES[i]) { | |||
e.type = SDL_JOYBUTTONDOWN; | |||
e.jbutton.button = IZ_DEFAULT_JOYSTICK_STATE[0][i]; | |||
@@ -284,7 +284,7 @@ spec("input") { | |||
} | |||
before_each() { | |||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||
for (u8 i = 0; i < CONTROLS; i += 1) { | |||
config.control_mapping[i] = IZ_DEFAULT_JOYSTICK_STATE[0][i]; | |||
} | |||
} | |||
@@ -310,7 +310,7 @@ spec("input") { | |||
static IZ_KeyboardState state; | |||
static IZ_Action action; | |||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||
for (u8 i = 0; i < CONTROLS; i += 1) { | |||
it("handles %s action activation", ACTION_NAMES[i]) { | |||
e.type = SDL_KEYDOWN; | |||
e.key.keysym.sym = IZ_DEFAULT_KEYBOARD_STATE[0][i]; | |||
@@ -368,7 +368,7 @@ spec("input") { | |||
} | |||
before_each() { | |||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||
for (u8 i = 0; i < CONTROLS; i += 1) { | |||
config.control_mapping[i] = IZ_DEFAULT_KEYBOARD_STATE[0][i]; | |||
} | |||
} | |||
@@ -55,10 +55,10 @@ void IZ_UpdateVideo(IZ_VideoState* video_state, IZ_InputState* input_states, uin | |||
SDL_SetRenderDrawColor(video_state->renderer, 0x00, 0xff, 0xff, 0xff); | |||
uint64_t the_ticks = ticks; | |||
for (uint8_t i = 0; i < 64; i += 1) { | |||
const uint8_t column = i % 32; | |||
const uint8_t row = i / 32; | |||
const uint8_t size = 4; | |||
for (u8 i = 0; i < 64; i += 1) { | |||
const u8 column = i % 32; | |||
const u8 row = i / 32; | |||
const u8 size = 4; | |||
if (the_ticks & 0x1) { | |||
SDL_RenderFillRectF(video_state->renderer, &(SDL_FRect) { | |||
@@ -73,12 +73,12 @@ void IZ_UpdateVideo(IZ_VideoState* video_state, IZ_InputState* input_states, uin | |||
SDL_SetRenderDrawColor(video_state->renderer, 0xff, 0xff, 0x00, 0xff); | |||
// TODO refer to app's state | |||
for (uint8_t p = 0; p < PLAYERS; p += 1) { | |||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||
const uint8_t column = (i % 4) + (p * 4); | |||
const uint8_t row = i / 4; | |||
for (u8 p = 0; p < PLAYERS; p += 1) { | |||
for (u8 i = 0; i < CONTROLS; i += 1) { | |||
const u8 column = (i % 4) + (p * 4); | |||
const u8 row = i / 4; | |||
const IZ_Action bitflag = (0x1 << i); | |||
const uint8_t size = 4; | |||
const u8 size = 4; | |||
if (input_states->action[p] & bitflag) { | |||
SDL_RenderFillRectF(video_state->renderer, &(SDL_FRect) { | |||
column * size, | |||
@@ -12,9 +12,9 @@ | |||
#include "../IZ_config.h" | |||
typedef struct { | |||
uint16_t width; | |||
uint16_t height; | |||
uint8_t max_fps; | |||
u16 width; | |||
u16 height; | |||
u8 max_fps; | |||
} IZ_VideoConfig; | |||
typedef struct { | |||