gamepads haptic moved from Sunshine module to Input module

This commit is contained in:
Issac332 2026-06-28 11:23:06 +03:00
parent 9f439b38b8
commit 27731db838
3 changed files with 25 additions and 26 deletions

View file

@ -277,7 +277,26 @@ static VALUE setBinding(VALUE self, VALUE rb_arr, VALUE rb_target){
return Qnil;
}
static VALUE setLED(VALUE self, VALUE r, VALUE g, VALUE b) {
if (gc != nullptr) {
SDL_SetGamepadLED(gc, NUM2INT(r), NUM2INT(g), NUM2INT(b));
} else if (js != nullptr) {
SDL_SetJoystickLED(js, NUM2INT(r), NUM2INT(g), NUM2INT(b));
}
return Qnil;
}
static VALUE rumble(VALUE self, VALUE low_frequency_rumble, VALUE high_frequency_rumble, VALUE duration_ms) {
Uint16 low_freq = NUM2DBL(low_frequency_rumble) * 65535;
Uint16 high_freq = NUM2DBL(high_frequency_rumble) * 65535;
if (gc != nullptr) {
SDL_RumbleGamepad(gc, low_freq, high_freq, NUM2INT(duration_ms));
} else if (js != nullptr) {
SDL_RumbleJoystick(js, low_freq, high_freq, NUM2INT(duration_ms));
}
return Qnil;
}
struct{
const char *str;
@ -349,7 +368,11 @@ void inputBindingInit(){
_rb_define_module_function(module, "c_axis_from_name", getGamepadAxisFromName);
rb_const_set(module, rb_intern("GAMEPAD_AXIS_COUNT"), SDL_GamepadAxis::SDL_GAMEPAD_AXIS_COUNT - 1);
rb_define_module_function(module, "set_binding", RUBY_METHOD_FUNC(setBinding), 2);
rb_define_module_function(module, "set_binding", setBinding, 2);
// haptic
rb_define_singleton_method(module, "set_led", setLED, 3);
rb_define_singleton_method(module, "vibrate", rumble, 3);
// mouse
_rb_define_module_function(module, "mouse_x", inputMouseX);

View file

@ -1,4 +1,3 @@
#include <SDL3/SDL_log.h>
#include <ruby.h>
#include <SDL3/SDL_version.h>
#include <SDL3/SDL_gamepad.h>
@ -39,27 +38,6 @@ static VALUE int_times(VALUE self) {
return self;
}
static VALUE SetLED(VALUE self, VALUE r, VALUE g, VALUE b) {
if (gc != nullptr) {
SDL_SetGamepadLED(gc, NUM2INT(r), NUM2INT(g), NUM2INT(b));
} else if (js != nullptr) {
SDL_SetJoystickLED(js, NUM2INT(r), NUM2INT(g), NUM2INT(b));
}
return Qnil;
}
static VALUE Rumble(VALUE self, VALUE low_frequency_rumble, VALUE high_frequency_rumble, VALUE duration_ms) {
Uint16 low_freq = NUM2DBL(low_frequency_rumble) * 65535;
Uint16 high_freq = NUM2DBL(high_frequency_rumble) * 65535;
if (gc != nullptr) {
SDL_RumbleGamepad(gc, low_freq, high_freq, NUM2INT(duration_ms));
} else if (js != nullptr) {
SDL_RumbleJoystick(js, low_freq, high_freq, NUM2INT(duration_ms));
}
return Qnil;
}
void SunshineBindingInit(){
printf("[SunshineBindingInit] Initializing Sunshine binding\n");
VALUE module = rb_define_module("Sunshine");
@ -68,8 +46,6 @@ void SunshineBindingInit(){
rb_const_set(module, rb_intern("SDLVersion_minor"), INT2NUM(SDL_MINOR_VERSION));
rb_const_set(module, rb_intern("SDLVersion_micro"), INT2NUM(SDL_MICRO_VERSION));
rb_const_set(module, rb_intern("SECURITYSTATE"), rb_str_new_cstr(securitystate));
rb_define_singleton_method(module, "SetLED", SetLED, 3);
rb_define_singleton_method(module, "Vibrate", Rumble, 3);
//если методы доступны то просто не перезаписываем их
if (!rb_respond_to(rb_cObject, rb_intern("class"))) {
rb_define_method(rb_cObject, "class", rb_obj_class, 0);

View file

@ -15,7 +15,7 @@ begin
$console = Graphics.fullscreen
Graphics.frame_rate = 60
Font.default_size = 20
Sunshine.SetLED(0, 255, 0)
Input.set_led(0, 255, 0)
if defined?(RubyVM::YJIT)
RubyVM::YJIT.enable