Browse Source

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

Miku AuahDark 2 years ago
parent
commit
bdbd4a9a58
2 changed files with 11 additions and 7 deletions
  1. 2 4
      src/modules/event/sdl/Event.cpp
  2. 9 3
      src/modules/sensor/sdl/Sensor.cpp

+ 2 - 4
src/modules/event/sdl/Event.cpp

@@ -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
src/modules/sensor/sdl/Sensor.cpp

@@ -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;
 }