📄 animation.cpp
字号:
#include "animation.h"
#include "..\system\resfile.h"
CAnimation::CAnimation(CEngine *pEngine)
{
m_pEngine = pEngine;
ImageID = -1;
nModules = 0;
nFrames = 0;
nActions = 0;
pModule = NULL;
pFrameData = NULL;
pActionData = NULL;
}
bool CAnimation::loadAnimation(CBufReader &pData)
{
int i;
ImageID = (char)pData.ReadUShortReverse();
nModules = pData.ReadUChar();
pModule = (AniModule *)m_pEngine->GetMem()->GlobalMalloc((sizeof(AniModule)) * nModules);
for(i=0;i<(int)nModules;i++)
{
pModule[i].x = (short)pData.ReadUChar();
pModule[i].y = (short)pData.ReadUChar();
pModule[i].w = pData.ReadUChar();
pModule[i].h = pData.ReadUChar();
}
nFrames = pData.ReadUShortReverse();
if (nFrames > 0)
{
pFrameData = (short**)m_pEngine->GetMem()->GlobalMalloc((sizeof(short*)) * nFrames);
m_frameSize = (char*)m_pEngine->GetMem()->GlobalMalloc((sizeof(char)) * nFrames);
for(i=0;i<(int)nFrames;i++)
{
pData.ReadUChar();
pData.ReadUChar();
m_frameSize[i] = pData.ReadUChar();
pFrameData[i] = (short*)m_pEngine->GetMem()->GlobalMalloc(m_frameSize[i]*(sizeof(short*))*4);
for (int ii=0; ii<m_frameSize[i]*4; ii++)
pFrameData[i][ii] = pData.ReadUShortReverse();
}
}
nActions = pData.ReadUShortReverse();
if (nActions > 0)
{
pActionData = (char**)m_pEngine->GetMem()->GlobalMalloc((sizeof(char*)) * nActions);
m_actionSize = (char*)m_pEngine->GetMem()->GlobalMalloc((sizeof(char)) * nActions);
for(i=0;i<(int)nActions;i++)
{
pData.ReadUChar();
m_actionSize[i] = pData.ReadUChar();
pActionData[i] = (char*)m_pEngine->GetMem()->GlobalMalloc(m_actionSize[i]*2);
pData.ReadBlock( pActionData[i], m_actionSize[i]*2);
}
}
return true;
}
void CAnimation::drawFrame(unsigned short FrameIndex, int fx , int fy )
{
SYS_ASSERT(FrameIndex < nFrames);
int mx=0,my=0,i;
unsigned char mId;
for(i=0;i<m_frameSize[FrameIndex];i++)
{
mx = pFrameData[FrameIndex][i * 4 + 2];
my = pFrameData[FrameIndex][i * 4 + 3];
mId = (unsigned char)pFrameData[FrameIndex][i * 4 + 0];
if (mId < 0)
mId = 256 + mId;
drawModule( mId , mx + fx , my + fy , pFrameData[FrameIndex][i*4+1]);
}
}
void CAnimation::drawModule(unsigned char moduleId ,int mx,int my, int bReverse)
{
SYS_ASSERT(moduleId < nModules);
CGfx *g = m_pEngine->GetGfx();
if (m_pImage != 0)
g->DrawBmp(mx, my, pModule[moduleId].w, pModule[moduleId].h, m_pImage, pModule[moduleId].x, pModule[moduleId].y, bReverse?1:0);
}
void CAnimation::drawAction(int acid, int frmid, int x,int y)
{
int frameid = (pActionData[acid][(frmid<<1)]&0xFF) + ((pActionData[acid][(frmid<<1) + 1] & 0x01) << 8);
drawFrame(frameid , x , y);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -