本文整理汇总了C++中Mission::HasSpace方法的典型用法代码示例。如果您正苦于以下问题:C++ Mission::HasSpace方法的具体用法?C++ Mission::HasSpace怎么用?C++ Mission::HasSpace使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mission
的用法示例。
在下文中一共展示了Mission::HasSpace方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: StepEvents
// Handle ShipEvents from this and previous Engine::Step calls. Start with the
// oldest and then process events until any create a new UI element.
void MainPanel::StepEvents(bool &isActive)
{
while(isActive && !eventQueue.empty())
{
const ShipEvent &event = eventQueue.front();
const Government *actor = event.ActorGovernment();
// Pass this event to the player, to update conditions and make
// any new UI elements (e.g. an "on enter" dialog) from their
// active missions.
if(!handledFront)
player.HandleEvent(event, GetUI());
handledFront = true;
isActive = (GetUI()->Top().get() == this);
// If we can't safely display a new UI element (i.e. an active
// mission created a UI element), then stop processing events
// until the current Conversation or Dialog is resolved. This
// will keep the current event in the queue, so we can still
// check it for various special cases involving the player.
if(!isActive)
break;
// Handle boarding events.
// 1. Boarding an NPC may "complete" it (i.e. "npc board"). Any UI element that
// completion created has now closed, possibly destroying the event target.
// 2. Boarding an NPC may create a mission (e.g. it thanks you for the repair/refuel,
// asks you to complete a quest, bribes you into leaving it alone, or silently spawns
// hostile ships). If boarding creates a mission with an "on offer" conversation, the
// ConversationPanel will only let the player plunder a hostile NPC if the mission is
// declined or deferred - an "accept" is assumed to have bought the NPC its life.
// 3. Boarding a hostile NPC that does not display a mission UI element will display
// the BoardingPanel, allowing the player to plunder it.
const Ship *flagship = player.Flagship();
if((event.Type() & (ShipEvent::BOARD | ShipEvent::ASSIST)) && actor->IsPlayer()
&& !event.Target()->IsDestroyed() && flagship && event.Actor().get() == flagship)
{
Mission *mission = player.BoardingMission(event.Target());
if(mission && mission->HasSpace(*flagship))
mission->Do(Mission::OFFER, player, GetUI());
else if(mission)
player.HandleBlockedMissions((event.Type() & ShipEvent::BOARD)
? Mission::BOARDING : Mission::ASSISTING, GetUI());
// Determine if a Dialog or ConversationPanel is being drawn next frame.
isActive = (GetUI()->Top().get() == this);
// Confirm that this event's target is not destroyed and still an
// enemy before showing the BoardingPanel (as a mission NPC's
// completion conversation may have allowed it to be destroyed or
// captured).
// TODO: This BoardingPanel should not be displayed if a mission NPC
// completion conversation creates a BoardingPanel for it, or if the
// NPC completion conversation ends via `accept,` even if the ship is
// still hostile.
if(isActive && (event.Type() == ShipEvent::BOARD) && !event.Target()->IsDestroyed()
&& event.Target()->GetGovernment()->IsEnemy())
{
// Either no mission activated, or the one that did was "silent."
GetUI()->Push(new BoardingPanel(player, event.Target()));
isActive = false;
}
}
// Handle scan events of or by the player.
if(event.Type() & (ShipEvent::SCAN_CARGO | ShipEvent::SCAN_OUTFITS))
{
if(actor->IsPlayer())
{
ShowScanDialog(event);
isActive = false;
}
else if(event.TargetGovernment()->IsPlayer())
{
string message = actor->Fine(player, event.Type(), &*event.Target());
if(!message.empty())
{
GetUI()->Push(new Dialog(message));
isActive = false;
}
}
}
// Remove the fully-handled event.
eventQueue.pop_front();
handledFront = false;
}
}