Add error handling in love.sensor.getData and only pass 3 values on love.sensorupdate.

This commit is contained in:
Miku AuahDark
2022-12-05 22:22:25 +08:00
parent a4b94cd848
commit bdbd4a9a58
2 changed files with 11 additions and 7 deletions
+2 -4
View File
@@ -465,13 +465,11 @@ Message *Event::convert(const SDL_Event &e)
const char *sensorType = "unknown";
sensor::Sensor::getConstant(sensor::sdl::Sensor::convert(SDL_SensorGetType(sensor)), sensorType);
vargs.emplace_back(sensorType, strlen(sensorType));
// Both accelerometer and gyroscope only pass up to 3 values.
// https://github.com/libsdl-org/SDL/blob/SDL2/include/SDL_sensor.h#L81-L127
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;
+9 -3
View File
@@ -104,10 +104,16 @@ std::vector<float> Sensor::getData(SensorType type)
throw love::Exception("\"%s\" sensor is not enabled", name);
}
std::vector<float> values;
values.resize(3);
std::vector<float> values(3);
if (SDL_SensorGetData(sensors[type], values.data(), values.size()) != 0)
{
const char *name = nullptr;
getConstant(type, name);
throw love::Exception("Could not get \"%s\" SDL sensor data (%s)", name, SDL_GetError());
}
SDL_SensorGetData(sensors[type], values.data(), 3);
return values;
}