Add love.sensorupdate

This commit is contained in:
Miku AuahDark
2022-12-05 15:14:50 +08:00
parent 1fa9159f04
commit 0f13628f8e
3 changed files with 38 additions and 2 deletions
+33
View File
@@ -32,6 +32,7 @@
#include "audio/Audio.h"
#include "common/config.h"
#include "timer/Timer.h"
#include "sensor/sdl/Sensor.h"
#include <cmath>
@@ -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<sensor::Sensor>(M_SENSOR);
if (sensorInstance)
{
std::vector<void*> 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;
}
+3
View File
@@ -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)
+2 -2
View File
@@ -52,11 +52,11 @@ public:
std::vector<float> getData(SensorType type) override;
std::vector<void*> getHandles() override;
static SensorType convert(SDL_SensorType type);
private:
std::map<SensorType, SDL_Sensor*> sensors;
static SensorType convert(SDL_SensorType type);
}; // Sensor
} // sdl