00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00036 class PG_API pgMotData
00037 {
00038 public:
00039 pgDefineException(ExceptionInvalidArgument);
00040 pgDefineException(ExceptionInvalidCall);
00041 pgDefineException(ExceptionInvalidData);
00042 pgDefineException(ExceptionNotInitialized);
00043
00044 static const u32 MOTION_DATA_VERSION = 70;
00045
00046 enum MotionDataMode
00047 {
00048 MODE_READ,
00049 MODE_WRITE
00050 };
00051
00052 pgMotData();
00053 ~pgMotData();
00054
00055 void initAsReader(const void* data, u32 data_size);
00056 void initAsWriter(u16 node_num, u16 mot_num, u32 key_frame_num);
00057
00058 MotionDataMode getMode() const;
00059 u16 getNodeNum() const;
00060 u16 getMotionNum() const;
00061 u32 getKeyFrameNum() const;
00062
00063 u32 getMotionFrameNum(u16 mot_index) const;
00064 u32 getMotionKeyFrameIndex(u16 mot_index) const;
00065 u32 getMotionKeyFrameNum(u16 mot_index) const;
00066 void setMotionInfo(u16 mot_index, u32 frame_num, u32 key_frame_index, u32 key_frame_num);
00067
00068 u32 getKeyFramePlayFrame(u32 key_frame_index) const;
00069 void setKeyFramePlayFrame(u32 key_frame_index, u32 play_frame);
00070
00071 const pgQuat& getNodeRotate(u16 node_index, u32 key_frame_index) const;
00072 const pgVec& getNodeTrans(u16 node_index, u32 key_frame_index) const;
00073 void setNodeLocal(u16 node_index, u32 key_frame_index, const pgMat& local);
00074
00075 void registerAsResource(pgID res_id);
00076
00077 private:
00078 struct MotionDataHeader
00079 {
00080 pgID format_id;
00081 u16 format_version;
00082 u16 node_num;
00083 u16 mot_num;
00084 u32 key_frame_num;
00085 u32 key_frame_info_offset;
00086 u32 node_info_offset;
00087 };
00088
00089 struct MotionInfo
00090 {
00091 u32 frame_num;
00092 u32 key_frame_index;
00093 u32 key_frame_num;
00094 };
00095
00096 struct KeyFrameInfo
00097 {
00098 u16 play_frame;
00099 };
00100
00101 struct NodeInfo
00102 {
00103 pgQuat m_quat;
00104 pgVec m_trans;
00105 pgVec m_scale;
00106 };
00107
00108 pgMotData(const pgMotData&);
00109 void operator=(const pgMotData&);
00110
00111 pgType<u8, MotionDataMode> m_mode;
00112 u8* m_data;
00113 u32 m_data_size;
00114 MotionDataHeader* m_mot_data_header;
00115 MotionInfo* m_mot_info;
00116 KeyFrameInfo* m_key_frame_info;
00117 NodeInfo* m_node_info;
00118 };