VR-Forces 4.1 Class Documentation
Fixed Wing Set Controller

This subclass of the DtFixedWingEntitySetController registers for the new DtSetSpeedAndHeadingRequest and sets the appropriate values into the VRF state repository.


Header file:

/*******************************************************************************
** Copyright (c) 2006 MAK Technologies, Inc.
** All rights reserved.
*******************************************************************************/
/*******************************************************************************
** $RCSfile: myFixWngSetCtlr.h,v $ $Revision: 1.2 $ $State: Exp $
*******************************************************************************/

//\file myFixWngSetCtlr.h
//\brief MyFixedWingEntitySetController; handles new DtSetSpeedAndHeadingRequest


#ifndef MyFixedWingEntitySetController_H_
#define MyFixedWingEntitySetController_H_


#include "vrfmodel/fixWngSetCtlr.h"
#include "vrfobjcore/simRadio.h"

namespace vrfAddSetExample
{
   //\brief MyFixedWingEntitySetController is a controller that handles new
   //DtSetSpeedAndHeadingRequest.  It replaces the existing DtFixedWingEntitySetController
   //
   //Uses Descriptor Type: DtComponentDescriptor

   class MyFixedWingEntitySetController : public DtFixedWingEntitySetController
   {

   public:

      //\copydoc DtSimComponent(const DtString&,DtVrfObject*,DtSimManager*,
      //DtComponentDescriptor*,DtReaderWriterRegistry* parentRegistry)
   MyFixedWingEntitySetController(const DtString& name, 
      DtVrfObject* owner,
      DtSimManager* simManager, 
      DtComponentDescriptor* desc = 0,
      DtReaderWriterRegistry* parentRegistry = 0);

      //destructor
   virtual ~MyFixedWingEntitySetController();

   virtual void processSetSpeedAndHeading(DtSimMessage * msg);

   static void setSpeedAndHeadingCallback(DtSimMessage * msg, void * usrData);

      //\copydoc DtSimComponent(const DtString&,DtVrfObject*,DtSimManager*,
      //DtComponentDescriptor*,DtReaderWriterRegistry* parentRegistry)
      //\return New instance of this class.
   static DtSimComponent * creator(const DtString& name, 
      DtVrfObject* owner,
      DtSimManager* simManager, 
      DtComponentDescriptor* desc = 0,
      DtReaderWriterRegistry* parentRegistry = 0);

   private:
      //Default constructor; should not be called.  Here because the compiler
      //will generate an unprotected one otherwise.
   MyFixedWingEntitySetController();

      //copy constructor
   MyFixedWingEntitySetController(const MyFixedWingEntitySetController& orig);

      //assignment operator
   const MyFixedWingEntitySetController & operator=(const 
      MyFixedWingEntitySetController& orig);


   protected:
      //Overrides this so it can register its interest in the set commands.
   virtual void setRadio(DtSimRadio * radio);
   };
}
#endif


Implementation:

/*******************************************************************************
** Copyright (c) 2006 MAK Technologies, Inc.
** All rights reserved.
*******************************************************************************/
/*******************************************************************************
** $RCSfile: myFixWngSetCtlr.cxx,v $ $Revision: 1.1 $ $State: Exp $
*******************************************************************************/

//
//File:        myFixWngSetCtlr.cxx
//
//Class:       MyFixedWingEntitySetController
//

#include "myFixWngSetCtlr.h"
#include "vrfcore/simMgr.h"
#include "vrfobjcore/vrfObjMgr.h"

#include "vrfobjcore/compTypes.h"
#include "vrfobjcore/simRadio.h"
#include "vrftasks/setDtaTypes.h"
#include "vrfobjcore/setDataManager.h"
#include "vrfobjcore/fixWingSR.h"

#include "vrfmsgs/setDtaRqMsg.h"
#include "setSpeedAndHeading.h"

namespace vrfAddSetExample
{
   //constructor
   MyFixedWingEntitySetController::MyFixedWingEntitySetController(
   const DtString& name, 
   DtVrfObject* owner,
   DtSimManager* simManager, 
   DtComponentDescriptor* desc, 
   DtReaderWriterRegistry* parentRegistry) :
   DtFixedWingEntitySetController(name, owner, simManager, desc, parentRegistry)
   {
   }

   //destructor
   MyFixedWingEntitySetController::~MyFixedWingEntitySetController()
   {
   entity()->setDataManager()->removeSetDataCallback(DtSetSpeedAndHeadingType, 
      setSpeedAndHeadingCallback, (void *) this);
   }

   void MyFixedWingEntitySetController::processSetSpeedAndHeading(DtSimMessage* msg)
   {
   DtSetDataRequestMessage* drMsg = (DtSetDataRequestMessage *) msg;
   DtSetSpeedAndHeadingRequest* req = (DtSetSpeedAndHeadingRequest *)drMsg->setDataRequest();

   DtFixedWingEntityStateRepository* fixWingSR = 
      DtFixedWingEntityStateRepository::isFixedWingEntityStateRepository(
      localStateRepository());

   if (fixWingSR)
   {
      //Set the correct ordered speed
      if (fixWingSR->onGround())
      {
         fixWingSR->setOrderedGroundSpeed(req->speed());
      }
      else
      {
         fixWingSR->setOrderedSpeed(req->speed());
      }

      //Make sure the current ordered speed is set correctly as well
      fixWingSR->setCurrentOrderedSpeed(req->speed());
   }
   else
   {
      objectConsoleWarn()("Set Speed could not create a fixed wing state repository.\n");
   }

   myLocalEntity->place(req->heading());
   objectConsoleInfo() << "Setting heading: " << req->heading() << " and speed: " << req->speed() << std::endl;
   }

   void MyFixedWingEntitySetController::setSpeedAndHeadingCallback(DtSimMessage* msg, 
   void* usrData)
   {
   ((MyFixedWingEntitySetController *)usrData)->processSetSpeedAndHeading(msg);
   }

   //overrides this so it can register it's interest in the set commands
   void MyFixedWingEntitySetController::setRadio(DtSimRadio* radio)
   {
   DtFixedWingEntitySetController::setRadio(radio);

   entity()->setDataManager()->addSetDataProcessorCallback(DtSetSpeedAndHeadingType,
      setSpeedAndHeadingCallback, (void *) this);
   }

   DtSimComponent* MyFixedWingEntitySetController::creator(
   const DtString& name, 
   DtVrfObject* owner,
   DtSimManager* simManager, 
   DtComponentDescriptor* desc, 
   DtReaderWriterRegistry* parentRegistry)
   {
   return new MyFixedWingEntitySetController(name, owner, simManager, desc,
      parentRegistry);
   }
}

Document ID: Generated on Tue Jan 29 18:21:16 EST 2013 from SVN revision 123193
Copyright © 2005-2013 VT MÄK Inc. All Rights Reserved (www.mak.com)