From a4b94cd848bdffe238b17187a1d99338a04ff3f3 Mon Sep 17 00:00:00 2001 From: Miku AuahDark Date: Mon, 5 Dec 2022 15:28:44 +0800 Subject: [PATCH] Add love.sensor.getName(sensorType) --- src/modules/sensor/Sensor.h | 2 ++ src/modules/sensor/sdl/Sensor.cpp | 13 +++++++++++++ src/modules/sensor/sdl/Sensor.h | 1 + src/modules/sensor/wrap_Sensor.cpp | 11 +++++++++++ 4 files changed, 27 insertions(+) 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 } };