本文整理汇总了C++中PlayerInfo::Ships方法的典型用法代码示例。如果您正苦于以下问题:C++ PlayerInfo::Ships方法的具体用法?C++ PlayerInfo::Ships怎么用?C++ PlayerInfo::Ships使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PlayerInfo
的用法示例。
在下文中一共展示了PlayerInfo::Ships方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: 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();
}
示例2: player
InfoPanel::InfoPanel(PlayerInfo &player)
: player(player), shipIt(player.Ships().begin()), showShip(false), canEdit(player.GetPlanet())
{
SetInterruptible(false);
UpdateInfo();
}
示例3: 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;
}
示例4: 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();
}
示例5: 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;
}
示例6: Fine
// Check to see if the player has done anything they should be fined for.
string Politics::Fine(PlayerInfo &player, const Government *gov, int scan, const Ship *target, double security)
{
// Do nothing if you have already been fined today, or if you evade
// detection.
auto it = fined.find(gov);
if(it != fined.end() || Random::Real() > security || !gov->GetFineFraction())
return "";
string reason;
int64_t maxFine = 0;
for(const shared_ptr<Ship> &ship : player.Ships())
{
// Check if the ship evades being scanned due to interference plating.
if(Random::Real() > 1. / (1. + ship->Attributes().Get("scan interference")))
continue;
if(target && target != &*ship)
continue;
if(ship->GetSystem() != player.GetSystem())
continue;
if(!scan || (scan & ShipEvent::SCAN_CARGO))
{
int64_t fine = ship->Cargo().IllegalCargoFine();
if((fine > maxFine && maxFine >= 0) || fine < 0)
{
maxFine = fine;
reason = "carrying illegal cargo.";
}
}
if(!scan || (scan & ShipEvent::SCAN_OUTFITS))
{
for(const auto &it : ship->Outfits())
if(it.second)
{
int64_t fine = it.first->Get("illegal");
if((fine > maxFine && maxFine >= 0) || fine < 0)
{
maxFine = fine;
reason = "having illegal outfits installed on your ship.";
}
}
}
}
if(maxFine < 0)
{
gov->Offend(ShipEvent::ATROCITY);
if(!scan)
reason = "atrocity";
else
reason = "After scanning your ship, the " + gov->GetName()
+ " captain hails you with a grim expression on his face. He says, \"You are guilty of "
+ reason + " The penalty for your actions is death. Goodbye.\"";
}
else if(maxFine > 0)
{
// Scale the fine based on how lenient this government is.
maxFine = maxFine * gov->GetFineFraction() + .5;
reason = "The " + gov->GetName() + " fines you "
+ Format::Number(maxFine) + " credits for " + reason;
player.Accounts().AddFine(maxFine);
fined.insert(gov);
}
return reason;
}
示例7: UpdateKeys
void AI::UpdateKeys(PlayerInfo &player, bool isActive)
{
shift = (SDL_GetModState() & KMOD_SHIFT);
Command oldHeld = keyHeld;
keyHeld.ReadKeyboard();
keyDown = keyHeld.AndNot(oldHeld);
if(keyHeld.Has(AutopilotCancelKeys()))
keyStuck.Clear();
if(keyStuck.Has(Command::JUMP) && !player.HasTravelPlan())
keyStuck.Clear(Command::JUMP);
const Ship *flagship = player.Flagship();
if(!isActive || !flagship || flagship->IsDestroyed())
return;
// Only toggle the "cloak" command if one of your ships has a cloaking device.
if(keyDown.Has(Command::CLOAK))
for(const auto &it : player.Ships())
if(it->Attributes().Get("cloak"))
{
isCloaking = !isCloaking;
Messages::Add(isCloaking ? "Engaging cloaking device." : "Disengaging cloaking device.");
break;
}
// Toggle your secondary weapon.
if(keyDown.Has(Command::SELECT))
player.SelectNext();
// The commands below here only apply if you have escorts or fighters.
if(player.Ships().size() < 2)
return;
// Only toggle the "deploy" command if one of your ships has fighter bays.
if(keyDown.Has(Command::DEPLOY))
for(const auto &it : player.Ships())
if(it->HasBays())
{
isLaunching = !isLaunching;
Messages::Add(isLaunching ? "Deploying fighters" : "Recalling fighters.");
break;
}
shared_ptr<Ship> target = flagship->GetTargetShip();
if(keyDown.Has(Command::FIGHT) && target)
{
sharedTarget = target;
holdPosition = false;
moveToMe = false;
Messages::Add("All your ships are focusing their fire on \"" + target->Name() + "\".");
}
if(keyDown.Has(Command::HOLD))
{
sharedTarget.reset();
holdPosition = !holdPosition;
moveToMe = false;
Messages::Add(holdPosition ? "Your fleet is holding position."
: "Your fleet is no longer holding position.");
}
if(keyDown.Has(Command::GATHER))
{
sharedTarget.reset();
holdPosition = false;
moveToMe = !moveToMe;
Messages::Add(moveToMe ? "Your fleet is gathering around your flagship."
: "Your fleet is no longer gathering around your flagship.");
}
if(sharedTarget.lock() && sharedTarget.lock()->IsDisabled())
sharedTarget.reset();
}