本文整理汇总了C++中CMover::GetWorld方法的典型用法代码示例。如果您正苦于以下问题:C++ CMover::GetWorld方法的具体用法?C++ CMover::GetWorld怎么用?C++ CMover::GetWorld使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CMover
的用法示例。
在下文中一共展示了CMover::GetWorld方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Process
void CBackCamera::Process( LPDIRECT3DDEVICE9 pd3dDevice ,float fFactor )
{
#ifdef __CLIENT
CMover *pMover = CMover::GetActiveMover();
// 여기서 카메라 세팅!!!!!
if( pMover == NULL ) return;
CWorld* pWorld = pMover->GetWorld();
if( pWorld == NULL )
return;
D3DXMATRIX matView, mat;
FLOAT fAngle = 0, fAngleY = 0;
D3DXVECTOR3 vPos = pMover->GetPos();
vPos.y += 0.9f;
#if __VER >= 13 // __HOUSING
if(m_nCamMode == CM_MYROOM)
{
if(m_fZoom <= 0.5f) m_fZoom = 0.5f;
// if(m_fZoom >= 3.0f) m_fZoom = 3.0f;
}
#endif // __HOUSING
CMover* pMoverTarget = (CMover*)g_WorldMng.Get()->GetObjFocus() ;
D3DXVECTOR3 vTarget,vTemp;
if( pMoverTarget && pMover->m_pActMover->IsFly() && (pMover->m_dwFlag & MVRF_TRACKING) )
{ // 날고 있는 경우 타겟이 있다면
// 타겟쪽으로 카메라 방향을 수정한다.
vTemp = vPos - pMoverTarget->GetPos();
if( vTemp.z > 0 )
{
fAngle =- (float)( atan( vTemp.x / vTemp.z ) * 180 / 3.1415926f );
}
else
{
fAngle =- (float)( atan( vTemp.x / vTemp.z ) * 180 / 3.1415926f ) + 180;
}
D3DXVECTOR3 vDistXZ = vTemp;
vDistXZ.y = 0;
float fDistSq = D3DXVec3Length( &vDistXZ ); // XZ평면에서의 길이
fAngleY = atan2( fDistSq, vTemp.y/* * vTemp.y*/ );
fAngleY = D3DXToDegree( fAngleY );
float fReg1 = vTemp.y / 40.0f;
if( fReg1 > 0 )
{
if( fReg1 >= 2.0f ) fReg1 = 2.0f;
} else
if( fReg1 < 0 )
{
if( fReg1 <= -2.0f ) fReg1 = -2.0f;
}
m_fCurRoty = m_fRoty + m_fZoom * fReg1;
if( m_bLock )
fAngle = 0;
}
else
{
fAngle = pMover->GetAngle();
if( m_bLock )
fAngle = 0;
fAngleY = 90.0f;
m_fCurRoty = m_fRoty + m_fZoom * 4;
}
m_vLookAt = vPos;
#ifdef __Y_CAMERA_SLOW_8
if( !g_WndMng.m_pWndWorld->m_bRButtonDown && ( !g_bKeyTable[ VK_LEFT ] && !g_bKeyTable[ VK_RIGHT ] ) )
{
static FLOAT fSpeed = 2.0f;
BOOL bLeft = FALSE;
BOOL bRight = FALSE;
FLOAT fTemp = 0.0f;
fTemp = m_fRotx;
if( (GetAnglePie(fTemp) == 1 && GetAnglePie(m_fCurRotx) == 4) )
bRight = TRUE;
if( (GetAnglePie(fTemp) == 4 && GetAnglePie(m_fCurRotx) == 1) )
bLeft = TRUE;
if( bRight )
{
m_fCurRotx += m_fRotx;
if( m_fCurRotx < fTemp )
{
m_fCurRotx += fSpeed;
}
m_fCurRotx -= m_fRotx;
if( m_fCurRotx >= 0.0f )
{
m_fCurRotx = -360.0f;
//.........这里部分代码省略.........
示例2: if
int CWndWorld::ControlFlying( DWORD dwMessage, CPoint point )
{
static float fTurnAngle = 0.0f;
static BOOL s_bTraceKeyed = 0, s_bSelectKeyed = 0, s_bTurbo2 = 0;
// static BOOL s_bFastTurn;
int nMsg = 0;
// BOOL bFlyKey;
BOOL bUp, bDown, bLeft, bRight;
BOOL bAcc = FALSE;
BOOL bTurbo;
// BOOL bFastTurn = FALSE;
BYTE nFrame = MAX_CORR_SIZE_150;
CMover* pMover = CMover::GetActiveMover();
bUp = g_bKeyTable[g_Neuz.Key.chUp];
bDown = g_bKeyTable['S'];
// 좌/우 회전
bLeft = g_bKeyTable[g_Neuz.Key.chLeft];
bRight = g_bKeyTable['D'];
// 급선회.
// bFastTurn = g_bKeyTable[ VK_SHIFT ];
// CMover* pMoverTarget = (CMover*)g_WorldMng.Get()->GetObjFocus() ;
// 가속 상태면 전진 명령 계속 보냄
bool fMoved = false;
bool fBehavior = false;
if( pMover->m_pActMover->IsStateFlag( OBJSTAF_ACC ) ) {
if( pMover->SendActMsg( OBJMSG_FORWARD ) == 1 ) {
fMoved = true;
}
}
else {
if( pMover->SendActMsg( OBJMSG_STAND ) == 1 ) {
fMoved = true;
}
}
//
bAcc = g_bKeyTable[VK_SPACE];
if( bAcc && !s_bAccKeyed ) // 키 누른순간에만 토글시킴.
{
if( pMover->m_pActMover->IsStateFlag( OBJSTAF_ACC ) ) // 가속중이었다면
{
pMover->SendActMsg( OBJMSG_ACC_STOP ); // 가속 멈춤
if( pMover->m_pActMover->IsActTurn() )
{
fMoved = true;
}
}
else
{
// 가속중이 아니었다면 가속 시킴.
if( pMover->SendActMsg( OBJMSG_ACC_START ) == 0 )
g_WndMng.PutString( prj.GetText( TID_GAME_AIRFUELEMPTY ) );
else
{
if( pMover->SendActMsg( OBJMSG_FORWARD ) == 1 )
fMoved = true;
}
}
}
s_bAccKeyed = bAcc;
bTurbo = g_bKeyTable[g_Neuz.Key.chWalk];
if( bTurbo && !s_bTurbo2 ) // 토글 방식.
{
if( pMover->m_pActMover->IsStateFlag( OBJSTAF_TURBO ) )
{
if( pMover->SendActMsg( OBJMSG_MODE_TURBO_OFF ) == 1 )
fMoved = true;
} else
{
if( pMover->SendActMsg( OBJMSG_MODE_TURBO_ON ) == 1 )
fMoved = true;
}
}
s_bTurbo2 = bTurbo;
if( pMover->m_pActMover->IsFly() )
{
if( g_bKeyTable[g_Neuz.Key.chTrace] && !s_bTraceKeyed )
{
CCtrl* pFocusObj = (CCtrl*)(pMover->GetWorld()->GetObjFocus());
if( pFocusObj && pFocusObj->GetType() == OT_MOVER )
{
CMover* pFocusMover = (CMover*)pFocusObj;
if( pMover->m_dwFlag & MVRF_TRACKING ) // 이미 실행중이면 해제.
{
pMover->m_dwFlag &= (~MVRF_TRACKING); // 추적모드해제.
pMover->m_idTracking = NULL_ID;
} else
{
// 비행중 추적모드.
pMover->m_dwFlag |= MVRF_TRACKING; // 추적모드.
pMover->m_idTracking = pFocusMover->GetId();
}
} else
//.........这里部分代码省略.........
示例3: GetMover
BOOL CAIMonster2::BeginAttack()
{
CMover *pMover = GetMover();
OBJMSG dwMsg = OBJMSG_NONE;
DWORD dwItemID = 0;
MoverProp *pProp = pMover->GetProp();
// 추격하여 도착하면 선택되었던 공격방식을 적용시킨다.
switch( m_nAttackType )
{
case CAT_NORMAL: dwMsg = OBJMSG_ATK1; dwItemID = pProp->dwAtk1; break;
case CAT_NORMAL2: dwMsg = OBJMSG_ATK2; dwItemID = pProp->dwAtk1; break;
case CAT_QUAKEDOUBLE: dwMsg = OBJMSG_ATK3; dwItemID = pProp->dwAtk3; break;
case CAT_QUAKE_ONE: dwMsg = OBJMSG_ATK4; dwItemID = pProp->dwAtk2; break;
default:
ASSERT(0);
}
if( dwMsg == OBJMSG_NONE )
return FALSE;
if( m_idTarget == NULL_ID )
return FALSE;
// LPMODELELEM lpModelElem = prj.m_modelMng.GetModelElem( OT_MOVER, pMover->GetIndex() );
// if( lpModelElem == NULL )
// return FALSE;
// if( lpModelElem->m_nMax
dwMsg = OBJMSG_ATK1;
int nResult = pMover->DoAttackMelee( m_idTarget, dwMsg, dwItemID );
if( nResult )
{
CMover *pTarget = prj.GetMover( m_idTarget );
// 이벤트 메세지
// 보스몬스터가 유저에게 말을 한다.
switch( m_nAttackType )
{
case CAT_QUAKEDOUBLE:
{
if( pTarget )
{
g_UserMng.AddWorldShout( pMover->GetName(), prj.GetText(TID_GAME_BOSS_BIGMUSCLE_MSG_04),
pTarget->GetPos(), pTarget->GetWorld() );
}
}
break;
case CAT_QUAKE_ONE:
{
if( pTarget )
{
TCHAR szChar[128] = { 0 };
sprintf( szChar, prj.GetText(TID_GAME_BOSS_BIGMUSCLE_MSG_05), pTarget->GetName() );
g_UserMng.AddWorldShout( pMover->GetName(), szChar,
pTarget->GetPos(), pTarget->GetWorld() );
}
}
break;
}
return TRUE;
}
return FALSE;
}