mirror of
https://github.com/love2d/love.git
synced 2026-08-16 16:20:42 +02:00
Add love.sensorupdate
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user