/* * Method: GetSystemBody * * Get a <SystemBody> object for the body that this path points to * * > body = path:GetSystemBody() * * Return: * * body - the <SystemBody> * * Availability: * * alpha 10 * * Status: * * stable */ static int l_sbodypath_get_system_body(lua_State *l) { SystemPath *path = LuaSystemPath::GetFromLua(1); RefCountedPtr<StarSystem> s = StarSystem::GetCached(path); SBody *sbody = s->GetBodyByPath(path); LuaSBody::PushToLua(sbody); return 1; }
/* * Attribute: parent * * The parent of the body, as a <SystemBody>. A body orbits its parent. * * Availability: * * alpha 14 * * Status: * * stable */ static int l_sbody_attr_parent(lua_State *l) { SystemBody *sbody = LuaSystemBody::CheckFromLua(1); // sbody->parent is 0 as it was cleared by the acquirer. we need to go // back to the starsystem proper to get what we need. RefCountedPtr<StarSystem> s = StarSystem::GetCached(sbody->path); SystemBody *live_sbody = s->GetBodyByPath(sbody->path); if (!live_sbody->parent) return 0; LuaSystemBody::PushToLua(live_sbody->parent); return 1; }
/* * Attribute: parent * * The parent of the body, as a <SystemBody>. A body orbits its parent. * * Availability: * * alpha 14 * * Status: * * stable */ static int l_sbody_attr_parent(lua_State *l) { SystemBody *sbody = LuaObject<SystemBody>::CheckFromLua(1); // sbody->parent is 0 as it was cleared by the acquirer. we need to go // back to the starsystem proper to get what we need. RefCountedPtr<StarSystem> s = Pi::game->GetGalaxy()->GetStarSystem(sbody->GetPath()); SystemBody *live_sbody = s->GetBodyByPath(sbody->GetPath()); if (!live_sbody->GetParent()) return 0; LuaObject<SystemBody>::PushToLua(live_sbody->GetParent()); return 1; }
static int l_set_hyperspace_target(lua_State *l) { LuaObject<Player>::CheckFromLua(1); if (Pi::game->IsNormalSpace()) { const SystemPath path = *LuaObject<SystemPath>::CheckFromLua(2); if (!path.IsSystemPath()) { if (!path.IsBodyPath()) { return luaL_error(l, "Player:SetHyperspaceTarget() -- second parameter is not a system path or the path of a star"); } RefCountedPtr<StarSystem> sys = Pi::game->GetGalaxy()->GetStarSystem(path); // Lua should never be able to get an invalid SystemPath // (note: this may change if it becomes possible to remove systems during the game) assert(path.bodyIndex < sys->GetNumBodies()); SystemBody *sbody = sys->GetBodyByPath(path); if (!sbody->GetSuperType() == SystemBody::SUPERTYPE_STAR) return luaL_error(l, "Player:SetHyperspaceTarget() -- second parameter is not a system path or the path of a star"); } Pi::game->GetSectorView()->SetHyperspaceTarget(path); return 0; } else return luaL_error(l, "Player:SetHyperspaceTarget() cannot be used while in hyperspace"); }
/* * Method: GetSystemBody * * Get a <SystemBody> object for the body that this path points to * * > body = path:GetSystemBody() * * Return: * * body - the <SystemBody> * * Availability: * * alpha 10 * * Status: * * stable */ static int l_sbodypath_get_system_body(lua_State *l) { SystemPath *path = LuaObject<SystemPath>::CheckFromLua(1); if (path->IsSectorPath()) { luaL_error(l, "Path <%d,%d,%d> does not name a system or body", path->sectorX, path->sectorY, path->sectorZ); return 0; } RefCountedPtr<StarSystem> sys = Pi::game->GetGalaxy()->GetStarSystem(path); if (path->IsSystemPath()) { luaL_error(l, "Path <%d,%d,%d : %d ('%s')> does not name a body", path->sectorX, path->sectorY, path->sectorZ, path->systemIndex, sys->GetName().c_str()); return 0; } // Lua should never be able to get an invalid SystemPath // (note: this may change if it becomes possible to remove systems during the game) assert(path->bodyIndex < sys->GetNumBodies()); SystemBody *sbody = sys->GetBodyByPath(path); LuaObject<SystemBody>::PushToLua(sbody); return 1; }
virtual void UpdateInfo() { const float YSEP = Gui::Screen::GetFontHeight() * 1.5f; DeleteAllChildren(); Gui::Label *l = new Gui::Label(Lang::MISSIONS); Add(l, 20, 20); l = new Gui::Label(Lang::TYPE); Add(l, 20, 20+YSEP*2); l = new Gui::Label(Lang::CLIENT); Add(l, 100, 20+YSEP*2); l = new Gui::Label(Lang::LOCATION); Add(l, 260, 20+YSEP*2); l = new Gui::Label(Lang::DUE); Add(l, 420, 20+YSEP*2); l = new Gui::Label(Lang::REWARD); Add(l, 580, 20+YSEP*2); l = new Gui::Label(Lang::STATUS); Add(l, 680, 20+YSEP*2); ShowChildren(); Gui::VScrollBar *scroll = new Gui::VScrollBar(); Gui::VScrollPortal *portal = new Gui::VScrollPortal(760); scroll->SetAdjustment(&portal->vscrollAdjust); const std::list<const Mission*> &missions = Pi::player->missions.GetAll(); Gui::Fixed *innerbox = new Gui::Fixed(760, missions.size()); float ypos = 0; for (std::list<const Mission*>::const_iterator i = missions.begin(); i != missions.end(); ++i) { SystemPath path = (*i)->location; RefCountedPtr<StarSystem> s = StarSystem::GetCached(path); l = new Gui::Label((*i)->type); innerbox->Add(l, 0, ypos); l = new Gui::Label((*i)->client); innerbox->Add(l, 80, ypos); if (!path.IsBodyPath()) l = new Gui::Label(stringf("%0 [%1{d},%2{d},%3{d}]", s->GetName().c_str(), path.sectorX, path.sectorY, path.sectorZ)); else l = new Gui::Label(stringf("%0\n%1 [%2{d},%3{d},%4{d}]", s->GetBodyByPath(&path)->name.c_str(), s->GetName().c_str(), path.sectorX, path.sectorY, path.sectorZ)); innerbox->Add(l, 240, ypos); l = new Gui::Label(format_date((*i)->due)); innerbox->Add(l, 400, ypos); l = new Gui::Label(format_money((*i)->reward)); innerbox->Add(l, 560, ypos); switch ((*i)->status) { case Mission::FAILED: l = new Gui::Label(std::string("#f00")+std::string(Lang::FAILED)); break; case Mission::COMPLETED: l = new Gui::Label(std::string("#ff0")+std::string(Lang::COMPLETED)); break; default: case Mission::ACTIVE: l = new Gui::Label(std::string("#0f0")+std::string(Lang::ACTIVE)); break; } innerbox->Add(l, 660, ypos); ypos += YSEP*3; } portal->Add(innerbox); Gui::HBox *body = new Gui::HBox(); body->PackEnd(portal); body->PackEnd(scroll); body->ShowAll(); Add(body, 20, 20+YSEP*3); }