#include "pch.h"
#include "Mission4.h"
#include "Training.h"
#include "Goal.h"
#include "GoalList.h"
#include "Predicate.h"
#include "TrueCondition.h"
#include "FalseCondition.h"
#include "AndCondition.h"
#include "OrCondition.h"
#include "NotCondition.h"
#include "ElapsedTimeCondition.h"
#include "ObjectMovingTowardsCondition.h"
#include "ObjectWithinRadiusCondition.h"
#include "ObjectPointingAtCondition.h"
#include "ConditionalAction.h"
#include "ConditionList.h"
#include "ActionList.h"
#include "MessageAction.h"
#include "PlaySoundAction.h"
#include "SetCommandAction.h"
#include "NoAction.h"
#include "NTimesCondition.h"
#include "EndMissionAction.h"
#include "ResetAction.h"
#include "ResetShipAction.h"
#include "SoundFinishedCondition.h"
#include "SetDisplayModeAction.h"
#include "TurnShipAboutCondition.h"
#include "GetRadarLODCondition.h"
#include "SetRadarLODAction.h"
#include "GetControlActiveCondition.h"
#include "GetStateBitsCondition.h"
#include "GetShipIsStoppedCondition.h"
#include "GetShipIsDestroyedCondition.h"
#include "SetControlConstraintsAction.h"
#include "GetAutopilotCondition.h"
#include "SetAutopilotAction.h"
#include "GetTargetCondition.h"
#include "GetSectorCondition.h"
#include "GetCommandCondition.h"
#include "SetSignatureAction.h"
#include "GetProbeCountCondition.h"
#include "CreateProbeAction.h"
#include "CreateWaypointAction.h"
#include "ShowPaneAction.h"
#include "ShowEyeballAction.h"
#include "SetHUDOverlayAction.h"
#include "GetKeyCondition.h"
#include "TurnToAction.h"
#include "ToggleWeaponAction.h"
#include "SwapWeaponAction.h"
#include "DoDamageAction.h"
#include "CurrentTarget.h"
#include "PlayerShipTarget.h"
#include "RepairRearmAction.h"
#include "SetControlsAction.h"
#include "CreateDroneAction.h"
#include "ProxyCondition.h"
#include "ShipSeesObjectCondition.h"
#include "GetChatCondition.h"
namespace Training
{
Mission4::~Mission4 (void)
{
}
int Mission4::GetMissionID (void)
{
return c_TM_4_Enemy_Engagement;
}
SectorID Mission4::GetStartSectorID (void)
{
return 1030;
}
bool Mission4::ShipLanded (void)
{
Terminate ();
return false;
}
void Mission4::CreateUniverse (void)
{
LoadUniverse ("training_3", 486, 1030); IshipIGC* pShip = trekClient.GetShip();
IsideIGC* pSide = pShip->GetSide ();
GlobalAttributeSet gas = pSide->GetGlobalAttributeSet ();
gas.SetAttribute (c_gaMaxEnergy, 10.0f);
pSide->SetGlobalAttributeSet (gas);
ImissionIGC* pCore = trekClient.GetCore();
ImodelIGC* pStation = pCore->GetModel (OT_station, 1030);
IshipIGC* pCommander = pCore->GetShip (m_commanderID);
pCommander->SetStation (static_cast<IstationIGC*> (pStation));
pCommander->SetCommand (c_cmdAccepted, NULL, c_cidDoNothing);
pCommander->SetCommand (c_cmdCurrent, NULL, c_cidDoNothing);
pCommander->SetAutopilot (false);
trekClient.fGroupFire = true;
IpartIGC* pPart = pShip->GetMountedPart (ET_Magazine, 0);
if (pPart)
pPart->Terminate ();
}
Condition* Mission4::CreateMission (void)
{
GoalList* pGoalList = new GoalList;
Goal* pGoal = new Goal (pGoalList);
ImissionIGC* pMission = trekClient.GetCore ();
m_enemyScoutID = pMission->GenerateNewShipID ();
m_enemyMiner1ID = pMission->GenerateNewShipID ();
m_enemyMiner2ID = pMission->GenerateNewShipID ();
m_enemyMiner3ID = pMission->GenerateNewShipID ();
m_enemyMiner4ID = pMission->GenerateNewShipID ();
m_builderID = pMission->GenerateNewShipID ();
pGoalList->AddGoal (CreateGoal01 ());
pGoalList->AddGoal (CreateGoal02 ());
pGoalList->AddGoal (CreateGoal03 ());
pGoalList->AddGoal (CreateGoal04 ());
pGoalList->AddGoal (CreateGoal05 ());
pGoalList->AddGoal (CreateGoal06 ());
pGoalList->AddGoal (CreateGoal07 ());
pGoalList->AddGoal (CreateGoal08 ());
pGoalList->AddGoal (CreateGoal09 ());
pGoalList->AddGoal (CreateGoal10 ());
return pGoal;
}
Goal* Mission4::CreateGoal01 (void)
{
GoalList* pGoalList = new GoalList;
{
Goal* pGoal = CreatePlaySoundGoal (salCommenceScanSound);
SetControlConstraintsAction* pSetControlConstraintsAction = new SetControlConstraintsAction;
pSetControlConstraintsAction->DisableInputAction (0xffffffff);
pSetControlConstraintsAction->ScaleInputControl (c_axisYaw, 0.0f);
pSetControlConstraintsAction->ScaleInputControl (c_axisPitch, 0.0f);
pSetControlConstraintsAction->ScaleInputControl (c_axisRoll, 0.0f);
pSetControlConstraintsAction->ScaleInputControl (c_axisThrottle, 0.0f);
pGoal->AddStartAction (pSetControlConstraintsAction);
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (2.0f)));
pGoalList->AddGoal (CreatePlaySoundGoal (tm_4_01Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_02Sound);
pGoal->AddStartAction (new SetDisplayModeAction (TrekWindow::cmCockpit));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
return new Goal (pGoalList);
}
Goal* Mission4::CreateGoal02 (void)
{
GoalList* pGoalList = new GoalList;
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_03Sound);
pGoal->AddStartAction (new SetHUDOverlayAction (ChatTrainingOverlay));
pGoal->AddStartAction (new MessageAction ("This is a 'chat' message from the commander to you."));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = new Goal (new GetChatCondition (CHAT_EVERYONE));
pGoal->AddStartAction (new MessageAction ("Press the ENTER key to begin a chat."));
pGoal->AddStartAction (new MessageAction ("Press the TAB key to select 'All'."));
pGoal->AddStartAction (new MessageAction ("Press the ENTER key again to send the chat."));
pGoal->AddStartAction (new PlaySoundAction (tm_4_03rSound));
pGoal->AddConstraintCondition (CreateTooLongCondition (30.0f, tm_4_03rSound));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_04Sound);
pGoal->AddStartAction (new SetHUDOverlayAction (NoTrainingOverlay));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = new Goal (new GetKeyCondition (TK_FireWeapon));
pGoal->AddStartAction (new MessageAction ("Press the SPACEBAR when you are ready to proceed."));
pGoal->AddStartAction (new PlaySoundAction (tm_4_04rSound));
pGoal->AddConstraintCondition (CreateTooLongCondition (30.0f, tm_4_04rSound));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
pGoalList->AddGoal (CreatePlaySoundGoal (tm_4_05Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_06Sound);
pGoal->AddStartAction (new MessageAction ("Press the TILDE (~) key to activate the quickcomm menu."));
pGoalList->AddGoal (pGoal);
}
{
Goal* pGoal = new Goal (new GetKeyCondition (TK_FireWeapon));
pGoal->AddStartAction (new MessageAction ("Press the SPACEBAR when you are ready to proceed."));
pGoal->AddConstraintCondition (CreateTooLongCondition (30.0f, tm_4_06rSound));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
return new Goal (pGoalList);
}
Goal* Mission4::CreateGoal03 (void)
{
GoalList* pGoalList = new GoalList;
ImissionIGC* pMission = trekClient.GetCore ();
BuoyID buoyID = pMission->GenerateNewBuoyID ();
IshipIGC* pShip = trekClient.GetShip ();
pGoalList->AddGoal (CreatePlaySoundGoal (tm_4_07Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_08Sound);
IwarpIGC* pAleph = pMission->GetWarp (1030);
Vector delta = pAleph->GetPosition () - pShip->GetPosition ();
Vector position = pShip->GetPosition () + (delta * 0.25f) + (pAleph->GetOrientation ().GetUp () * (delta.Length () * 0.1f));
pGoal->AddStartAction (new CreateWaypointAction (buoyID, position, 1030));
pGoal->AddStartAction (new SetCommandAction (pShip, c_cmdQueued, OT_buoy, buoyID, c_cidGoto));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = new Goal (new GetCommandCondition (trekClient.GetShip (), c_cidGoto));
pGoal->AddStartAction (new MessageAction ("Press the INSERT key to accept the command."));
pGoal->AddStartAction (new PlaySoundAction (tm_4_08rSound));
pGoal->AddConstraintCondition (CreateTooLongCondition (30.0f, tm_4_08rSound));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (1.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_09Sound);
pGoalList->AddGoal (pGoal);
}
{
Goal* pGoal = new Goal (new ObjectWithinRadiusCondition (static_cast<ImodelIGC*> (pShip), OT_buoy, buoyID, 100.0f));
pGoal->AddConstraintCondition (new ConditionalAction (new TrueCondition, new SetAutopilotAction (trekClient.GetShip (), true)));
pGoalList->AddGoal (pGoal);
}
return new Goal (pGoalList);
}
Goal* Mission4::CreateGoal04 (void)
{
GoalList* pGoalList = new GoalList;
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_10Sound);
IshipIGC* pShip = trekClient.GetShip ();
pGoal->AddStartAction (new SetCommandAction (pShip, c_cmdAccepted, NA, NA, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (pShip, c_cmdCurrent, NA, NA, c_cidDoNothing));
pGoal->AddStartAction (new SetAutopilotAction (pShip, false));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_11Sound);
pGoal->AddStartAction (new ShowPaneAction (ofSectorPane));
pGoal->AddStartAction (new SetHUDOverlayAction (SectorTrainingOverlay));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
pGoalList->AddGoal (CreatePlaySoundGoal (tm_4_12Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
pGoalList->AddGoal (CreatePlaySoundGoal (tm_4_13Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_14Sound);
pGoal->AddStartAction (new SetHUDOverlayAction (NoTrainingOverlay));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = new Goal (new GetCommandCondition (trekClient.GetShip (), c_cidGoto));
pGoal->AddStartAction (new SetCommandAction (trekClient.GetShip (), c_cmdQueued, OT_warp, 1030, c_cidGoto));
pGoal->AddStartAction (new MessageAction ("Press the INSERT key to accept the command."));
pGoal->AddStartAction (new PlaySoundAction (tm_4_15Sound));
pGoal->AddConstraintCondition (CreateTooLongCondition (30.0f, tm_4_15Sound));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (1.5f)));
return new Goal (pGoalList);
}
Goal* Mission4::CreateGoal05 (void)
{
GoalList* pGoalList = new GoalList;
pGoalList->AddGoal (CreatePlaySoundGoal (tm_4_16Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_17Sound);
SetControlConstraintsAction* pSetControlConstraintsAction = new SetControlConstraintsAction;
pSetControlConstraintsAction->EnableInputAction (0xffffffff);
pSetControlConstraintsAction->ScaleInputControl (c_axisYaw, 1.0f);
pSetControlConstraintsAction->ScaleInputControl (c_axisPitch, 1.0f);
pSetControlConstraintsAction->ScaleInputControl (c_axisRoll, 1.0f);
pSetControlConstraintsAction->ScaleInputControl (c_axisThrottle, 1.0f);
pGoal->AddStartAction (pSetControlConstraintsAction);
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = new Goal (new ObjectWithinRadiusCondition (static_cast<ImodelIGC*> (trekClient.GetShip ()), OT_warp, 1030, 750.0f));
pGoal->AddStartAction (new MessageAction ("Fly to the aleph named 'Mars'."));
pGoal->AddStartAction (new PlaySoundAction (tm_4_17rSound));
pGoal->AddConstraintCondition (CreateTooLongCondition (60.0f, tm_4_17rSound));
pGoalList->AddGoal (pGoal);
}
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_18Sound);
pGoal->AddStartAction (new MessageAction ("Flying through the aleph to sector 'Mars'..."));
TurnToAction* pTurnToAction = new TurnToAction (trekClient.GetShip (), OT_warp, 1030);
ConditionalAction* pConditionalAction = new ConditionalAction (new TrueCondition, pTurnToAction);
pGoal->AddConstraintCondition (pConditionalAction);
pGoalList->AddGoal (pGoal);
}
{
Goal* pGoal = new Goal (new GetSectorCondition (trekClient.GetShip (), 1031));
SetControlsAction* pSetControlsAction = new SetControlsAction;
pSetControlsAction->SetInputControl (c_axisThrottle, 0.5f);
pGoal->AddConstraintCondition (new ConditionalAction (new TrueCondition, pSetControlsAction));
IwarpIGC* pAleph = trekClient.GetCore ()->GetWarp (1032);
{
Vector pos = pAleph->GetPosition () + Vector (random(-300.0f, 300.0f), random(-300.0f, 300.0f), random(-300.0f, 300.0f));
CreateDroneAction* pCreateDroneAction = new CreateDroneAction ("Enemy Miner 01", m_enemyMiner1ID, 338, 1, c_ptMiner);
pCreateDroneAction->SetCreatedLocation (1031, pos);
pGoal->AddStartAction (pCreateDroneAction);
}
{
Vector pos = pAleph->GetPosition () + Vector (random(-300.0f, 300.0f), random(-300.0f, 300.0f), random(-300.0f, 300.0f));
CreateDroneAction* pCreateDroneAction = new CreateDroneAction ("Enemy Miner 02", m_enemyMiner2ID, 338, 1, c_ptMiner);
pCreateDroneAction->SetCreatedLocation (1031, pos);
pGoal->AddStartAction (pCreateDroneAction);
}
{
Vector pos = pAleph->GetPosition () + Vector (random(-300.0f, 300.0f), random(-300.0f, 300.0f), random(-300.0f, 300.0f));
CreateDroneAction* pCreateDroneAction = new CreateDroneAction ("Enemy Miner 03", m_enemyMiner3ID, 338, 1, c_ptMiner);
pCreateDroneAction->SetCreatedLocation (1031, pos);
pGoal->AddStartAction (pCreateDroneAction);
}
{
Vector pos = pAleph->GetPosition () + Vector (random(-300.0f, 300.0f), random(-300.0f, 300.0f), random(-300.0f, 300.0f));
CreateDroneAction* pCreateDroneAction = new CreateDroneAction ("Enemy Miner 04", m_enemyMiner4ID, 338, 1, c_ptMiner);
pCreateDroneAction->SetCreatedLocation (1031, pos);
pGoal->AddStartAction (pCreateDroneAction);
}
pGoal->AddStartAction (new SetSignatureAction (OT_ship, m_enemyMiner1ID, 1.0e6));
pGoal->AddStartAction (new SetSignatureAction (OT_ship, m_enemyMiner2ID, 1.0e6));
pGoal->AddStartAction (new SetSignatureAction (OT_ship, m_enemyMiner3ID, 1.0e6));
pGoal->AddStartAction (new SetSignatureAction (OT_ship, m_enemyMiner4ID, 1.0e6));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner1ID, c_cmdAccepted, NULL, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner1ID, c_cmdCurrent, NULL, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner2ID, c_cmdAccepted, NULL, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner2ID, c_cmdCurrent, NULL, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner3ID, c_cmdAccepted, NULL, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner3ID, c_cmdCurrent, NULL, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner4ID, c_cmdAccepted, NULL, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner4ID, c_cmdCurrent, NULL, c_cidDoNothing));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (1.75f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_19Sound);
pGoal->AddStartAction (new SetControlsAction);
SetControlsAction* pSetControlsAction = new SetControlsAction;
SetControlConstraintsAction* pSetControlConstraintsAction = new SetControlConstraintsAction;
pSetControlConstraintsAction->DisableInputAction (0xffffffff);
pSetControlConstraintsAction->ScaleInputControl (c_axisThrottle, 0.0f);
pGoal->AddStartAction (pSetControlsAction);
pGoal->AddStartAction (pSetControlConstraintsAction);
pGoal->AddStartAction (new ShowPaneAction (ofSectorPane));
pGoal->AddStartAction (new SetHUDOverlayAction (SectorTrainingOverlay));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
return new Goal (pGoalList);
}
Goal* Mission4::CreateGoal06 (void)
{
GoalList* pGoalList = new GoalList;
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_20Sound);
pGoal->AddStartAction (new SetHUDOverlayAction (NoTrainingOverlay));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
pGoalList->AddGoal (CreatePlaySoundGoal (tm_4_21Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_22Sound);
pGoal->AddStartAction (new ShowEyeballAction (true));
pGoal->AddStartAction (new SetHUDOverlayAction (EyeballTrainingOverlay));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_23Sound);
pGoal->AddStartAction (new ShowEyeballAction (false));
pGoal->AddStartAction (new SetHUDOverlayAction (NoTrainingOverlay));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner1ID, c_cmdAccepted, NULL, c_cidNone));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner1ID, c_cmdCurrent, NULL, c_cidNone));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner2ID, c_cmdAccepted, NULL, c_cidNone));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner2ID, c_cmdCurrent, NULL, c_cidNone));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner3ID, c_cmdAccepted, NULL, c_cidNone));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner3ID, c_cmdCurrent, NULL, c_cidNone));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner4ID, c_cmdAccepted, NULL, c_cidNone));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner4ID, c_cmdCurrent, NULL, c_cidNone));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
pGoalList->AddGoal (CreatePlaySoundGoal (tm_4_24Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
pGoalList->AddGoal (CreatePlaySoundGoal (tm_4_25Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
GoalList* pGoalList2 = new GoalList;
Condition* pGetKeyCondition = new GetKeyCondition (TK_ToggleCloak);
pGoalList2->AddGoal (CreatePlaySoundGoal (tm_4_26Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = new Goal (new ProxyCondition (pGetKeyCondition));
pGoal->AddStartAction (new MessageAction ("Press the K key to activate your cloak."));
pGoal->AddStartAction (new PlaySoundAction (tm_4_26rSound));
pGoal->AddConstraintCondition (CreateTooLongCondition (30.0f, tm_4_26rSound));
pGoalList2->AddGoal (pGoal);
}
{
Goal* pGoal = new Goal (pGoalList2);
pGoal->AddConstraintCondition (pGetKeyCondition);
SetControlConstraintsAction* pSetControlConstraintsAction = new SetControlConstraintsAction;
pSetControlConstraintsAction->EnableInputAction (cloakActiveIGC);
pGoal->AddStartAction (pSetControlConstraintsAction);
pGoalList->AddGoal (pGoal);
}
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (1.5f)));
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_27Sound);
pGoal->AddStartAction (new SetHUDOverlayAction (EnergyTrainingOverlay));
pGoal->AddStartAction (new RepairRearmAction);
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
return new Goal (pGoalList);
}
Goal* Mission4::CreateGoal07 (void)
{
GoalList* pGoalList = new GoalList;
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_28Sound);
pGoal->AddStartAction (new SetHUDOverlayAction (NoTrainingOverlay));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
pGoalList->AddGoal (CreatePlaySoundGoal (tm_4_30Sound));
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
PlaySoundAction* pPlaySoundAction = new PlaySoundAction (tm_4_29Sound);
Goal* pGoal = new Goal (new AndCondition (new GetKeyCondition (TK_TargetEnemy), new SoundFinishedCondition (pPlaySoundAction)));
pGoal->AddStartAction (pPlaySoundAction);
pGoal->AddStartAction (new MessageAction ("Target an enemy miner with the E key, and destroy it if you can."));
pGoal->AddConstraintCondition (CreateTooLongCondition (20.0f, tm_4_29Sound));
pGoalList->AddGoal (pGoal);
}
{
OrCondition* pOrConditionA = new OrCondition (new GetShipIsDestroyedCondition2 (OT_ship, m_enemyMiner1ID), new GetShipIsDestroyedCondition2 (OT_ship, m_enemyMiner2ID));
OrCondition* pOrConditionB = new OrCondition (new GetShipIsDestroyedCondition2 (OT_ship, m_enemyMiner3ID), new GetShipIsDestroyedCondition2 (OT_ship, m_enemyMiner4ID));
Condition* pInSectorCondition = new GetSectorCondition (new CurrentTarget (new PlayerShipTarget), 1031);
Goal* pGoal = new Goal (new OrCondition (new OrCondition (pOrConditionA, pOrConditionB), new NotCondition (pInSectorCondition)));
SetControlConstraintsAction* pSetControlConstraintsAction = new SetControlConstraintsAction;
pSetControlConstraintsAction->EnableInputAction (0xffffffff);
pSetControlConstraintsAction->ScaleInputControl (c_axisThrottle, 1.0f);
pGoal->AddStartAction (pSetControlConstraintsAction);
{
ObjectID shipID = trekClient.GetShip ()->GetObjectID ();
Condition* pOrConditionA = new OrCondition (new ShipSeesObjectCondition (m_enemyMiner1ID, OT_ship, shipID), new ShipSeesObjectCondition (m_enemyMiner2ID, OT_ship, shipID));
Condition* pOrConditionB = new OrCondition (new ShipSeesObjectCondition (m_enemyMiner3ID, OT_ship, shipID), new ShipSeesObjectCondition (m_enemyMiner4ID, OT_ship, shipID));
Condition* pSeesCondition = new OrCondition (new OrCondition (pOrConditionA, pOrConditionB), new ShipSeesObjectCondition (m_enemyScoutID, OT_ship, shipID));
pGoal->AddConstraintCondition (new ConditionalAction (pSeesCondition, new ShowEyeballAction (true)));
pGoal->AddConstraintCondition (new ConditionalAction (new NotCondition (new ProxyCondition (pSeesCondition)), new ShowEyeballAction (false)));
}
pGoal->AddConstraintCondition (CreateTooLongCondition (30.0f, tm_4_29rSound));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
return new Goal (pGoalList);
}
Goal* Mission4::CreateGoal08 (void)
{
GoalList* pGoalList = new GoalList;
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_31Sound);
IwarpIGC* pAleph = trekClient.GetCore ()->GetWarp (1030);
Vector pos = pAleph->GetPosition () + (pAleph->GetOrientation ().GetForward () * 100.0f);
CreateDroneAction* pCreateDroneAction = new CreateDroneAction ("Constructor", m_builderID, 419, 0, c_ptBuilder);
pCreateDroneAction->SetCreatedLocation (1030, pos);
pCreateDroneAction->SetStationType (112);
pGoal->AddStartAction (pCreateDroneAction);
pGoal->AddStartAction (new SetCommandAction (m_builderID, c_cmdCurrent, OT_asteroid, 10332, c_cidBuild));
pGoal->AddStartAction (new SetCommandAction (m_builderID, c_cmdAccepted, OT_asteroid, 10332, c_cidBuild));
BuoyID buoyID = trekClient.GetCore ()->GenerateNewBuoyID ();
pGoal->AddStartAction (new CreateWaypointAction (buoyID, Vector (1000.0f, 1000.0f, 1000.0f), 1032));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner1ID, c_cmdCurrent, OT_buoy, buoyID, c_cidGoto));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner1ID, c_cmdAccepted, OT_buoy, buoyID, c_cidGoto));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner2ID, c_cmdCurrent, OT_buoy, buoyID, c_cidGoto));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner2ID, c_cmdAccepted, OT_buoy, buoyID, c_cidGoto));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner3ID, c_cmdCurrent, OT_buoy, buoyID, c_cidGoto));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner3ID, c_cmdAccepted, OT_buoy, buoyID, c_cidGoto));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner4ID, c_cmdCurrent, OT_buoy, buoyID, c_cidGoto));
pGoal->AddStartAction (new SetCommandAction (m_enemyMiner4ID, c_cmdAccepted, OT_buoy, buoyID, c_cidGoto));
pGoal->AddStartAction (new SetCommandAction (trekClient.GetShip (), c_cmdCurrent, NA, NA, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (trekClient.GetShip (), c_cmdAccepted, NA, NA, c_cidDoNothing));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = new Goal (new GetCommandCondition (trekClient.GetShip (), c_cidGoto));
pGoal->AddStartAction (new SetCommandAction (trekClient.GetShip (), c_cmdQueued, OT_ship, m_builderID, c_cidGoto));
pGoal->AddStartAction (new MessageAction ("Press the INSERT key to accept the command."));
pGoal->AddStartAction (new PlaySoundAction (tm_4_32Sound));
pGoal->AddConstraintCondition (CreateTooLongCondition (30.0f, tm_4_08rSound));
pGoalList->AddGoal (pGoal);
}
{
Goal* pGoal = new Goal (new ObjectWithinRadiusCondition (trekClient.GetShip (), OT_ship, m_enemyScoutID, 1500.0f));
Vector pos (random(-300.0f, 300.0f), random(-300.0f, 300.0f), random(-300.0f, 300.0f));
CreateDroneAction* pCreateDroneAction = new CreateDroneAction ("Enemy Scout", m_enemyScoutID, 310, 1, c_ptWingman);
pCreateDroneAction->SetCreatedLocation (1031, pos);
pGoal->AddStartAction (pCreateDroneAction);
pGoal->AddStartAction (new SetCommandAction (m_enemyScoutID, c_cmdCurrent, trekClient.GetShip (), c_cidAttack));
pGoal->AddStartAction (new SetCommandAction (m_enemyScoutID, c_cmdAccepted, trekClient.GetShip (), c_cidAttack));
pGoalList->AddGoal (pGoal);
}
{
Goal* pGoal = new Goal (new GetCommandCondition (trekClient.GetShip (), c_cidAttack));
pGoal->AddStartAction (new SetCommandAction (m_builderID, c_cmdCurrent, NA, NA, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (m_builderID, c_cmdAccepted, NA, NA, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (trekClient.GetShip (), c_cmdQueued, OT_ship, m_enemyScoutID, c_cidAttack));
pGoal->AddStartAction (new MessageAction ("Press the INSERT key to accept the command."));
pGoal->AddStartAction (new PlaySoundAction (tm_4_33Sound));
pGoal->AddConstraintCondition (CreateTooLongCondition (30.0f, tm_4_33Sound));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new ElapsedTimeCondition (0.5f)));
{
Goal* pGoal = new Goal (new GetCommandCondition (m_enemyScoutID, c_cidGoto));
pGoal->AddStartAction (new PlaySoundAction (tm_4_33rSound));
pGoal->AddConstraintCondition (CreateTooLongCondition (45.0f, tm_4_33rSound));
pGoalList->AddGoal (pGoal);
}
{
Goal* pGoal = new Goal (new ElapsedTimeCondition (0.5f));
pGoal->AddStartAction (new SetCommandAction (trekClient.GetShip (), c_cmdCurrent, NA, NA, c_cidDoNothing));
pGoal->AddStartAction (new SetCommandAction (trekClient.GetShip (), c_cmdAccepted, NA, NA, c_cidDoNothing));
pGoalList->AddGoal (pGoal);
}
{
Goal* pGoal = new Goal (pGoalList);
ObjectID shipID = trekClient.GetShip ()->GetObjectID ();
Condition* pOrConditionA = new OrCondition (new ShipSeesObjectCondition (m_enemyMiner1ID, OT_ship, shipID), new ShipSeesObjectCondition (m_enemyMiner2ID, OT_ship, shipID));
Condition* pOrConditionB = new OrCondition (new ShipSeesObjectCondition (m_enemyMiner3ID, OT_ship, shipID), new ShipSeesObjectCondition (m_enemyMiner4ID, OT_ship, shipID));
Condition* pSeesCondition = new OrCondition (new OrCondition (pOrConditionA, pOrConditionB), new ShipSeesObjectCondition (m_enemyScoutID, OT_ship, shipID));
pGoal->AddConstraintCondition (new ConditionalAction (pSeesCondition, new ShowEyeballAction (true)));
pGoal->AddConstraintCondition (new ConditionalAction (new NotCondition (new ProxyCondition (pSeesCondition)), new ShowEyeballAction (false)));
return pGoal;
}
}
Goal* Mission4::CreateGoal09 (void)
{
GoalList* pGoalList = new GoalList;
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_34Sound);
pGoal->AddStartAction (new SetCommandAction (trekClient.GetShip (), c_cmdQueued, OT_ship, m_builderID, c_cidGoto));
pGoal->AddStartAction (new MessageAction ("Press the INSERT key to accept the command."));
pGoalList->AddGoal (pGoal);
}
pGoalList->AddGoal (new Goal (new GetCommandCondition (trekClient.GetShip (), c_cidGoto)));
{
Goal* pGoal = new Goal (new GetShipIsDestroyedCondition2(OT_ship, m_builderID));
pGoal->AddStartAction (new SetCommandAction (m_builderID, c_cmdCurrent, OT_asteroid, 10332, c_cidBuild));
pGoal->AddStartAction (new SetCommandAction (m_builderID, c_cmdAccepted, OT_asteroid, 10332, c_cidBuild));
pGoalList->AddGoal (pGoal);
}
{
Goal* pGoal = new Goal (new ElapsedTimeCondition (4.0f));
pGoal->AddStartAction (new SetAutopilotAction (trekClient.GetShip (), false));
pGoalList->AddGoal (pGoal);
}
return new Goal (pGoalList);
}
Goal* Mission4::CreateGoal10 (void)
{
GoalList* pGoalList = new GoalList;
{
Goal* pGoal = CreatePlaySoundGoal (tm_4_35Sound);
pGoal->AddStartAction (new MessageAction ("Land in the expansion complex."));
pGoalList->AddGoal (pGoal);
}
{
Goal* pGoal = new Goal (new FalseCondition);
pGoal->AddConstraintCondition (CreateTooLongCondition (45.0f, tm_3_49rSound));
pGoalList->AddGoal (pGoal);
}
return new Goal (pGoalList);
}
}