#include "StarLuaConverters.hpp" #include "StarColor.hpp" namespace Star { LuaValue LuaConverter::from(LuaEngine& engine, Color const& c) { if (c.alpha() == 255) return engine.createArrayTable(initializer_list{c.red(), c.green(), c.blue()}); else return engine.createArrayTable(initializer_list{c.red(), c.green(), c.blue(), c.alpha()}); } Maybe LuaConverter::to(LuaEngine& engine, LuaValue const& v) { if (auto t = v.ptr()) { Color c = Color::rgba(0, 0, 0, 255); Maybe r = engine.luaMaybeTo(t->get(1)); Maybe g = engine.luaMaybeTo(t->get(2)); Maybe b = engine.luaMaybeTo(t->get(3)); if (!r || !g || !b) return {}; c.setRed(*r); c.setGreen(*g); c.setBlue(*b); if (Maybe a = engine.luaMaybeTo(t->get(4))) { if (!a) return {}; c.setAlpha(*a); } return c; } else if (auto s = v.ptr()) { try { return Color(s->ptr()); } catch (ColorException const&) {} } return {}; } LuaValue LuaConverter::from(LuaEngine& engine, LuaCallbacks const& c) { auto table = engine.createTable(0, c.callbacks().size()); for (auto& callback : c.callbacks()) table.set(callback.first, engine.createWrappedFunction(callback.second)); return table; } Maybe LuaConverter::to(LuaEngine&, LuaValue const&) { return {}; } }