本文整理汇总了C++中PlayerInfo::GetPlanet方法的典型用法代码示例。如果您正苦于以下问题:C++ PlayerInfo::GetPlanet方法的具体用法?C++ PlayerInfo::GetPlanet怎么用?C++ PlayerInfo::GetPlanet使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PlayerInfo
的用法示例。
在下文中一共展示了PlayerInfo::GetPlanet方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ShopPanel
OutfitterPanel::OutfitterPanel(PlayerInfo &player)
: ShopPanel(player, Outfit::CATEGORIES), available(player.SoldOutfits())
{
for(const pair<string, Outfit> &it : GameData::Outfits())
catalog[it.second.Category()].insert(it.first);
if(player.GetPlanet())
outfitter = player.GetPlanet()->Outfitter();
}
示例2: ShopPanel
ShipyardPanel::ShipyardPanel(PlayerInfo &player)
: ShopPanel(player, false), modifier(0)
{
for(const auto &it : GameData::Ships())
catalog[it.second.Attributes().Category()].insert(it.first);
if(player.GetPlanet())
shipyard = player.GetPlanet()->Shipyard();
}
示例3: player
Engine::Engine(PlayerInfo &player)
: player(player),
calcTickTock(false), drawTickTock(false), terminate(false), step(0),
flash(0.), doFlash(false), wasLeavingHyperspace(false),
load(0.), loadCount(0), loadSum(0.)
{
// Start the thread for doing calculations.
calcThread = thread(&Engine::ThreadEntryPoint, this);
if(!player.IsLoaded() || !player.GetSystem())
return;
// Preload any landscapes for this system.
for(const StellarObject &object : player.GetSystem()->Objects())
if(object.GetPlanet())
GameData::Preload(object.GetPlanet()->Landscape());
// Now we know the player's current position. Draw the planets.
Point center;
if(player.GetPlanet())
{
for(const StellarObject &object : player.GetSystem()->Objects())
if(object.GetPlanet() == player.GetPlanet())
center = object.Position();
}
for(const StellarObject &object : player.GetSystem()->Objects())
if(!object.GetSprite().IsEmpty())
{
Point position = object.Position();
Point unit = object.Unit();
position -= center;
int type = object.IsStar() ? Radar::SPECIAL :
!object.GetPlanet() ? Radar::INACTIVE :
object.GetPlanet()->IsWormhole() ? Radar::ANOMALOUS :
GameData::GetPolitics().HasDominated(object.GetPlanet()) ? Radar::PLAYER :
object.GetPlanet()->CanLand() ? Radar::FRIENDLY : Radar::HOSTILE;
double r = max(2., object.Radius() * .03 + .5);
draw[calcTickTock].Add(object.GetSprite(), position, unit);
radar[calcTickTock].Add(type, position, r, r - 1.);
}
// Add all neighboring systems to the radar.
const Ship *flagship = player.Flagship();
const System *targetSystem = flagship ? flagship->GetTargetSystem() : nullptr;
const vector<const System *> &links = (flagship && flagship->Attributes().Get("jump drive")) ?
player.GetSystem()->Neighbors() : player.GetSystem()->Links();
for(const System *system : links)
radar[calcTickTock].AddPointer(
(system == targetSystem) ? Radar::SPECIAL : Radar::INACTIVE,
system->Position() - player.GetSystem()->Position());
}
示例4: player
InfoPanel::InfoPanel(PlayerInfo &player)
: player(player), shipIt(player.Ships().begin()), showShip(false), canEdit(player.GetPlanet())
{
SetInterruptible(false);
UpdateInfo();
}
示例5: player
ShopPanel::ShopPanel(PlayerInfo &player, const vector<string> &categories)
: player(player), planet(player.GetPlanet()), playerShip(player.Flagship()), categories(categories)
{
if(playerShip)
playerShips.insert(playerShip);
SetIsFullScreen(true);
}
示例6: CanOffer
// Check if it's possible to offer or complete this mission right now.
bool Mission::CanOffer(const PlayerInfo &player) const
{
if(location == BOARDING || location == ASSISTING)
{
if(!player.BoardingShip())
return false;
if(!sourceFilter.Matches(*player.BoardingShip()))
return false;
}
else
{
if(source && source != player.GetPlanet())
return false;
if(!sourceFilter.Matches(player.GetPlanet()))
return false;
}
if(!toOffer.Test(player.Conditions()))
return false;
if(!toFail.IsEmpty() && toFail.Test(player.Conditions()))
return false;
if(repeat)
{
auto cit = player.Conditions().find(name + ": offered");
if(cit != player.Conditions().end() && cit->second >= repeat)
return false;
}
auto it = actions.find(OFFER);
if(it != actions.end() && !it->second.CanBeDone(player))
return false;
it = actions.find(ACCEPT);
if(it != actions.end() && !it->second.CanBeDone(player))
return false;
it = actions.find(DECLINE);
if(it != actions.end() && !it->second.CanBeDone(player))
return false;
return true;
}
示例7: player
LoadPanel::LoadPanel(PlayerInfo &player, UI &gamePanels)
: player(player), gamePanels(gamePanels), selectedPilot(player.Identifier())
{
// If you have a player loaded, and the player is on a planet, makes sure
// the player is saved so that any snapshot you create will be of the
// player's current state, rather than one planet ago.
if(player.GetPlanet() && !player.IsDead())
player.Save();
UpdateLists();
}
示例8: player
SpaceportPanel::SpaceportPanel(PlayerInfo &player)
: player(player)
{
SetTrapAllEvents(false);
text.SetFont(FontSet::Get(14));
text.SetAlignment(WrappedText::JUSTIFIED);
text.SetWrapWidth(480);
text.Wrap(player.GetPlanet()->SpaceportDescription());
}
示例9: player
LoadPanel::LoadPanel(PlayerInfo &player, UI &gamePanels)
: player(player), gamePanels(gamePanels), selectedPilot(player.Identifier())
{
// If you have a player loaded, and the player is on a planet, makes sure
// the player is saved so that any snapshot you create will be of the
// player's current state, rather than one planet ago. Only do this if the
// game is paused, i.e. the "main panel" is not on top:
if(player.GetPlanet() && !player.IsDead() && !gamePanels.IsTop(&*gamePanels.Root()))
player.Save();
UpdateLists();
}
示例10: player
InfoPanel::InfoPanel(PlayerInfo &player, bool showFlagship)
: player(player), shipIt(player.Ships().begin()), showShip(showFlagship), canEdit(player.GetPlanet())
{
SetInterruptible(false);
if(showFlagship)
while(shipIt != player.Ships().end() && shipIt->get() != player.Flagship())
++shipIt;
UpdateInfo();
}
示例11: if
ShipInfoPanel::ShipInfoPanel(PlayerInfo &player, int index)
: player(player), shipIt(player.Ships().begin()), canEdit(player.GetPlanet())
{
SetInterruptible(false);
// If a valid ship index was given, show that ship.
if(static_cast<unsigned>(index) < player.Ships().size())
shipIt += index;
else if(player.Flagship())
{
// Find the player's flagship. It may not be first in the list, if the
// first item in the list cannot be a flagship.
while(shipIt != player.Ships().end() && shipIt->get() != player.Flagship())
++shipIt;
}
UpdateInfo();
}
示例12: player
PlanetPanel::PlanetPanel(PlayerInfo &player, function<void()> callback)
: player(player), callback(callback),
planet(*player.GetPlanet()), system(*player.GetSystem()),
ui(*GameData::Interfaces().Get("planet"))
{
trading.reset(new TradingPanel(player));
bank.reset(new BankPanel(player));
spaceport.reset(new SpaceportPanel(player));
hiring.reset(new HiringPanel(player));
text.SetFont(FontSet::Get(14));
text.SetAlignment(WrappedText::JUSTIFIED);
text.SetWrapWidth(480);
text.Wrap(planet.Description());
// Since the loading of landscape images is deferred, make sure that the
// landscapes for this system are loaded before showing the planet panel.
GameData::Preload(planet.Landscape());
GameData::FinishLoading();
}
示例13: CanComplete
bool Mission::CanComplete(const PlayerInfo &player) const
{
if(player.GetPlanet() != destination || !waypoints.empty())
return false;
if(!toComplete.Test(player.Conditions()))
return false;
auto it = actions.find(COMPLETE);
if(it != actions.end() && !it->second.CanBeDone(player))
return false;
for(const NPC &npc : npcs)
if(!npc.HasSucceeded(player.GetSystem()))
return false;
// If any of the cargo for this mission is being carried by a ship that is
// not in this system, the mission cannot be completed right now.
for(const auto &ship : player.Ships())
if(ship->GetSystem() != player.GetSystem() && ship->Cargo().Get(this))
return false;
return true;
}
示例14: Do
// When the state of this mission changes, it may make changes to the player
// information or show new UI panels. PlayerInfo::MissionCallback() will be
// used as the callback for any UI panel that returns a value.
bool Mission::Do(Trigger trigger, PlayerInfo &player, UI *ui)
{
if(trigger == STOPOVER)
{
// If this is not one of this mission's stopover planets, or if it is
// not the very last one that must be visited, do nothing.
auto it = stopovers.find(player.GetPlanet());
if(it == stopovers.end())
return false;
for(const NPC &npc : npcs)
if(npc.IsLeftBehind(player.GetSystem()))
{
ui->Push(new Dialog("This is a stop for one of your missions, but you have left a ship behind."));
return false;
}
stopovers.erase(it);
if(!stopovers.empty())
return false;
}
if(trigger == ACCEPT)
{
++player.Conditions()[name + ": offered"];
++player.Conditions()[name + ": active"];
}
else if(trigger == DECLINE)
++player.Conditions()[name + ": offered"];
else if(trigger == FAIL)
--player.Conditions()[name + ": active"];
else if(trigger == COMPLETE)
{
--player.Conditions()[name + ": active"];
++player.Conditions()[name + ": done"];
}
// "Jobs" should never show dialogs when offered, nor should they call the
// player's mission callback.
if(trigger == OFFER && location == JOB)
ui = nullptr;
auto it = actions.find(trigger);
if(it == actions.end())
{
// If a mission has no "on offer" field, it is automatically accepted.
if(trigger == OFFER && location != JOB)
player.MissionCallback(Conversation::ACCEPT);
return true;
}
if(!it->second.CanBeDone(player))
return false;
// Set the "reputation" conditions so we can check if this action changed
// any of them.
for(const auto &it : GameData::Governments())
{
int rep = it.second.Reputation();
player.Conditions()["reputation: " + it.first] = rep;
}
it->second.Do(player, ui, destination ? destination->GetSystem() : nullptr);
// Check if any reputation conditions were updated.
for(const auto &it : GameData::Governments())
{
int rep = it.second.Reputation();
int newRep = player.Conditions()["reputation: " + it.first];
if(newRep != rep)
it.second.AddReputation(newRep - rep);
}
return true;
}
示例15: main
//.........这里部分代码省略.........
{
UI &activeUI = (menuPanels.IsEmpty() ? gamePanels : menuPanels);
// The caps lock key slows the game down (to make it easier to
// see and debug things that are happening quickly).
if(debugMode && (event.type == SDL_KEYDOWN || event.type == SDL_KEYUP)
&& event.key.keysym.sym == SDLK_CAPSLOCK)
{
timer.SetFrameRate((event.key.keysym.mod & KMOD_CAPS) ? 10 : 60);
}
else if(debugMode && event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_BACKQUOTE)
{
isPaused = !isPaused;
}
else if(event.type == SDL_KEYDOWN && menuPanels.IsEmpty()
&& Command(event.key.keysym.sym).Has(Command::MENU)
&& !gamePanels.IsEmpty() && gamePanels.Top()->IsInterruptible())
{
menuPanels.Push(shared_ptr<Panel>(
new MenuPanel(player, gamePanels)));
}
else if(event.type == SDL_QUIT)
{
menuPanels.Quit();
}
else if(event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
{
int width = event.window.data1 & ~1;
int height = event.window.data2 & ~1;
if(width != Screen::RawWidth() || height != Screen::RawHeight())
{
Screen::SetRaw(width, height);
if((event.window.data1 | event.window.data2) & 1)
SDL_SetWindowSize(window, Screen::RawWidth(), Screen::RawHeight());
SDL_GL_GetDrawableSize(window, &width, &height);
glViewport(0, 0, width, height);
}
}
else if(event.type == SDL_KEYDOWN
&& (Command(event.key.keysym.sym).Has(Command::FULLSCREEN)
|| (event.key.keysym.sym == SDLK_RETURN && event.key.keysym.mod & KMOD_ALT)))
{
if(restoreWidth)
{
SDL_SetWindowFullscreen(window, 0);
Screen::SetRaw(restoreWidth, restoreHeight);
SDL_SetWindowSize(window, Screen::RawWidth(), Screen::RawHeight());
restoreWidth = 0;
restoreHeight = 0;
}
else
{
restoreWidth = Screen::RawWidth();
restoreHeight = Screen::RawHeight();
Screen::SetRaw(maxWidth, maxHeight);
SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);
}
int width, height;
SDL_GL_GetDrawableSize(window, &width, &height);
glViewport(0, 0, width, height);
}
else if(activeUI.Handle(event))
{
// No need to do anything more!
}
}
Font::ShowUnderlines(SDL_GetModState() & KMOD_ALT);
// Tell all the panels to step forward, then draw them.
((!isPaused && menuPanels.IsEmpty()) ? gamePanels : menuPanels).StepAll();
Audio::Step();
// That may have cleared out the menu, in which case we should draw
// the game panels instead:
(menuPanels.IsEmpty() ? gamePanels : menuPanels).DrawAll();
SDL_GL_SwapWindow(window);
timer.Wait();
}
// If you quit while landed on a planet, save the game.
if(player.GetPlanet())
player.Save();
// The Preferences class reads the screen dimensions, so update them if
// the window is full screen:
bool isFullscreen = (restoreWidth != 0);
Preferences::Set("fullscreen", isFullscreen);
if(isFullscreen)
Screen::SetRaw(restoreWidth, restoreHeight);
Preferences::Save();
Cleanup(window, context);
}
catch(const runtime_error &error)
{
DoError(error.what());
}
return 0;
}