![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2005 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: targetSelectionController.h,v $ $Revision: 1.24 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00014 00015 #pragma once 00016 00017 #include "vrfobjcore/singleTaskControllerComponent.h" 00018 #include "vrfobjcore/entityTargetInformation.h" 00019 #include <map> 00020 #include <list> 00021 #include "vrfmodel/vrfmodelDefines.h" 00022 #include "targetRankOperator.h" 00023 00024 class DtSensorContactListInputPort; 00025 class DtEntityListOutputPort; 00026 class DtObjectTypesListOutputPort; 00027 class DtRwSensorContactInfo; 00028 class DtTargetSelectionCriteria; 00029 class DtTargetRankOperator; 00030 class DtSpatialFilterEvaluator; 00031 class DtTargetSelectionControllerPSR; 00032 class DtSimMessage; 00033 class DtVrfObjectMessage; 00034 class DtWeaponComponentInterface; 00035 00049 00076 class DT_DLL_vrfmodel DtTargetSelectionController : public DtSingleTaskControllerComponent 00077 { 00078 private: 00080 DtTargetSelectionController(); 00082 DtTargetSelectionController(const DtTargetSelectionController& orig); 00084 DtTargetSelectionController& operator=( 00085 const DtTargetSelectionController& orig); 00086 public: 00087 00088 typedef std::list<DtWeaponComponentInterface*> DtWeaponInterfaceList; 00089 00092 DtTargetSelectionController(const DtString& name, DtVrfObject* owner, 00093 DtSimManager* simManager, DtComponentDescriptor* desc=0, 00094 DtReaderWriterRegistry *parentRegistry=0); 00095 00097 virtual ~DtTargetSelectionController(); 00098 00100 virtual bool init(); 00101 00104 virtual DtString type() const; 00105 00107 virtual void registerTaskMsgCallbacks(); 00108 00111 virtual void updateWeaponInterfaceTaskState(DtWeaponComponentInterface* weapIf); 00112 00116 00117 static void fireAtTargetTaskCallback(DtSimMessage* msg, void* usr); 00118 virtual void processFireAtTargetTask(DtSimMessage* msg); 00120 00123 00124 static void weaponListRequestCallback(const DtVrfObjectMessage* msg, void* usr); 00125 virtual void processWeaponListRequest(const DtVrfObjectMessage* msg); 00127 00129 00130 static void fireNowCallback(DtSimMessage* msg, void* usr); 00131 virtual void processFireNow(DtSimMessage* msg); 00133 00135 virtual void taskComplete(bool success = true); 00136 00144 virtual void tick(); 00145 00149 static DtSimComponent* creator(const DtString& name, 00150 DtVrfObject* owner, 00151 DtSimManager* simManager, 00152 DtComponentDescriptor* desc = 0, 00153 DtReaderWriterRegistry* parentRegistry = 0); 00154 00155 protected: 00156 typedef std::set<DtRwSensorContactInfo*, DtTargetRankOperatorWrapper> DtOrderedTargetSet; 00157 00159 virtual bool createPorts(); 00160 00164 virtual bool createOutputPorts(); 00165 00171 virtual bool createPSR(); 00172 00174 virtual void registerRadioMessageCallbacks(); 00175 00177 static void setTargetCallback(DtSimMessage* msg, void* usr); 00178 00181 virtual void processSetTarget(DtSimMessage* msg); 00182 00191 virtual void selectTargets(); 00192 00195 virtual bool targetForce(DtForceType force) const; 00196 00200 virtual bool validTarget(const DtRwSensorContactInfo& contactInfo, 00201 const DtWeaponComponentInterface& weapIf) const; 00202 00205 virtual DtEntityTargetInformation targetInfoFromContactInfo( 00206 const DtRwSensorContactInfo& contactInfo) const; 00207 00210 virtual void updateRegionEvaluators(); 00211 00215 virtual DtTargetRankOperator* createTargetRankOperator( 00216 const DtTargetSelectionCriteria& criteria) const; 00217 00220 virtual void setupDetectableForces(DtForceType); 00221 00224 00225 static void hostilitiesChangedCallback(DtU8 force, void* usr); 00226 virtual void processHostilitiesChanged(DtU8 force); 00228 00230 virtual void clearTargets(); 00231 00233 virtual bool isSurrenderedLifeform(const DtVrfObject* entity) const; 00234 00235 virtual bool findFusedTargets(const DtSensorContactInfoList* contactList, 00236 const DtWeaponComponentInterface& weapIf, DtRwSensorContactInfo* userTargetInfo, 00237 DtOrderedTargetSet & orderedTargets); 00238 virtual void setTargetsToWeaponInterface(DtWeaponComponentInterface& weapIf, DtRwSensorContactInfo* userTargetInfo, DtOrderedTargetSet& orderedTargets); 00239 00242 virtual void findWeaponControlInterfaces(); 00243 00246 virtual bool permissionToFire(); 00247 00248 protected: 00249 00257 00264 DtObjectTypesListOutputPort* myTypesToDetectOutputPort; 00265 00268 DtTargetSelectionControllerPSR* myProcessState; 00269 00270 DtSensorContactInfoListChangeMonitor myContactListChangeMonitor; 00271 00273 DtForceType myForce; 00274 00278 bool mySetupDetectableForcesRequired; 00279 00280 bool myFirstTick; 00281 00284 DtWeaponInterfaceList myWeaponInterfaceList; 00285 };