#ifndef __ORDEVICE_SKELETON_DEVICE_H__
#define __ORDEVICE_SKELETON_DEVICE_H__
#include "ordeviceskeleton_hardware.h"
#define ORDEVICESKELETON_CLASSNAME ORDeviceSkeleton
#define ORDEVICESKELETON_CLASSSTR "ORDeviceSkeleton"
class DataChannel
{
public:
DataChannel()
{
}
~DataChannel()
{
}
public:
FBAnimationNode* mTAnimNode;
FBAnimationNode* mRAnimNode;
FBModelTemplate* mModelTemplate;
};
class ORDeviceSkeleton : public FBDevice
{
public:
virtual bool FBCreate() override;
virtual void FBDestroy() override;
virtual bool DeviceOperation ( kDeviceOperations pOperation ) override;
virtual bool AnimationNodeNotify( FBAnimationNode* pAnimationNode,FBEvaluateInfo* pEvaluateInfo ) override;
virtual void DeviceIONotify ( kDeviceIOs pAction, FBDeviceNotifyInfo &pDeviceNotifyInfo ) override;
virtual void DeviceTransportNotify( kTransportMode pMode, FBTime pTime, FBTime pSystem ) override;
virtual void RecordingDoneAnimation( FBAnimationNode* pAnimationNode) override;
void DeviceRecordFrame (FBTime &pTime,FBDeviceNotifyInfo &pDeviceNotifyInfo);
virtual bool FbxStore ( FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat )
override;
virtual bool FbxRetrieve( FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat )
override;
bool Init ();
bool Start ();
bool Stop ();
bool Reset ();
bool Done ();
void SetNetworkUse(bool pUse) { mHardware.SetNetworkUse( pUse ); }
bool GetNetworkUse() { return mHardware.GetNetworkUse(); }
void SetNetworkAddress (const char* pIPAddress){ mHardware.SetNetworkAddress(pIPAddress); }
const char* GetNetworkAddress () { return mHardware.GetNetworkAddress(); }
void SetNetworkPort (int pPort) { mHardware.SetNetworkPort(pPort); }
int GetNetworkPort () { return mHardware.GetNetworkPort(); }
double GetDataTX(int pChannelIndex) { return mHardware.GetDataTX(pChannelIndex); }
double GetDataTY(int pChannelIndex) { return mHardware.GetDataTY(pChannelIndex); }
double GetDataTZ(int pChannelIndex) { return mHardware.GetDataTZ(pChannelIndex); }
double GetDataRX(int pChannelIndex) { return mHardware.GetDataRX(pChannelIndex); }
double GetDataRY(int pChannelIndex) { return mHardware.GetDataRY(pChannelIndex); }
double GetDataRZ(int pChannelIndex) { return mHardware.GetDataRZ(pChannelIndex); }
void DefineHierarchy ();
void Bind();
void UnBind();
int GetChannelCount() { return mHardware.GetChannelCount(); }
int GetChannelParent(int pMarkerIndex) { return mHardware.GetChannelParent(pMarkerIndex);}
const char* GetChannelName(int pMarkerIndex){ return mHardware.GetChannelName(pMarkerIndex); }
virtual bool ModelTemplateUnBindNotify( int pIndex, FBModelTemplate* pModelTemplate );
bool ReadyForCharacterize ();
ORDeviceSkeletonHardware mHardware;
FBModelTemplate* mRootTemplate;
private:
DataChannel mChannels[sSKDataBuffer::ChannelCount];
bool mHierarchyIsDefined;
FBPlayerControl mPlayerControl;
FBSystem mSystem;
FBApplication mApplication;
bool mHasAnimationToTranspose;
bool mPlotting;
void ProcessGlobalToLocal();
void SetupLocalGlobal(bool pGlobal);
};
#endif