![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2011 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00009 #pragma once 00010 00011 #include "vrfobjcore/singleTaskControllerComponent.h" 00012 #include "vrfmodel/vrfmodelDefines.h" 00013 00014 class DtString; 00015 class DtSimManager; 00016 class DtSimMessage; 00017 class DtLasingControllerDescriptor; 00018 class DtLasingPSR; 00019 class DtBooleanOutputPort; 00020 class DtOutputPortGroup; 00021 class DtSetTargetRequest; 00022 class DtDesignatorPublisher; 00023 class DtEntityListInputPort; 00024 class DtWeaponComponentInterface; 00025 00030 class DT_DLL_vrfmodel DtLasingController : public DtSingleTaskControllerComponent 00031 { 00032 protected: 00034 DtLasingController(); 00035 00037 DtLasingController(const DtLasingController & 00038 orig); 00039 00041 const DtLasingController & operator=(const DtLasingController & orig); 00042 00043 public: 00044 00046 DtLasingController(const DtString& name, 00047 DtVrfObject* owner, 00048 DtSimManager* simManager, 00049 DtComponentDescriptor* desc = 0, 00050 DtReaderWriterRegistry* parentRegistry = 0); 00051 00053 virtual ~DtLasingController(); 00054 00055 //Initializes the laser controller 00056 virtual bool init(); 00057 00060 virtual DtString type() const; 00061 00069 virtual void tick(); 00070 00072 virtual void setDesignatorCode(const int code); 00073 virtual const int designatorCode() const; 00074 00075 virtual void clearTask(); 00076 00080 virtual bool createProcessSR(); 00081 00083 virtual void startLasing(); 00084 virtual void stopLasing(); 00085 00088 virtual void laseTarget(DtVrfObject* targetObject); 00089 00091 virtual bool lasing(); 00092 00093 //static creator 00094 static DtSimComponent * creator(const DtString& name, 00095 DtVrfObject* owner, 00096 DtSimManager* simManager, 00097 DtComponentDescriptor* desc = 0, 00098 DtReaderWriterRegistry* parentRegistry = 0); 00099 00101 virtual void registerTaskMsgCallbacks(); 00102 virtual void registerSetLaseAutonomousMsgCallbacks(); 00103 virtual void registerSetLaserCodeRequestMsgCallbacks(); 00104 00105 //static callbacks to register with the radio for commands to lase a target 00106 static void laseTargetTaskCallback(DtSimMessage *msg, void * usrData); 00107 static void setLaseAutonomousRequestCallback(DtSimMessage* msg, void* usrData); 00108 static void setLaserCodeRequestCallback(DtSimMessage* msg, void* usrData); 00109 00110 //functions to do the work for the static function. 00111 virtual void processLaseTargetTaskMessage(DtSimMessage *msg); 00112 virtual void processSetLaseAutonomousRequestMessage(DtSimMessage* msg); 00113 virtual void processSetLaserCodeRequestMessage(DtSimMessage* msg); 00114 00115 static void requestLaserCodeCallback(const DtVrfObjectMessage* msg, void* usr); 00116 virtual void processRequestLaserCode(const DtVrfObjectMessage* msg); 00117 00118 protected: 00120 virtual bool lineOfSight(DtVrfObject* target); 00121 00122 //updates the designator state and publishes it on the 00123 //network 00124 virtual void tickLaser(); 00125 00127 virtual void setRadio(DtSimBaseRadio * radio); 00128 00129 virtual bool createPublisher(); 00130 00131 virtual bool createTargetInput(); 00132 00135 virtual double laserPower() const; 00136 00139 virtual double laserWavelength() const; 00140 00145 virtual bool laseTargetValid(DtVrfObject* target, DtString& invalidReason); 00146 00149 virtual DtVrfObject* chooseAutonomousLaseTarget(); 00150 00152 virtual int defaultLaserCode() const; 00153 00156 static void objectAboutToBeRemovedCallback(DtVrfObject* vrfObject, 00157 void* usr); 00158 00161 virtual void processObjectAboutToBeRemovedCallback(DtVrfObject* vrfObject); 00162 00167 class DtLasingControllerInput 00168 { 00169 private: 00171 00172 DtLasingControllerInput(); 00173 DtLasingControllerInput(const DtLasingControllerInput& orig); 00174 const DtLasingControllerInput& operator=(const DtLasingControllerInput& rhs); 00176 public: 00177 DtLasingControllerInput(DtLasingController*); 00178 ~DtLasingControllerInput(); 00179 virtual bool init(); 00180 virtual DtVrfObject* getTarget() = 0; 00181 protected: 00182 DtLasingController* myController; 00183 }; 00184 00186 class DtLasingControllerPortInput : public DtLasingControllerInput 00187 { 00188 private: 00190 00191 DtLasingControllerPortInput(); 00192 DtLasingControllerPortInput(const DtLasingControllerPortInput& orig); 00193 const DtLasingControllerPortInput& operator=(const DtLasingControllerPortInput& rhs); 00195 00196 public: 00197 DtLasingControllerPortInput(DtLasingController*); 00198 ~DtLasingControllerPortInput(); 00199 virtual bool init(); 00200 virtual DtVrfObject* getTarget(); 00201 00202 protected: 00203 DtEntityListInputPort* myTargetListPort; 00204 }; 00205 00207 class DtLasingControllerWeaponInterfaceInput : public DtLasingControllerInput 00208 { 00209 private: 00211 00212 DtLasingControllerWeaponInterfaceInput(); 00213 DtLasingControllerWeaponInterfaceInput(const DtLasingControllerWeaponInterfaceInput& orig); 00214 const DtLasingControllerWeaponInterfaceInput& operator=(const DtLasingControllerWeaponInterfaceInput& rhs); 00216 public: 00217 DtLasingControllerWeaponInterfaceInput(DtLasingController*); 00218 ~DtLasingControllerWeaponInterfaceInput(); 00219 virtual bool init(); 00220 virtual DtVrfObject* getTarget(); 00221 00222 protected: 00223 DtWeaponComponentInterface* myInterface; 00224 }; 00225 00226 protected: 00227 DtVrfObject* myCurrentLasedTarget; 00228 00231 DtLasingPSR* myProcessState; 00232 00233 const DtLasingControllerDescriptor* myComponentDescriptor; 00234 DtBoolean myFirstTick; 00235 DtDesignatorPublisher* myDesPublisher; 00236 00240 DtLasingControllerInput* myLasingInput; 00241 }; 00242 00246 int generateLaserCodeFromName(const DtString& objectName); 00247 00248 00249