📄 actor.cpp
字号:
格利 :
涝仿 : INT nLoopTime
SHORT shStartViewTileX
SHORT shStartViewTileY
SHORT shViewOffsetX
SHORT shViewOffsetY
免仿 : VOID
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
VOID CActor::UpdateMotionState(INT nLoopTime, BOOL bIsMoveTime)
{
m_wABlendCurrDelay += nLoopTime;
if ( m_wABlendCurrDelay >= m_wABlendDelay )
{
m_wABlendCurrDelay = 0;
m_wABlendDelay = 0;
m_bABlendRev = FALSE;
}
if ( m_bCurrMtn == _MT_MON_DIE && m_dwCurrFrame >= m_dwEndFrame-1 )
{
m_bIsDead = TRUE;
}
if ( m_bIsDead )
{
SetMotionFrame(_MT_MON_DIE, m_bCurrDir);
m_dwCurrFrame = m_dwEndFrame - 1;
return;
}
if ( UpdateMove(bIsMoveTime) )
{
UpdatePacketState();
return;
}
else
{
m_wCurrDelay += nLoopTime;
if ( m_wCurrDelay > m_wDelay )
{
m_wCurrDelay = 0;
if ( m_dwCurrFrame < m_dwEndFrame )
{
m_dwCurrFrame++;
PlayActSound();
if ( m_bMsgHurryCheck )
{
m_wDelay = m_wDelay/2;
m_bMsgHurryCheck = FALSE;
}
}
}
UpdatePacketState();
if ( m_dwCurrFrame >= m_dwEndFrame )
{
m_shShiftTileX = 0;
m_shShiftTileY = 0;
m_shShiftPixelX = 0;
m_shShiftPixelY = 0;
m_bReverse = FALSE;
m_dwCurrEffectFrame = 0;
m_dwFstEffectFrame = 0;
m_dwEndEffectFrame = 0;
m_bEffectFrame = 0;
m_bEffectFrameCnt = _DEFAULT_SPELLFRAME;
m_bUseEffect = FALSE;
m_bUseSwordEffect = FALSE;
m_dwCurrFrame = m_dwFstFrame;
SetMotionFrame(_MT_MON_STAND, m_bCurrDir);
if( m_nState & 0X1 ) // 籍拳惑怕.
{
switch ( m_stFeature.bDress )
{
case 83: //林付脚厘.
case 84: //林付龋过.
case 85: //林付空.
SetMotionFrame(_MT_MON_APPEAR, 0);
m_dwEndFrame = m_dwFstFrame + 1;
m_bCurrMtn = _MT_MON_STAND;
}
}
if ( m_bAppearState == _DIG_DOWN )
m_bAppearState = _DIG_DOWNDEL;
}
}
}
/******************************************************************************************************************
窃荐疙 : CActor::UpdateMove(BOOL bIsMoveTime)
累己磊 :
累己老 :
格利 :
免仿 : BOOL
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
BOOL CActor::UpdateMove(BOOL bIsMoveTime)
{
if ( m_bCurrMtn == _MT_MON_WALK || m_bCurrMtn == _MT_PUSHBACK )
{
m_wCurrDelay = 0;
if ( bIsMoveTime )
{
if ( m_bBackStepFrameCnt )
{
m_dwCurrFrame += 2;
}
else
{
m_dwCurrFrame++;
if ( m_bMsgHurryCheck )
{
m_dwCurrFrame++;
}
}
if ( m_dwCurrFrame >= m_dwEndFrame-m_bMoveNextFrmCnt && !m_bIsMoved )
{
SetMoved();
m_bIsMoved = TRUE;
}
}
// 楷加利牢 橇饭烙 吝俊辑 秦具且老.
if ( m_dwCurrFrame >= m_dwEndFrame )
{
m_dwCurrFrame = m_dwEndFrame - 1;
m_shShiftTileX = 0;
m_shShiftTileY = 0;
m_shShiftPixelX = 0;
m_shShiftPixelY = 0;
m_dwCurrEffectFrame = 0;
m_dwFstEffectFrame = 0;
m_dwEndEffectFrame = 0;
m_bEffectFrame = 0;
m_bUseEffect = FALSE;
m_bUseSwordEffect = FALSE;
m_dwCurrFrame = m_dwFstFrame;
m_bBackStepFrame = 0;
m_bBackStepFrameCnt = 0;
m_bIsMoved = FALSE;
SetMotionFrame(_MT_MON_STAND, m_bCurrDir);
}
else if ( m_dwCurrFrame < m_dwEndFrame )
{
if ( m_bCurrMtn != _MT_PUSHBACK )
SetMoving();
else
SetBackStepMoving();
}
return TRUE;
}
return FALSE;
}
/******************************************************************************************************************
窃荐疙 : CActor::DrawActor()
累己磊 :
累己老 :
格利 :
涝仿 : BOOL bFocused
BOOL bShadowAblended
免仿 : VOID
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
BOOL CActor::DrawActor(CMapHandler* pxMap, BOOL bFocused, BOOL bShadowAblended, BOOL bUseScrnPos, BOOL bDrawShadow)
{
// 谅钎贸府.
if ( bUseScrnPos )
{
m_shScrnPosX = (m_wPosX - pxMap->m_shStartViewTileX) * _CELL_WIDTH + _VIEW_CELL_X_START - pxMap->m_shViewOffsetX + m_shShiftPixelX;
m_shScrnPosY = (m_wPosY - pxMap->m_shStartViewTileY) * _CELL_HEIGHT+ _VIEW_CELL_Y_START - pxMap->m_shViewOffsetY + m_shShiftPixelY;
}
BYTE bShadowType;
SHORT shShadowPX;
SHORT shShadowPY;
if ( m_pxActorImage )
{
SHORT shPX, shPY;
DWORD dwCurrFrm;
if ( !m_bReverse )
{
if ( m_bBackStepFrameCnt ) dwCurrFrm = m_dwEndFrame - (m_dwCurrFrame - m_dwFstFrame) -1;
else dwCurrFrm = m_dwCurrFrame;
}
else
{
if ( m_bBackStepFrameCnt ) dwCurrFrm = m_dwCurrFrame;
else dwCurrFrm = m_dwEndFrame - (m_dwCurrFrame - m_dwFstFrame) -1;
}
if ( m_pxActorImage->NewSetIndex(dwCurrFrm) )
{
shPX = m_pxActorImage->m_lpstNewCurrWilImageInfo->shPX;
shPY = m_pxActorImage->m_lpstNewCurrWilImageInfo->shPY;
bShadowType = m_pxActorImage->m_lpstNewCurrWilImageInfo->bShadow;
shShadowPX = m_pxActorImage->m_lpstNewCurrWilImageInfo->shShadowPX;
shShadowPY = m_pxActorImage->m_lpstNewCurrWilImageInfo->shShadowPY;
SetRect(&m_rcActor, m_shScrnPosX + shPX, m_shScrnPosY + shPY,
m_shScrnPosX + shPX + m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth,
m_shScrnPosY + shPY + m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight);
if ( ( m_rcActor.right - m_rcActor.left ) > _CELL_WIDTH + _TARGETRGN_GAPX )
{
m_rcTargetRgn.left = m_rcActor.left + ( (m_rcActor.right - m_rcActor.left) - (_CELL_WIDTH + _TARGETRGN_GAPX) )/2;
m_rcTargetRgn.right = m_rcActor.left + ( (m_rcActor.right - m_rcActor.left) + (_CELL_WIDTH + _TARGETRGN_GAPX) )/2;
}
else
{
m_rcTargetRgn.left = m_rcActor.left;
m_rcTargetRgn.right = m_rcActor.right;
}
if ( ( m_rcActor.bottom - m_rcActor.top ) > _CELL_HEIGHT + _TARGETRGN_GAPY )
{
m_rcTargetRgn.top = m_rcActor.top + ( (m_rcActor.bottom - m_rcActor.top) - (_CELL_HEIGHT + _TARGETRGN_GAPY) )/2;
m_rcTargetRgn.bottom = m_rcActor.top + ( (m_rcActor.bottom - m_rcActor.top) + (_CELL_HEIGHT + _TARGETRGN_GAPY) )/2;
}
else
{
m_rcTargetRgn.top = m_rcActor.top;
m_rcTargetRgn.bottom = m_rcActor.bottom;
}
INT nStartX1 = m_shScrnPosX + shShadowPX;
INT nStartY1 = m_shScrnPosY + shShadowPY;
BYTE bOpaRate = 70;
WORD wState = GetCharState();
// 阁胶磐 弊覆磊 颇老 利侩.
if ( bDrawShadow )
{
CWHWilImageData* pxSahdowImage;
pxSahdowImage = &g_xGameProc.m_xImage.m_xImageList[m_bActorImgIdx+_MAX_MONSTER_IMAGE];
if ( pxSahdowImage->NewSetIndex(dwCurrFrm) )
{
SHORT shShadowPX, shShadowPY;
if ( m_wABlendDelay || wState==_STATE_ABLEND || bShadowAblended )
{
shShadowPX = pxSahdowImage->m_lpstNewCurrWilImageInfo->shPX;
shShadowPY = pxSahdowImage->m_lpstNewCurrWilImageInfo->shPY;
g_xMainWnd.DrawWithABlendCompDataWithBackBuffer(m_shScrnPosX+shShadowPX, m_shScrnPosY+shShadowPY, pxSahdowImage->m_lpstNewCurrWilImageInfo->shWidth, pxSahdowImage->m_lpstNewCurrWilImageInfo->shHeight, (WORD*)pxSahdowImage->m_pbCurrImage,
_CLIP_WIDTH, _CLIP_HEIGHT, 0XFFFF, 0XFFFF, bOpaRate);
}
else
{
shShadowPX = pxSahdowImage->m_lpstNewCurrWilImageInfo->shPX;
shShadowPY = pxSahdowImage->m_lpstNewCurrWilImageInfo->shPY;
if ( !m_bIsDead )
g_xMainWnd.DrawWithImageForCompClipRgn(m_shScrnPosX+shShadowPX, m_shScrnPosY+shShadowPY, pxSahdowImage->m_lpstNewCurrWilImageInfo->shWidth, pxSahdowImage->m_lpstNewCurrWilImageInfo->shHeight, (WORD*)pxSahdowImage->m_pbCurrImage,
_CLIP_WIDTH, _CLIP_HEIGHT, 0XFFFF, 0XFFFF, bFocused);
}
}
// 拌魂秦辑 弊府扁.
else
{
// 弊覆磊甫 弊赴促.
if ( m_wABlendDelay || wState==_STATE_ABLEND || bShadowAblended )
{
if ( bOpaRate < 0 && bOpaRate > 100 ) bOpaRate = 0;
bShadowAblended = TRUE;
}
if ( !m_bIsDead )
{
g_xMainWnd.DrawWithShadowABlend(
nStartX1, nStartY1,
m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth,
m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight,
(WORD*)m_pxActorImage->m_pbCurrImage,
_CLIP_WIDTH, _CLIP_HEIGHT, g_xGameProc.m_wShadowClr, bShadowAblended, bShadowType, bOpaRate);
}
else
{
g_xMainWnd.DrawWithShadowABlend(
m_rcActor.left+3, m_rcActor.top+2,
m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth,
m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight,
(WORD*)m_pxActorImage->m_pbCurrImage,
_CLIP_WIDTH, _CLIP_HEIGHT, g_xGameProc.m_wShadowClr, bShadowAblended, 50, bOpaRate);
}
}
}
if ( m_wABlendDelay )
{
if ( !m_bABlendRev )
bOpaRate = 100 - ( (m_wABlendCurrDelay * 100) / m_wABlendDelay );
else
bOpaRate = ( (m_wABlendCurrDelay * 100) / m_wABlendDelay );
}
if ( bOpaRate < 0 && bOpaRate > 100 ) bOpaRate = 0;
if ( bFocused )
{
if ( !m_bABlendRev )
bOpaRate -= 20;
else
bOpaRate += 20;
}
DrawWithEffected(m_rcActor.left, m_rcActor.top, m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth, m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight, (WORD*)m_pxActorImage->m_pbCurrImage,
0XFFFF, 0XFFFF, bFocused, bOpaRate, wState);
DrawEffect();
return TRUE;
}
}
return FALSE;
}
/******************************************************************************************************************
窃荐疙 : CActor::DrawHPBar()
累己磊 :
累己老 :
格利 :
免仿 : VOID
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
VOID CActor::DrawHPBar()
{
if ( m_bOpenHealth )
{
FLOAT fHPPercent = (FLOAT)((FLOAT)m_bHPPercent/100);
RECT rcHP = {0, 0, (36*fHPPercent), 4};
g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].NewSetIndex(2);
g_xMainWnd.DrawWithImageForComp(
m_shScrnPosX+7,
m_shScrnPosY-53,
g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].m_lpstNewCurrWilImageInfo->shWidth,
g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].m_lpstNewCurrWilImageInfo->shHeight,
(WORD*)g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].m_pbCurrImage);
g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].NewSetIndex(3);
g_xMainWnd.DrawWithImageForComp(
m_shScrnPosX+7,
m_shScrnPosY-53,
rcHP,
(WORD*)g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].m_pbCurrImage);
}
}
/******************************************************************************************************************
窃荐疙 : CActor::DrawName()
累己磊 :
累己老 :
格利 :
免仿 : VOID
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
VOID CActor::DrawName()
{
SIZE sizeLen;
sizeLen = g_xMainWnd.GetStrLength(NULL, NULL, m_szName);
// RECT rc = {m_shScrnPosX+(_CELL_WIDTH-sizeLen.cx)/2, m_shScrnPosY-25, m_shScrnPosX+(_CELL_WIDTH+sizeLen.cx)/2, m_shScrnPosY-25+20};
RECT rc = {m_rcActor.left + (m_rcActor.right-m_rcActor.left-sizeLen.cx)/2, m_rcActor.top + (m_rcActor.bottom-m_rcActor.top-sizeLen.cy)/2,
m_rcActor.left + (m_rcActor.right-m_rcActor.left+sizeLen.cx)/2, m_rcActor.top + (m_rcActor.bottom-m_rcActor.top+sizeLen.cy)/2};
RECT rcLeft = {rc.left+1, rc.top-1, rc.right+1, rc.bottom-1};
g_xMainWnd.PutsHan(NULL, rc, RGB(10, 10, 10), RGB(0, 0, 0), m_szName);
g_xMainWnd.PutsHan(NULL, rcLeft, m_dwNameClr, RGB(0, 0, 0), m_szName);
}
VOID CActor::ChatMsgAdd()
{
CHAR szDivied[MAX_PATH*2];
ZeroMemory(szDivied, MAX_PATH*2);
g_xMainWnd.StringDivide(_CHAT_WIDTH, m_nDividedChatLine, m_szChatMsg, szDivied);
sscanf(szDivied, "%[^`]%*c %[^`]%*c %[^`]%*c %[^`]%*c %[^`]%*c",
m_szCha
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -