static void _add_children_to_sbody(lua_State* L, CustomSBody* sbody, OOLUA::Lua_table children) { int i=1; while (1) { CustomSBody *kid; if (!children.safe_at(i++, kid)) break; if (kid == NULL) { luaL_error(L, "invalid element (must be CustomSBody or table of CustomSBody)\n" "invalid element is child of CustomSBody '%s'", sbody->name.c_str()); } while (1) { OOLUA::Lua_table sub; if (!children.safe_at(i, sub)) break; if (!sub.valid()) break; _add_children_to_sbody(L, kid, sub); i++; continue; } sbody->children.push_back(*kid); } }
CustomSystem::CustomSystem(std::string s, OOLUA::Lua_table t) { name = s; numStars = 0; std::string stype; bool done = false; for (int i=0 ; i<4; i++) { int type = SBody::TYPE_GRAVPOINT; if (t.safe_at(i+1, stype)) { type = LuaConstants::GetConstant(csLua, "BodyType", stype.c_str()); if ( type < SBody::TYPE_STAR_MIN || type > SBody::TYPE_STAR_MAX ) { printf("system star %d does not have a valid star type\n", i+1); assert(0); } } primaryType[i] = static_cast<SBody::BodyType>(type); if (type == SBody::TYPE_GRAVPOINT) done = true; if (!done) numStars++; } seed = 0; govType = Polit::GOV_NONE; }