static inline void _get_colour(lua_State *l, const char *key, float rgba[4]) { lua_pushstring(l, key); lua_gettable(l, -2); _get_number(l, "r", rgba[0]); _get_number(l, "g", rgba[1]); _get_number(l, "b", rgba[2]); _get_number(l, "a", rgba[3]); lua_pop(l, 1); }
Color4ub Color4ub::FromLuaTable(lua_State *l, int idx) { const int table = lua_absindex(l, idx); assert(lua_istable(l, table)); LUA_DEBUG_START(l); float r, g, b, a; _get_number(l, table, "r", r); _get_number(l, table, "g", g); _get_number(l, table, "b", b); if (!_get_number(l, table, "a", a)) a = 1.0f; LUA_DEBUG_END(l, 0); return Color4ub(r*255, g*255, b*255, a*255); }
Color4f Color4f::FromLuaTable(lua_State *l, int idx) { const int table = lua_absindex(l, idx); assert(lua_istable(l, table)); LUA_DEBUG_START(l); float r, g, b, a; _get_number(l, table, "r", r); _get_number(l, table, "g", g); _get_number(l, table, "b", b); _get_number(l, table, "a", a); LUA_DEBUG_END(l, 0); return Color4f(r, g, b, a); }
ShipFlavour ShipFlavour::FromLuaTable(lua_State *l, int idx) { const int table = lua_absindex(l, idx); assert(lua_istable(l, table)); LUA_DEBUG_START(l); lua_pushvalue(l, table); ShipFlavour f; _get_string(l, "id", f.id); _get_string(l, "regId", f.regid); float money; _get_number(l, "price", money); f.price = money*100.0; lua_getfield(l, -1, "primaryColour"); _get_colour(l, "diffuse", f.primaryColor.diffuse); _get_colour(l, "specular", f.primaryColor.specular); _get_colour(l, "emissive", f.primaryColor.emissive); _get_number(l, "shininess", f.primaryColor.shininess); lua_pop(l, 1); lua_getfield(l, -1, "secondaryColour"); _get_colour(l, "diffuse", f.secondaryColor.diffuse); _get_colour(l, "specular", f.secondaryColor.specular); _get_colour(l, "emissive", f.secondaryColor.emissive); _get_number(l, "shininess", f.secondaryColor.shininess); lua_pop(l, 1); lua_pop(l, 1); LUA_DEBUG_END(l, 0); return f; }
ShipFlavour ShipFlavour::FromLuaTable(lua_State *l, int idx) { const int table = lua_absindex(l, idx); assert(lua_istable(l, table)); LUA_DEBUG_START(l); lua_pushvalue(l, table); ShipFlavour f; _get_string(l, "id", f.id); _get_string(l, "regId", f.regid); float money; _get_number(l, "price", money); f.price = money*100.0; lua_pop(l, 1); LUA_DEBUG_END(l, 0); return f; }