ZString GetString(int indent, const Orientation& orient) { return "Orientation(" + GetString(indent, orient.GetUp()) + ", " + GetString(indent, orient.GetForward()) + ")"; }
//------------------------------------------------------------------------------ Goal* Mission5::CreateGoal03 (void) { GoalList* pGoalList = new GoalList; // tm_5_12 // Attention, Cadet, new contact: an enemy scout. In some // cases, utility craft like miners will run home for // protection, but you can tell them to hide by giving them // orders to go to a base. You left-click the miners, then // left-click the Go To command, and then right-click ΓΏ the // base. { Goal* pGoal = CreatePlaySoundGoal (tm_5_12Sound); IwarpIGC* pAlephMars = trekClient.GetCore ()->GetWarp (1052); Orientation alephMarsOrientation = pAlephMars->GetOrientation (); // create the enemy scout Vector pos = pAlephMars->GetPosition () + (alephMarsOrientation.GetForward () * random (800.0f, 1200.0f)) + (alephMarsOrientation.GetRight () * random(-100.0f, 200.0f)); CreateDroneAction* pCreateDroneAction = new CreateDroneAction ("Enemy Scout", m_enemyScoutID, 310, 1, c_ptWingman); pCreateDroneAction->SetCreatedLocation (GetStartSectorID () + 1, pos); pGoal->AddStartAction (pCreateDroneAction); // tell the enemy scout of these guys to do nothing pGoal->AddStartAction (new SetCommandAction (m_enemyScoutID, c_cmdAccepted, NULL, c_cidDoNothing)); pGoal->AddStartAction (new SetCommandAction (m_enemyScoutID, c_cmdCurrent, NULL, c_cidDoNothing)); // set its signature to infinity pGoal->AddStartAction (new SetSignatureAction (OT_ship, m_enemyScoutID, 1.0e6f)); pGoalList->AddGoal (pGoal); } // wait half second pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f))); // tm_5_13 // Most enemy ships can be considered a threat to your miners // unless you have plenty of defending pilots ? which you // don?t. So let's get those miners to shelter ? send all // three of them to the base. pGoalList->AddGoal (CreatePlaySoundGoal (tm_5_13Sound)); // tm_5_13r // Send all three of your miners to base for safety. { Condition* pAndConditionA = new AndCondition (new GetCommandCondition (m_miner2ID, c_cidGoto), new GetCommandCondition (m_miner3ID, c_cidGoto)); Condition* pConditionB = new GetCommandCondition (m_miner4ID, c_cidGoto); Goal* pGoal = new Goal (new AndCondition (pAndConditionA, pConditionB)); pGoal->AddStartAction (new MessageAction ("Order all three miners back to base for safety.")); pGoal->AddConstraintCondition (CreateTooLongCondition (30.0f, tm_5_13rSound)); pGoalList->AddGoal (pGoal); } // wait half second pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f))); // tm_5_14 // Good! Utility ships like miners and constructors are // drones. They will always accept your orders. pGoalList->AddGoal (CreatePlaySoundGoal (tm_5_14Sound)); // wait half second pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f))); return new Goal (pGoalList); }