// TODO This is internal, make it private as soon as possible. void retro_core_set_callbacks (RetroCore *self) { RetroModule *module; RetroCallbackSetter set_video_refresh; RetroCallbackSetter set_audio_sample; RetroCallbackSetter set_audio_sample_batch; RetroCallbackSetter set_input_poll; RetroCallbackSetter set_input_state; module = self->module; set_video_refresh = retro_module_get_set_video_refresh (module); set_audio_sample = retro_module_get_set_audio_sample (module); set_audio_sample_batch = retro_module_get_set_audio_sample_batch (module); set_input_poll = retro_module_get_set_input_poll (module); set_input_state = retro_module_get_set_input_state (module); retro_core_push_cb_data (self); set_video_refresh (on_video_refresh); set_audio_sample (on_audio_sample); set_audio_sample_batch (on_audio_sample_batch); set_input_poll (on_input_poll); set_input_state (on_input_state); retro_core_pop_cb_data (); }
void keyCodeCallback(GLFWwindow* window, int key_code, int scancode, int action, int mod) { if(action == GLFW_REPEAT) return; for(int i = 0; i < key_inputs[key_code].action_count; ++i) { if(key_inputs[key_code].action_pairs[i].mods == mod) { set_input_state(key_inputs[key_code].action_pairs[i].action_id, action == GLFW_PRESS); } } for(int i = 0; i < key_inputs[key_code].axis_count; ++i) { if(key_inputs[key_code].axis_pairs[i].mods == mod) { // FIXME: On release, digital axes are reversed if(action == GLFW_PRESS) set_axis(key_inputs[key_code].axis_pairs[i].axis_id, key_inputs[key_code].axis_pairs[i].isx, key_inputs[key_code].axis_pairs[i].value, false, key_inputs[key_code].axis_pairs[i].emulated); else { set_axis(key_inputs[key_code].axis_pairs[i].axis_id, key_inputs[key_code].axis_pairs[i].isx, key_inputs[key_code].axis_pairs[i].value * -1, false, key_inputs[key_code].axis_pairs[i].emulated); } } } }