245 lines
6.7 KiB
C++
245 lines
6.7 KiB
C++
// Sequences.h
|
|
|
|
#define MAX_ADDITIONAL_SEQUENCES 4
|
|
#define iDEFAULTSEQFRAMESPEED 20
|
|
|
|
class CModel;
|
|
|
|
enum
|
|
{
|
|
TK_ASTERISK = TK_USERDEF,
|
|
TK_ASE_FIRSTFRAME,
|
|
TK_ASE_LASTFRAME,
|
|
TK_ASE_FRAMESPEED,
|
|
};
|
|
|
|
|
|
// note that these are also in order of importance for the treeview sorting
|
|
//
|
|
typedef enum
|
|
{
|
|
ET_BOTH = 0,
|
|
ET_TORSO,
|
|
ET_LEGS,
|
|
ET_FACE,
|
|
ET_INVALID,
|
|
|
|
} ENUMTYPE;
|
|
|
|
//
|
|
|
|
class CSequence
|
|
{
|
|
public:
|
|
CSequence();
|
|
virtual ~CSequence();
|
|
|
|
virtual void Delete();
|
|
static CSequence* _Create(bool bGenLoopFrame, bool bIsGLA, LPCTSTR path = NULL, int startFrame = 0, int targetFrame = 0, int frameCount = 0, int frameSpeed = iDEFAULTSEQFRAMESPEED, int frameSpeedFromHeader = iDEFAULTSEQFRAMESPEED, CComment* comments = NULL);
|
|
static CSequence* CreateFromFile(LPCTSTR path, CComment* comments);
|
|
|
|
void Write(CTxtFile* file, bool bPreQuat);
|
|
void WriteExternal(CModel *pModel, CTxtFile* file, bool bMultiPlayerFormat);
|
|
void ReadHeader();
|
|
void ReadASEHeader(LPCSTR psFilename, int &iStartFrame, int &iFrameCount, int &iFrameSpeed, bool bCanSkipXSIRead = false);
|
|
void ReadXSIHeader(LPCSTR psFilename, int &iStartFrame, int &iFrameCount, int &iFrameSpeed);
|
|
bool Parse();
|
|
|
|
CSequence* GetNext();
|
|
void SetNext(CSequence* next);
|
|
|
|
bool DoProperties();
|
|
|
|
LPCTSTR GetPath();
|
|
void SetPath(LPCTSTR path);
|
|
|
|
bool ValidEnum();
|
|
void SetValidEnum(bool value = true);
|
|
|
|
int GetStartFrame();
|
|
void SetStartFrame(int frame);
|
|
int GetTargetFrame();
|
|
void SetTargetFrame(int frame);
|
|
int GetFrameCount();
|
|
void SetFrameCount(int count);
|
|
int GetFrameSpeed();
|
|
void SetFrameSpeed(int speed);
|
|
int GetFrameSpeedFromHeader();
|
|
void SetFrameSpeedFromHeader(int speed);
|
|
int GetLoopFrame();
|
|
void SetLoopFrame(int loop);
|
|
bool GetGenLoopFrame(void);
|
|
void SetGenLoopFrame(bool bGenLoopFrame);
|
|
|
|
void AddComment(CComment* comment);
|
|
CComment* GetFirstComment();
|
|
|
|
int GetDisplayIconForTree(CModel* pModel);
|
|
LPCSTR GetDisplayNameForTree(CModel* pModel, bool bIncludeAnimEnum, bool bIncludeFrameDetails, bool bViewFrameDetails_Additional, CDC* pDC);
|
|
LPCTSTR GetName();
|
|
void SetName(LPCTSTR name);
|
|
void DeriveName();
|
|
|
|
int GetFill();
|
|
void SetFill(int value);
|
|
|
|
ENUMTYPE GetEnumTypeFromString(LPCSTR lpString);
|
|
ENUMTYPE GetEnumType();
|
|
LPCTSTR GetEnum();
|
|
void SetEnum(LPCTSTR name);
|
|
|
|
LPCTSTR GetSound();
|
|
void SetSound(LPCTSTR name);
|
|
|
|
LPCTSTR GetAction();
|
|
void SetAction(LPCTSTR name);
|
|
|
|
bool IsGLA();
|
|
|
|
int m_iSequenceNumber; // temp-use during tree-sort/model-resequencing
|
|
|
|
// this isn't a brilliant wy of doing things, but enables retro-fitting of extra data fairly painlessly...
|
|
CSequence* AdditionalSeqs[MAX_ADDITIONAL_SEQUENCES];
|
|
int GetValidAdditionalSequences();
|
|
bool AdditionalSequenceIsValid();
|
|
|
|
protected:
|
|
void _Init(bool bGenLoopFrame, bool bIsGLA, LPCTSTR path, int startFrame, int targetFrame, int frameCount, int frameSpeed, int frameSpeedFromheader, CComment* comments);
|
|
|
|
CSequence* m_next;
|
|
CComment* m_comments;
|
|
char* m_path;
|
|
char* m_name;
|
|
CString m_enum;
|
|
char* m_sound;
|
|
char* m_action;
|
|
int m_fill;
|
|
int m_startFrame;
|
|
int m_targetFrame;
|
|
int m_frameCount;
|
|
int m_frameSpeed;
|
|
int m_iFrameSpeedFromHeader;
|
|
int m_loopFrame;
|
|
bool m_bIsGLA;
|
|
bool m_bGenLoopFrame;
|
|
|
|
bool m_validEnum;
|
|
|
|
// static keywordArray_t s_Symbols[];
|
|
// static keywordArray_t s_Keywords[];
|
|
};
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSequencePropPage dialog
|
|
|
|
class CSequencePropPage : public CPropertyPage
|
|
{
|
|
DECLARE_DYNCREATE(CSequencePropPage)
|
|
|
|
// Construction
|
|
public:
|
|
CSequencePropPage();
|
|
~CSequencePropPage();
|
|
|
|
CSequence* m_sequence;
|
|
bool* m_soilFlag;
|
|
|
|
// Dialog Data
|
|
//{{AFX_DATA(CSequencePropPage)
|
|
enum { IDD = IDD_PP_SEQUENCE };
|
|
int m_frameCount;
|
|
int m_frameSpeed;
|
|
CString m_path;
|
|
int m_startFrame;
|
|
int m_iLoopFrame;
|
|
CString m_AnimationEnum;
|
|
CString m_AnimationEnum2;
|
|
CString m_AnimationEnum3;
|
|
CString m_AnimationEnum4;
|
|
CString m_AnimationEnum5;
|
|
int m_frameCount2;
|
|
int m_frameCount3;
|
|
int m_frameCount4;
|
|
int m_frameCount5;
|
|
int m_frameSpeed2;
|
|
int m_frameSpeed3;
|
|
int m_frameSpeed4;
|
|
int m_frameSpeed5;
|
|
int m_iLoopFrame2;
|
|
int m_iLoopFrame3;
|
|
int m_iLoopFrame4;
|
|
int m_iLoopFrame5;
|
|
int m_startFrame2;
|
|
int m_startFrame3;
|
|
int m_startFrame4;
|
|
int m_startFrame5;
|
|
BOOL m_bGenLoopFrame;
|
|
//}}AFX_DATA
|
|
|
|
|
|
void OkOrApply();
|
|
// Overrides
|
|
// ClassWizard generate virtual function overrides
|
|
//{{AFX_VIRTUAL(CSequencePropPage)
|
|
public:
|
|
virtual void OnOK();
|
|
virtual BOOL OnApply();
|
|
virtual void OnCancel();
|
|
protected:
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
|
//}}AFX_VIRTUAL
|
|
|
|
// Implementation
|
|
protected:
|
|
void HandleAdditionalEditBoxesGraying();
|
|
void HandleAllItemsGraying();
|
|
// Generated message map functions
|
|
//{{AFX_MSG(CSequencePropPage)
|
|
virtual BOOL OnInitDialog();
|
|
afx_msg void OnButtonChooseanimationenum();
|
|
afx_msg void OnButtonChooseanimationenum2();
|
|
afx_msg void OnButtonChooseanimationenum3();
|
|
afx_msg void OnButtonChooseanimationenum4();
|
|
afx_msg void OnButtonChooseanimationenum5();
|
|
afx_msg void OnButtonClearanimationenum();
|
|
afx_msg void OnButtonClearanimationenum2();
|
|
afx_msg void OnButtonClearanimationenum3();
|
|
afx_msg void OnButtonClearanimationenum4();
|
|
afx_msg void OnButtonClearanimationenum5();
|
|
afx_msg void OnKillfocusStartframe();
|
|
afx_msg void OnKillfocusStartframe2();
|
|
afx_msg void OnKillfocusStartframe3();
|
|
afx_msg void OnKillfocusStartframe4();
|
|
afx_msg void OnKillfocusStartframe5();
|
|
afx_msg void OnKillfocusLoopframe();
|
|
afx_msg void OnKillfocusLoopframe2();
|
|
afx_msg void OnKillfocusLoopframe3();
|
|
afx_msg void OnKillfocusLoopframe4();
|
|
afx_msg void OnKillfocusLoopframe5();
|
|
afx_msg void OnKillfocusFramespeed5();
|
|
afx_msg void OnKillfocusFramespeed4();
|
|
afx_msg void OnKillfocusFramespeed3();
|
|
afx_msg void OnKillfocusFramespeed2();
|
|
afx_msg void OnKillfocusFramespeed();
|
|
afx_msg void OnKillfocusFramecount5();
|
|
afx_msg void OnKillfocusFramecount4();
|
|
afx_msg void OnKillfocusFramecount3();
|
|
afx_msg void OnKillfocusFramecount2();
|
|
afx_msg void OnKillfocusFramecount();
|
|
afx_msg void OnKillfocusEditAnimationenum5();
|
|
afx_msg void OnKillfocusEditAnimationenum4();
|
|
afx_msg void OnKillfocusEditAnimationenum3();
|
|
afx_msg void OnKillfocusEditAnimationenum2();
|
|
afx_msg void OnKillfocusEditAnimationenum();
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
};
|
|
|
|
ENUMTYPE GetEnumTypeFromString(LPCSTR lpString);
|
|
bool IsEnumSeperator(LPCSTR lpString);
|
|
LPCSTR StripSeperatorStart(LPCSTR lpString);
|
|
void ReadASEHeader(LPCSTR psFilename, int &iStartFrame, int &iFrameCount, int &iFrameSpeed, bool bReadingGLA, bool bCanSkipXSIRead = false);
|
|
|