示例#1
0
// 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 ();
}
示例#2
0
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);
            }
        }
    }
}