![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00010 00011 00012 #pragma once 00013 00014 #include "vrfobjcore/singleTaskControllerComponent.h" 00015 #include "vrfutil/simMunition.h" 00016 00018 #include <vlpi/disEnums.h> 00019 #include <matrix/vlVector.h> 00020 00021 class DtString; 00022 class DtSimManager; 00023 class DtTaskMessage; 00024 class DtSimMessage; 00025 class DtMunitionResource; 00026 00027 class DtIndirectFireWeaponController; 00028 class DtIndirectFireControllerDescriptor; 00029 class DtVrfIndirectFirePSR; 00030 00031 00036 #include "vrfmodel/vrfmodelDefines.h" 00037 class DT_DLL_vrfmodel DtIndirectFireController : public DtSingleTaskControllerComponent 00038 { 00039 00040 public: 00041 00044 DtIndirectFireController(const DtString& name, 00045 DtVrfObject* owner, 00046 DtSimManager* simManager, 00047 DtComponentDescriptor* desc = 0, 00048 DtReaderWriterRegistry* parentRegistry = 0); 00049 00051 virtual ~DtIndirectFireController(); 00052 00054 virtual bool init(); 00055 00058 virtual bool postAddComponentsInit(); 00059 00061 virtual bool createWeaponController(); 00062 00065 virtual DtString type() const; 00066 00071 virtual void tick(); 00072 00075 virtual void clearTask(); 00076 00078 virtual void setMyFuzeToUse(DtDetonatorFuze fuzeToUse); 00080 virtual DtDetonatorFuze fuzeToUse() const; 00081 00085 virtual void calculateDesiredElevation(double rangeToTarget); 00086 00089 virtual void calculateDesiredAzimuth(); 00090 00092 double findBodyHeadingToLocalPosition(DtVector localTargetPosition) const; 00093 00096 virtual void chooseMaxRange(DtReal rangeToTarget); 00097 00099 virtual void setCurrentMaxRange(DtReal currentMaxRange); 00101 virtual DtReal currentMaxRange() const; 00102 00105 virtual DtReal absoluteMaxRange() const; 00106 00110 virtual bool initializeController(const DtString& ammoType, 00111 int numberOfRounds, DtReal heightAboveTerrain); 00112 00114 virtual void setCurrentTargetLocation(const DtVector& location); 00116 virtual const DtVector& currentTargetLocation(); 00117 00123 virtual void registerTaskMsgCallbacks(); 00124 00126 static void FFEOnTargetCallback(DtSimMessage * msg, void * usr); 00128 static void FFEOnEntityCallback(DtSimMessage * msg, void * usr); 00130 static void FFEOnLocationCallback(DtSimMessage * msg, void * usr); 00132 static void userTaskCallback(DtSimMessage * msg, void * usr); 00133 00140 virtual bool processFFEOnTargetTask(DtSimMessage * msg); 00141 virtual bool processFFEOnLocationTask(DtSimMessage * msg); 00142 virtual bool processFFEOnEntityTask(DtSimMessage * msg); 00148 virtual void processUserTask(DtSimMessage * msg); 00151 virtual void processFFETask(DtTaskMessage * tm); 00152 00153 00156 virtual bool haveAmmo(const DtString & ammoName) const; 00157 00160 virtual const DtString & findDefaultAmmo() const; 00161 00164 virtual void getMunitionFromResourceName(const DtString & resourceName, 00165 DtSimMunition& munition) const; 00166 00169 virtual DtMunitionResource * lookupMunitionResource(const DtString & 00170 resource) const; 00171 00175 static DtSimComponent * creator(const DtString& name, 00176 DtVrfObject* owner, 00177 DtSimManager* simManager, 00178 DtComponentDescriptor* desc = 0, 00179 DtReaderWriterRegistry* parentRegistry = 0); 00180 00181 protected: 00182 00185 virtual bool createPortGroups(); 00186 00188 virtual void addRangeItems(); 00189 00190 protected: 00191 00193 DtIndirectFireController(); 00194 00196 DtIndirectFireController(const DtIndirectFireController & orig); 00197 00199 const DtIndirectFireController & operator=(const DtIndirectFireController & 00200 orig); 00201 00202 protected: 00203 00205 DtDetonatorFuze myFuzeToUse; 00206 00207 DtReal myCurrentMaxRange; 00208 00211 DtSimMunition myMunitionToUse; 00212 00213 DtIndirectFireWeaponController * myWeaponController; 00214 DtIndirectFireControllerDescriptor * myIndFireDescriptor; 00215 00217 bool myFirstTick; 00218 }; 00219