![]() |
VR-Forces 4.6 Class Documentation
|
This subclass of the DtFixedWingEntitySetController registers for the new DtSetSpeedAndHeadingRequest and sets the appropriate values into the VRF state repository.
/*******************************************************************************
** 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
/*******************************************************************************
** 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);
}
}