Files
Jedi-Academy/tools/ModView/sequence.cpp
2013-04-04 14:32:05 -07:00

165 lines
3.3 KiB
C++

// Filename:- sequence.cpp
//
// code for animation sequences...
//
#include "stdafx.h"
#include "includes.h"
#include "model.h"
//
#include "sequence.h"
LPCSTR Sequence_CreateTreeName(Sequence_t *pSequence)
{
static CString str;
LPCSTR psSequenceName = (AppVars.bFullPathsInSequenceTreeitems && pSequence->sNameWithPath[0])? pSequence->sNameWithPath : Sequence_GetName(pSequence,true);//->sName;
str = va("%s ( %d..%d ) ( # = %d )",
String_EnsureMinLength(psSequenceName, 16),
pSequence->iStartFrame,
pSequence->iStartFrame + pSequence->iFrameCount - 1,
pSequence->iFrameCount
);
if (pSequence->iLoopFrame != -1)
{
str += va(" ( loopframe %d )", pSequence->iStartFrame + pSequence->iLoopFrame);
}
return (LPCSTR) str;
}
void Sequence_Clear(Sequence_t *pSequence)
{
pSequence->sName[0] = '\0';
pSequence->sNameWithPath[0] = '\0';
pSequence->iStartFrame = 0;
pSequence->iFrameCount = 0;
pSequence->iLoopFrame = -1;
pSequence->bIsDefault = false;
}
bool Sequence_FrameIsWithin(Sequence_t *pSequence, int iFrame)
{
if (iFrame >= pSequence->iStartFrame && iFrame < pSequence->iStartFrame + pSequence->iFrameCount)
{
return true;
}
return false;
}
// a bit of a lame function, but oh well...
//
int Sequence_GetIndex( Sequence_t *pSequenceToFind, ModelContainer_t *pContainer )
{
for (int i=0; i<pContainer->SequenceList.size(); i++)
{
Sequence_t *pSequence = &pContainer->SequenceList[i];
if (pSequence == pSequenceToFind)
{
return i;
}
}
return -1;
}
// C++ can't overload by return only, so swap the args as well from the one below...
//
int Sequence_DeriveFromFrame( ModelContainer_t *pContainer, int iFrame )
{
for (int i=0; i<pContainer->SequenceList.size(); i++)
{
Sequence_t *pSequence = &pContainer->SequenceList[i];
if (Sequence_FrameIsWithin(pSequence, iFrame))
{
return i;
}
}
return -1;
}
Sequence_t* Sequence_DeriveFromFrame( int iFrame, ModelContainer_t *pContainer )
{
for (int i=0; i<pContainer->SequenceList.size(); i++)
{
Sequence_t *pSequence = &pContainer->SequenceList[i];
if (Sequence_FrameIsWithin(pSequence, iFrame))
{
return pSequence;
}
}
return NULL;
}
int Sequence_ReturnLongestSequenceNameLength(ModelContainer_t *pContainer)
{
int iLongestStrlen = 0;
for (int i=0; i<pContainer->SequenceList.size(); i++)
{
Sequence_t *pSequence = &pContainer->SequenceList[i];
int iThisStrlen = strlen(Sequence_GetName(pSequence,true));
if (iLongestStrlen < iThisStrlen)
iLongestStrlen = iThisStrlen;
}
return iLongestStrlen;
}
// called by external apps via remote control...
//
LPCSTR Sequence_ReturnRemoteQueryString(Sequence_t *pSequence)
{
static char sString[1024];
sprintf(sString,"%s %d %d %d", pSequence->sName, pSequence->iStartFrame, pSequence->iFrameCount, pSequence->iLoopFrame);
return sString;
}
Sequence_t* Sequence_CreateDefault(int iNumFrames)
{
static Sequence_t Sequence;
Sequence_Clear(&Sequence);
strcpy(Sequence.sName,"default");
Sequence.iFrameCount= iNumFrames;
Sequence.bIsDefault = true;
return &Sequence;
}
LPCSTR Sequence_GetName(Sequence_t *pSequence, bool bUsedForDisplay /* = false */)
{
if (!bUsedForDisplay)
{
return pSequence->sName;
}
return va("%s%s",(pSequence->iFPS<0)?"-":" ",pSequence->sName);
}
////////////////// eof //////////////////