本文整理汇总了C++中PlayerInfo::Flagship方法的典型用法代码示例。如果您正苦于以下问题:C++ PlayerInfo::Flagship方法的具体用法?C++ PlayerInfo::Flagship怎么用?C++ PlayerInfo::Flagship使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PlayerInfo
的用法示例。
在下文中一共展示了PlayerInfo::Flagship方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: player
HailPanel::HailPanel(PlayerInfo &player, const StellarObject *object)
: player(player), planet(object->GetPlanet()),
sprite(object->GetSprite().GetSprite()), unit(object->Position().Unit())
{
SetInterruptible(false);
const Government *gov = player.GetSystem()->GetGovernment();
if(planet)
header = gov->GetName() + " " + planet->Noun() + " \"" + planet->Name() + "\":";
if(planet && player.Flagship())
{
for(const Mission &mission : player.Missions())
if(mission.HasClearance(planet) && mission.ClearanceMessage() != "auto"
&& mission.HasFullClearance())
{
planet->Bribe();
message = mission.ClearanceMessage();
return;
}
if(planet->CanLand())
message = "You are cleared to land, " + player.Flagship()->Name() + ".";
else
{
SetBribe(planet->GetBribeFraction());
if(bribe)
message = "If you want to land here, it'll cost you "
+ Format::Number(bribe) + " credits.";
else
message = "I'm afraid we can't permit you to land here.";
}
}
}
示例2: BlockedMessage
// Get a string to show if this mission is "blocked" from being offered
// because it requires you to have more passenger or cargo space free. After
// calling this function, any future calls to it will return an empty string
// so that you do not display the same message multiple times.
string Mission::BlockedMessage(const PlayerInfo &player)
{
if(blocked.empty())
return "";
int extraCrew = 0;
if(player.Flagship())
extraCrew = player.Flagship()->Crew() - player.Flagship()->RequiredCrew();
int cargoNeeded = cargoSize - (player.Cargo().Free() + player.Cargo().CommoditiesSize());
int bunksNeeded = passengers - (player.Cargo().Bunks() + extraCrew);
if(cargoNeeded < 0 && bunksNeeded < 0)
return "";
map<string, string> subs;
subs["<first>"] = player.FirstName();
subs["<last>"] = player.LastName();
if(player.Flagship())
subs["<ship>"] = player.Flagship()->Name();
ostringstream out;
if(bunksNeeded > 0)
out << (bunksNeeded == 1 ? "another bunk" : to_string(bunksNeeded) + " more bunks");
if(bunksNeeded > 0 && cargoNeeded > 0)
out << " and ";
if(cargoNeeded > 0)
out << (cargoNeeded == 1 ? "another ton" : to_string(cargoNeeded) + " more tons") << " of cargo space";
subs["<capacity>"] = out.str();
string message = Format::Replace(blocked, subs);
blocked.clear();
return message;
}
示例3: HasSpace
bool Mission::HasSpace(const PlayerInfo &player) const
{
int extraCrew = 0;
if(player.Flagship())
extraCrew = player.Flagship()->Crew() - player.Flagship()->RequiredCrew();
return (cargoSize <= player.Cargo().Free() + player.Cargo().CommoditiesSize()
&& passengers <= player.Cargo().Bunks() + extraCrew);
}
示例4: player
ConversationPanel::ConversationPanel(PlayerInfo &player, const Conversation &conversation, const System *system)
: player(player), conversation(conversation), scroll(0), system(system)
{
subs["<first>"] = player.FirstName();
subs["<last>"] = player.LastName();
if(player.Flagship())
subs["<ship>"] = player.Flagship()->Name();
Goto(0);
}
示例5: if
HailPanel::HailPanel(PlayerInfo &player, const shared_ptr<Ship> &ship)
: player(player), ship(ship),
sprite(ship->GetSprite().GetSprite()), unit(2. * ship->Unit())
{
SetInterruptible(false);
const Government *gov = ship->GetGovernment();
header = gov->GetName() + " ship \"" + ship->Name() + "\":";
if(gov->IsEnemy())
{
SetBribe(gov->GetBribeFraction());
if(bribe)
message = "If you want us to leave you alone, it'll cost you "
+ Format::Number(bribe) + " credits.";
}
else if(ship->IsDisabled())
{
const Ship *flagship = player.Flagship();
if(!flagship->JumpsRemaining() || flagship->IsDisabled())
message = "Sorry, we can't help you, because our ship is disabled.";
else
message = "Our ship has been disabled! Please come board our ship and patch us up!";
}
else
{
// Is the player in any need of assistance?
const Ship *flagship = player.Flagship();
// Check if the player is out of fuel.
if(!flagship->JumpsRemaining())
{
playerNeedsHelp = true;
canGiveFuel = ship->CanRefuel(*flagship);
}
// Check if the player is disabled.
if(flagship->IsDisabled())
{
playerNeedsHelp = true;
canRepair = true;
}
if(canGiveFuel || canRepair)
message = "Looks like you've gotten yourself into a bit of trouble. "
"Would you like us to ";
if(canGiveFuel && canRepair)
message += "patch you up and give you some fuel?";
else if(canGiveFuel)
message += "give you some fuel?";
else if(canRepair)
message += "patch you up?";
}
if(message.empty())
message = ship->GetHail();
}
示例6: player
MapPanel::MapPanel(PlayerInfo &player, int commodity, const System *special)
: player(player), distance(player),
playerSystem(player.Flagship()->GetSystem()),
selectedSystem(special ? special : player.Flagship()->GetSystem()),
specialSystem(special),
commodity(commodity)
{
SetIsFullScreen(true);
center = Point(0., 0.) - selectedSystem->Position();
}
示例7: player
// If a player is given, the map will only use hyperspace paths known to the
// player; that is, one end of the path has been visited. Also, if the
// player's flagship has a jump drive, the jumps will be make use of it.
DistanceMap::DistanceMap(const PlayerInfo &player, const System *center)
: player(&player)
{
if(!player.Flagship())
return;
if(!center)
center = player.Flagship()->GetSystem();
if(!center)
return;
Init(center, player.Flagship());
}
示例8: if
// Constructor.
ConversationPanel::ConversationPanel(PlayerInfo &player, const Conversation &conversation, const System *system, const Ship *ship)
: player(player), conversation(conversation), scroll(0.), system(system)
{
// These substitutions need to be applied on the fly as each paragraph of
// text is prepared for display.
subs["<first>"] = player.FirstName();
subs["<last>"] = player.LastName();
if(ship)
subs["<ship>"] = ship->Name();
else if(player.Flagship())
subs["<ship>"] = player.Flagship()->Name();
// Begin at the start of the conversation.
Goto(0);
}
示例9: 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);
}
示例10: CanBeDone
// Check if this action can be completed right now. It cannot be completed
// if it takes away money or outfits that the player does not have.
bool MissionAction::CanBeDone(const PlayerInfo &player) const
{
if(player.Accounts().Credits() < -payment)
return false;
const Ship *flagship = player.Flagship();
for(const auto &it : gifts)
{
if(it.second > 0)
continue;
// The outfit can be taken from the player's cargo or from the flagship.
int available = player.Cargo().Get(it.first);
for(const auto &ship : player.Ships())
available += ship->Cargo().Get(it.first);
if(flagship)
available += flagship->OutfitCount(it.first);
// If the gift "count" is 0, that means to check that the player has at
// least one of these items.
if(available < -it.second + !it.second)
return false;
}
return true;
}
示例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
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();
}
示例13: 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());
}
示例14: player
Engine::Engine(PlayerInfo &player)
: player(player)
{
// 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());
// Figure out what planet the player is landed on, if any.
const StellarObject *object = player.GetStellarObject();
if(object)
center = object->Position();
// Now we know the player's current position. Draw the planets.
draw[calcTickTock].SetCenter(center);
radar[calcTickTock].SetCenter(center);
for(const StellarObject &object : player.GetSystem()->Objects())
if(object.HasSprite())
{
draw[calcTickTock].Add(object);
double r = max(2., object.Radius() * .03 + .5);
radar[calcTickTock].Add(RadarType(object), object.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());
}
示例15: Do
void MissionAction::Do(PlayerInfo &player, UI *ui, const System *destination) const
{
bool isOffer = (trigger == "offer");
if(!conversation.IsEmpty() && ui)
{
ConversationPanel *panel = new ConversationPanel(player, conversation, destination);
if(isOffer)
panel->SetCallback(&player, &PlayerInfo::MissionCallback);
ui->Push(panel);
}
else if(!dialogText.empty() && ui)
{
map<string, string> subs;
subs["<first>"] = player.FirstName();
subs["<last>"] = player.LastName();
if(player.Flagship())
subs["<ship>"] = player.Flagship()->Name();
string text = Format::Replace(dialogText, subs);
if(isOffer)
ui->Push(new Dialog(text, player, destination));
else
ui->Push(new Dialog(text));
}
else if(isOffer && ui)
player.MissionCallback(Conversation::ACCEPT);
// If multiple outfits are being transferred, first remove them before
// adding any new ones.
for(const auto &it : gifts)
if(it.second < 0)
DoGift(player, it.first, it.second, ui);
for(const auto &it : gifts)
if(it.second > 0)
DoGift(player, it.first, it.second, ui);
if(payment)
player.Accounts().AddCredits(payment);
for(const auto &it : events)
player.AddEvent(*GameData::Events().Get(it.first), player.GetDate() + it.second);
if(!fail.empty())
{
// Failing missions invalidates iterators into the player's mission list,
// but does not immediately delete those missions. So, the safe way to
// iterate over all missions is to make a copy of the list before we
// begin to remove items from it.
vector<const Mission *> failedMissions;
for(const Mission &mission : player.Missions())
if(fail.count(mission.Identifier()))
failedMissions.push_back(&mission);
for(const Mission *mission : failedMissions)
player.RemoveMission(Mission::FAIL, *mission, ui);
}
// Check if applying the conditions changes the player's reputations.
player.SetReputationConditions();
conditions.Apply(player.Conditions());
player.CheckReputationConditions();
}