The DtInternalTemperatureStateComponent is a new class that implements a state component for storing the internal temperature of an entity.
#pragma once
#include <matrix/vlVector.h>
namespace makVrf
{
struct DtInternalTemperatureStateComponentData
{
{};
{
}
{
return *this;
}
protected:
};
class DtInternalTemperatureStateComponent : public DtFrameStateInterface
{
public:
DtInternalTemperatureStateComponent(DtStateData* storage)
: DtFrameStateInterface(storage)
{
}
};
class DtInternalTemperatureStateComponentNextFrame : public DtInternalTemperatureStateComponent
{
public:
DtInternalTemperatureStateComponentNextFrame(DtStateData*);
const double& internalCoreTemperature() const;
void setInternalCoreTemperature(const double&);
virtual void makeWritable() {};
virtual void makeReadOnly() {};
protected:
DtStateData* myStateData;
};
class DtInternalTemperatureStateComponentCurrentFrame : public DtInternalTemperatureStateComponent
{
public:
DtInternalTemperatureStateComponentCurrentFrame(DtStateData*);
virtual ~DtInternalTemperatureStateComponentCurrentFrame();
const double& internalCoreTemperature() const;
protected:
void completeSetup();
void updateVrfStateComponentParameters();
void updateInternalTemperatureData();
friend class DtInternalTemperatureStateComponentImplementation;
{
myData = data;
}
protected:
boost::signals2::scoped_connection myVrfStateComponentChangedConnection;
boost::signals2::scoped_connection myCompleteSetupConnection;
DtStateData* myStateData;
};
class DtInternalTemperatureStateComponentImplementation : public DtDoubleBufferedStateComponent<DtInternalTemperatureStateComponent>
{
public:
DtInternalTemperatureStateComponentImplementation(DtStateData* sd);
bool isDoubleBuffered() { return true; };
const DtFrameStateInterface* currentFrameState() const { return &myCurrentFrameState; }
virtual DtFrameStateInterface* nextFrameState() { return &myNextFrameState; };
virtual const DtFrameStateInterface* nextFrameState() const { return &myNextFrameState; };
void updateDataStorage()
{
if (myNextFrameState.isWritable())
{
myCurrentFrameState.advanceFrame(myNextFrameState.frameState());
}
myCurrentFrameState.emitComponentUpdated();
}
void updateStateData(DtStateData* sd)
{
myCurrentFrameState.updateStateData(sd);
myNextFrameState.updateStateData(sd);
}
virtual void aboutToBeDeleted() override
{
myCurrentFrameState.aboutToBeDeleted();
myNextFrameState.aboutToBeDeleted();
}
protected:
DtInternalTemperatureStateComponentCurrentFrame myCurrentFrameState;
DtInternalTemperatureStateComponentNextFrame myNextFrameState;
};
}
namespace makVrf
{
DtInternalTemperatureStateComponentCurrentFrame::DtInternalTemperatureStateComponentCurrentFrame(DtStateData* sd)
: DtInternalTemperatureStateComponent(sd)
, myStateData(sd)
{
if (sd->advancedFrame())
{
completeSetup();
}
else
{
}
}
{
}
{
}
{
}
{
if (temp)
{
myData.setInternalCoreTemperature(*temp);
}
}
{
}
: DtInternalTemperatureStateComponent(sd)
, myStateData(sd)
{
}
const double& DtInternalTemperatureStateComponentNextFrame::internalCoreTemperature() const
{
return frameState().internalCoreTemperature();
}
void DtInternalTemperatureStateComponentNextFrame::setInternalCoreTemperature(const double& s)
{
if (s != internalCoreTemperature())
{
markModified();
if (myStateData->nextFrameState()->hasStateComponent<DtStatePropertiesStateComponent>())
{
findAndSetPropertyValue<double>(myStateData->nextFrameState()->getStateComponent<DtStatePropertiesStateComponent>()->stateProperties(),"internal-core-temperature", s);
}
frameState().setInternalCoreTemperature(s);
}
}
DtInternalTemperatureStateComponentImplementation::DtInternalTemperatureStateComponentImplementation(DtStateData* sd)
: DtDoubleBufferedStateComponent(sd)
, myCurrentFrameState(sd)
, myNextFrameState(sd)
{
}
}