本文整理汇总了C++中CMover::IsMode方法的典型用法代码示例。如果您正苦于以下问题:C++ CMover::IsMode方法的具体用法?C++ CMover::IsMode怎么用?C++ CMover::IsMode使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CMover
的用法示例。
在下文中一共展示了CMover::IsMode方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: cosf
void CActionMover::ProcessFlyMove( void )
{
#ifdef __CLIENT
g_nDrift = 0; // 드리프트 플랙 클리어
#endif
float fLenSq = D3DXVec3LengthSq( &m_vDelta );
if( fLenSq == 0.0f && (GetStateFlag() & OBJSTAF_ACC ) == 0 )
return; // 멈춤 상태면 리턴
CMover* pMover = m_pMover;
FLOAT fAccPwr = m_fAccPower;
#ifdef __CLIENT
ProcessFlyTracking();
#endif // client
// 터보모드 처리
if( (GetStateFlag() & OBJSTAF_TURBO) && (GetStateFlag() & OBJSTAF_ACC) ) // 터보모드 & 전진중
{
#ifdef __WORLDSERVER
pMover->m_tmAccFuel = (int)( pMover->m_tmAccFuel - (1000.0f / (float)FRAME_PER_SEC) ); // 1/60만큼 깎음
#endif
if( pMover->m_tmAccFuel <= 0 ) // 가속연료가 다 떨어지면
{
pMover->m_tmAccFuel = 0;
SendActMsg( OBJMSG_MODE_TURBO_OFF ); // 터보모드 중지
#ifdef __WORLDSERVER
g_UserMng.AddSendActMsg( pMover, OBJMSG_MODE_TURBO_OFF );
#endif
}
else
fAccPwr *= 1.2f; // 가속연료가 남아있다면 터보모드
}
#ifdef __CLIENT
ProcessFlyParticle( fLenSq );
#endif
// 관성처리
if( fAccPwr > 0.0f )
{
// 힘벡터 생성
FLOAT fAngX = D3DXToRadian( pMover->GetAngleX() );
FLOAT fAng = D3DXToRadian( pMover->GetAngle() );
FLOAT fDist = cosf(fAngX) * fAccPwr;
D3DXVECTOR3 vAcc;
vAcc.x = sinf( fAng ) * fDist;
vAcc.z = -cosf( fAng ) * fDist;
vAcc.y = -sinf( fAngX ) * fAccPwr;
// 관성벡터와 추진력벡터가 각도가 50도 이하면 급추진
if( fLenSq > 0.01f )
{
D3DXVECTOR3 vDeltaNorm, vAccNorm;
D3DXVec3Normalize( &vDeltaNorm, &m_vDelta );
D3DXVec3Normalize( &vAccNorm, &vAcc );
float fDot = D3DXVec3Dot( &vDeltaNorm, &vAccNorm );
if( fDot < 0.633319f ) // 이전코드: cosf(70.0f) 값으로는 대략 50도
{
vAcc *= 2.0f;
m_vDelta *= 0.985f;
#ifdef __CLIENT
g_nDrift = 1;
if( ! ( pMover->IsMode( TRANSPARENT_MODE ) ) ) // 투명상태가 아닐때만 렌더.
{
if( (g_nProcessCnt & 3) == 0 )
CreateSfx( g_Neuz.m_pd3dDevice, XI_NAT_DUST_RUN, pMover->GetPos() );
}
#endif
}
}
fLenSq = D3DXVec3LengthSq( &m_vDelta ); // 1/60 sec 속도
float fMaxSpeed = 0.3f;
if( GetStateFlag() & OBJSTAF_TURBO ) // 터보모드에선 MAX속도가 1.1배
fMaxSpeed *= 1.1f;
if( fLenSq < (fMaxSpeed * fMaxSpeed) ) // 일정이상 속도를 넘지 않게 하자.
m_vDelta += vAcc; // 관성벡터 += 추진력벡터
}
m_vDelta *= (1.0f - FRIC_AIR); // 마찰력에 의한 감소
// raiders - 수치적 안정성을 위해서 적은 수치가 계산되는 것을 피한다.
fLenSq = D3DXVec3LengthSq( &m_vDelta );
if( m_fAccPower == 0.0f && fLenSq < 0.0002f * 0.0002f )
{
fLenSq = 0;
m_vDelta = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
RemoveStateFlag( OBJSTAF_ACC ); // 가속상태 해제
}
#ifdef __CLIENT
if( pMover->IsActiveMover() )
{
g_nFlySpeed = (int)( (sqrt(fLenSq) * 60.0f) * 60.0f * 60.0f );
g_nFlySpeed = (int)( g_nFlySpeed / 200.0f );
//.........这里部分代码省略.........
示例2: ProcessFlyParticle
void CActionMover::ProcessFlyParticle( float fLenSq )
{
CMover *pMover = m_pMover;
// 운영자 투명모드때는 파티클 안나옴.
if( (pMover->IsMode( TRANSPARENT_MODE ) ) == 0 )
{
ItemProp* pRideProp = prj.GetItemProp( m_pMover->m_dwRideItemIdx ); // 현재 타고있는 탈것의 프로퍼티.
// 비행 파티클 처리.
if( fLenSq > 0.01f )
{
if( (pMover->IsActiveMover() && g_Neuz.m_camera.m_fZoom > 2.0f) || pMover->IsActiveMover() == FALSE ) // 일정속도 이상이 되면 꼬리에 파티클이 나오기 시작.
{
int nType = 0;
if( pRideProp && pRideProp->dwID == II_RID_RID_BOR_RIDINGCLOUD )
nType = 1;
CreateFlyParticle( pMover, pMover->GetAngleX(), nType );
}
}
if( fLenSq > 0.001f )
{
if( (pMover->IsActiveMover() && g_Neuz.m_camera.m_fZoom > 1.0f) || pMover->IsActiveMover() == FALSE )
{
if( pRideProp && pRideProp->dwItemKind3 == IK3_BOARD ) // 보드만 꼬리가 나온다.
{
if( m_pTail )
{
if( pRideProp->dwID == II_RID_RID_BOR_RIDINGCLOUD ) // 근두운일때
{
if( m_pTail->GetType() != 2 ) // 생성되었던 꼬리고 근두운용이 아니면
m_pTail->ChangeTexture( D3DDEVICE, "etc_Tail2.bmp", 2 );
} else
{
if( m_pTail->GetType() != 1 ) // 생성되었던 꼬리고 일반보드용이 아니면
m_pTail->ChangeTexture( D3DDEVICE, "etc_Tail1.bmp", 1 ); // 일반보드용으로 텍스쳐 교체.
}
}
if( m_pTail == NULL ) // 아직 할당 안됐으면 할당하고.
{
if( pRideProp->dwID == II_RID_RID_BOR_RIDINGCLOUD ) // 근두운...
{
m_pTail = (CTailEffectBelt*)g_TailEffectMng.AddEffect( g_Neuz.m_pd3dDevice, "etc_Tail2.bmp", 2 );
}
else
{
m_pTail = (CTailEffectBelt*)g_TailEffectMng.AddEffect( g_Neuz.m_pd3dDevice, "etc_Tail1.bmp", 1 );
}
}
D3DXVECTOR3 vPos1, vPos2;
D3DXVECTOR3 vLocal;
FLOAT fAngXZ = pMover->GetAngle();
FLOAT fAngH = pMover->GetAngleX();
AngleToVectorXZ( &vLocal, fAngXZ, -1.0f );
fAngXZ -= 90.0f;
if( fAngXZ < 0 )
fAngXZ += 360.0f;
AngleToVector( &vPos1, fAngXZ, -fAngH, 0.5f );
vPos1 += pMover->GetPos();
vPos1 += vLocal;
fAngXZ = pMover->GetAngle();
fAngH = pMover->GetAngleX();
AngleToVectorXZ( &vLocal, fAngXZ, -1.0f );
fAngXZ += 90.0f;
if( fAngXZ > 360.0f )
fAngXZ -= 360.0f;
AngleToVector( &vPos2, fAngXZ, -fAngH, 0.5f );
vPos2 += pMover->GetPos();
vPos2 += vLocal;
if( m_pTail )
m_pTail->CreateTail( vPos1, vPos2 );
}
}
}
} // 투명모드가 아닐때
}