From 0f13628f8e7a89584165d9a4bd9e385d4e00ca61 Mon Sep 17 00:00:00 2001 From: Miku AuahDark Date: Mon, 5 Dec 2022 15:14:50 +0800 Subject: [PATCH] Add love.sensorupdate --- src/modules/event/sdl/Event.cpp | 33 +++++++++++++++++++++++++++++++++ src/modules/love/callbacks.lua | 3 +++ src/modules/sensor/sdl/Sensor.h | 4 ++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/modules/event/sdl/Event.cpp b/src/modules/event/sdl/Event.cpp index 9039a5de7..9dc4d1187 100644 --- a/src/modules/event/sdl/Event.cpp +++ b/src/modules/event/sdl/Event.cpp @@ -32,6 +32,7 @@ #include "audio/Audio.h" #include "common/config.h" #include "timer/Timer.h" +#include "sensor/sdl/Sensor.h" #include @@ -178,6 +179,7 @@ Message *Event::convert(const SDL_Event &e) vargs.reserve(4); love::filesystem::Filesystem *filesystem = nullptr; + love::sensor::Sensor *sensorInstance = nullptr; love::keyboard::Keyboard::Key key = love::keyboard::Keyboard::KEY_UNKNOWN; love::keyboard::Keyboard::Scancode scancode = love::keyboard::Keyboard::SCANCODE_UNKNOWN; @@ -446,6 +448,37 @@ Message *Event::convert(const SDL_Event &e) msg = new Message("localechanged"); break; #endif + case SDL_SENSORUPDATE: + sensorInstance = Module::getInstance(M_SENSOR); + if (sensorInstance) + { + std::vector sensors = sensorInstance->getHandles(); + + for (void *s: sensors) + { + SDL_Sensor *sensor = (SDL_Sensor *) s; + SDL_SensorID id = SDL_SensorGetInstanceID(sensor); + + if (e.sensor.which == id) + { + // Found sensor + const char *sensorType = "unknown"; + sensor::Sensor::getConstant(sensor::sdl::Sensor::convert(SDL_SensorGetType(sensor)), sensorType); + vargs.emplace_back(sensorType, strlen(sensorType)); + vargs.emplace_back(e.sensor.data[0]); + vargs.emplace_back(e.sensor.data[1]); + vargs.emplace_back(e.sensor.data[2]); + vargs.emplace_back(e.sensor.data[3]); + vargs.emplace_back(e.sensor.data[4]); + // NOTE: LOVE event loop only pass up to 6 additional message for now + vargs.emplace_back(e.sensor.data[5]); + msg = new Message("sensorupdate", vargs); + + break; + } + } + } + break; default: break; } diff --git a/src/modules/love/callbacks.lua b/src/modules/love/callbacks.lua index 983598f78..5eae5fd5e 100644 --- a/src/modules/love/callbacks.lua +++ b/src/modules/love/callbacks.lua @@ -134,6 +134,9 @@ function love.createhandlers() love.audio.setPlaybackDevice() end end, + sensorupdate = function (sensorType, ...) + if love.sensorupdate then return love.sensorupdate(sensorType, ...) end + end }, { __index = function(self, name) error("Unknown event: " .. name) diff --git a/src/modules/sensor/sdl/Sensor.h b/src/modules/sensor/sdl/Sensor.h index c21e04658..b3654cf82 100644 --- a/src/modules/sensor/sdl/Sensor.h +++ b/src/modules/sensor/sdl/Sensor.h @@ -52,11 +52,11 @@ public: std::vector getData(SensorType type) override; std::vector getHandles() override; + static SensorType convert(SDL_SensorType type); + private: std::map sensors; - static SensorType convert(SDL_SensorType type); - }; // Sensor } // sdl