Browse Source

Add love.sensorupdate

Miku AuahDark 2 years ago
parent
commit
0f13628f8e
3 changed files with 38 additions and 2 deletions
  1. 33 0
      src/modules/event/sdl/Event.cpp
  2. 3 0
      src/modules/love/callbacks.lua
  3. 2 2
      src/modules/sensor/sdl/Sensor.h

+ 33 - 0
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 <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 - 0
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)

+ 2 - 2
src/modules/sensor/sdl/Sensor.h

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