VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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/fixedWingEntitySetController.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/simManager.h"
#include "vrfobjcore/vrfObjectManager.h"

#include "vrfobjcore/simComponentTypes.h"
#include "vrfobjcore/simRadio.h"
#include "vrftasks/setDataTypes.h"
#include "vrfobjcore/setDataManager.h"
#include "vrfobjcore/fixedWingEntityStateRepository.h"

#include "vrfmsgs/setDataRequestMessage.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 Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)