diff --git a/src/modules/sensor/Sensor.h b/src/modules/sensor/Sensor.h index 9b6b64cff..41671f4dd 100644 --- a/src/modules/sensor/Sensor.h +++ b/src/modules/sensor/Sensor.h @@ -71,6 +71,8 @@ public: **/ virtual std::vector getHandles() = 0; + virtual const char *getSensorName(SensorType type) = 0; + STRINGMAP_CLASS_DECLARE(SensorType); }; // Sensor diff --git a/src/modules/sensor/sdl/Sensor.cpp b/src/modules/sensor/sdl/Sensor.cpp index a1eda40e5..629f3ebdf 100644 --- a/src/modules/sensor/sdl/Sensor.cpp +++ b/src/modules/sensor/sdl/Sensor.cpp @@ -124,6 +124,19 @@ std::vector Sensor::getHandles() return nativeSensor; } +const char *Sensor::getSensorName(SensorType type) +{ + if (sensors[type] == nullptr) + { + const char *name = nullptr; + getConstant(type, name); + + throw love::Exception("\"%s\" sensor is not enabled", name); + } + + return SDL_SensorGetName(sensors[type]); +} + Sensor::SensorType Sensor::convert(SDL_SensorType type) { switch (type) diff --git a/src/modules/sensor/sdl/Sensor.h b/src/modules/sensor/sdl/Sensor.h index b3654cf82..9dc9f6a8f 100644 --- a/src/modules/sensor/sdl/Sensor.h +++ b/src/modules/sensor/sdl/Sensor.h @@ -51,6 +51,7 @@ public: void setEnabled(SensorType type, bool enable) override; std::vector getData(SensorType type) override; std::vector getHandles() override; + const char *getSensorName(SensorType type) override; static SensorType convert(SDL_SensorType type); diff --git a/src/modules/sensor/wrap_Sensor.cpp b/src/modules/sensor/wrap_Sensor.cpp index 4c41178e7..99528af7e 100644 --- a/src/modules/sensor/wrap_Sensor.cpp +++ b/src/modules/sensor/wrap_Sensor.cpp @@ -78,6 +78,16 @@ static int w_getData(lua_State *L) return data.size(); } +static int w_getName(lua_State *L) +{ + Sensor::SensorType type = luax_checksensortype(L, 1); + const char *name = nullptr; + + luax_catchexcept(L, [&](){ name = instance()->getSensorName(type); }); + lua_pushstring(L, name); + return 1; +} + static const luaL_Reg functions[] = { { "isAvailable", w_isAvailable }, @@ -85,6 +95,7 @@ static const luaL_Reg functions[] = { "isEnabled", w_isEnabled }, { "setEnabled", w_setEnabled }, { "getData", w_getData }, + { "getName", w_getName }, { nullptr, nullptr } };