本文整理汇总了C++中CMover::GetAngleX方法的典型用法代码示例。如果您正苦于以下问题:C++ CMover::GetAngleX方法的具体用法?C++ CMover::GetAngleX怎么用?C++ CMover::GetAngleX使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CMover
的用法示例。
在下文中一共展示了CMover::GetAngleX方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
//.........这里部分代码省略.........
CMover *pSelectMover = prj.GetMover( idSelect );
if( IsValidObj(pSelectMover) )
{
CWorld *pWorld = pMover->GetWorld();
if( pWorld )
{
pWorld->SetObjFocus( pSelectMover ); // 이놈을 타겟으로 설정함.
pMover->m_idTracking = pSelectMover->GetId(); // 탭으로 타겟을 바꾸면 자동추적타겟도 그놈으로 바뀐다.
}
}
}
}
s_bSelectKeyed = g_bKeyTable[VK_TAB];
}
if( /*m_bFlyMove &&*/ m_bLButtonDown || g_bKeyTable[VK_INSERT] ) // 192 = `
{
CObj *pObj = pMover->GetWorld()->GetObjFocus(); // 타겟잡힌놈이 있을때만 휘두를수 있다.
if( pObj && pObj->GetType() == OT_MOVER )
{
if( pMover->IsAttackAble( pObj ) ) // 공격 가능한지 검사.
{
OBJID idTarget = ((CMover *)pObj)->GetId();
ItemProp *pWeapon = pMover->GetActiveHandItemProp();
if( pWeapon )
{
g_pPlayer->PlayCombatMusic();
if( pWeapon->dwItemKind3 == IK3_WAND )
{
D3DXVECTOR3 vFront, vTarget;
AngleToVector( &vFront, g_pPlayer->GetAngle(), -g_pPlayer->GetAngleX(), 1.0f );
vTarget = pObj->GetPos() - g_pPlayer->GetPos();
D3DXVec3Normalize( &vTarget, &vTarget ); // 타겟쪽으로의 벡터의 유닛벡터.
FLOAT fDot = D3DXVec3Dot( &vFront, &vTarget );
if( fDot >= cosf(D3DXToRadian(60.0f)) ) // 타겟이 내가 보는 방향의 +-30도 안에 있으면 발사할수 있다.
{
if( pMover->IsRangeObj( pObj, 64.0f ) ) // 사정거리에 들어오면 발사.
{
pMover->DoAttackMagic( pObj, 0 );
}
}
}
else
{
pMover->SendActMsg( OBJMSG_ATK1, idTarget );
}
}
}
}
}
// fTurnAngle = 0.6f;
ItemProp* pItemProp = prj.GetItemProp( g_pPlayer->GetRideItemIdx() );
if( pItemProp )
{
fTurnAngle = pItemProp->fFlightLRAngle;
}
else
{
Error( "ControlFlying : 빗자루정보 읽기 실패 %d", g_pPlayer->GetRideItemIdx() );
fTurnAngle = 0.6f;
}
示例2: 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 );
//.........这里部分代码省略.........
示例3: GetMover
void CActionMover::PresupposePos2( D3DXVECTOR3* pv, D3DXVECTOR3* pvd, float* pf, float* pfAngleX, float* pfAccPower, u_long uTickCount )
{
CMover* pMover = GetMover();
D3DXVECTOR3 v = pMover->GetPos();
float fAngle = pMover->GetAngle();
D3DXVECTOR3 vDelta = m_vDelta;
if( prj.GetItemProp( pMover->m_dwRideItemIdx ) == NULL )
return;
float fAcc = prj.GetItemProp( pMover->m_dwRideItemIdx )->fFlightSpeed; // 무버가 타고있는 아이템의 인덱스에서 추진력을 꺼내옴.
fAcc *= 0.75f;
float fTheta, fThetaX, d;
DWORD dwMoveState = GetMoveState();
DWORD dwTurnState = GetTurnState();
DWORD dwLookState = GetLookState();
float fX = pMover->GetAngleX();
float fAccPower = m_fAccPower;
float fTurnAngle;
D3DXVECTOR3 vAcc;
for( u_long i = 0; i < uTickCount; i++ )
{
fTheta = D3DXToRadian( fAngle );
switch( dwMoveState )
{
case OBJSTA_STAND:
fAccPower = 0;
break;
case OBJSTA_FMOVE:
fAccPower = fAcc;
break;
}
switch( dwTurnState )
{
case OBJSTA_LTURN:
fTurnAngle = m_fTurnAngle;
if( ( GetStateFlag() & OBJSTAF_ACC ) == 0 )
fTurnAngle *= 2.5f;
fAngle += fTurnAngle;
if( fAngle > 360.0f )
fAngle -= 360.0f;
break;
case OBJSTA_RTURN:
fTurnAngle = m_fTurnAngle;
if( ( GetStateFlag() & OBJSTAF_ACC ) == 0 )
fTurnAngle *= 2.5f;
fAngle -= fTurnAngle;
if( fAngle < 0.0f )
fAngle += 360.0f;
break;
}
switch( dwLookState )
{
case OBJSTA_LOOKUP:
if( fX > -45.0f ) fX -= 1.0f;
break;
case OBJSTA_LOOKDOWN:
if( fX < 45.0f ) fX += 1.0f;
break;
}
fThetaX = D3DXToRadian( fX );
if( GetStateFlag() & OBJSTAF_TURBO )
fAccPower *= 1.5f;
d = cosf( fThetaX ) * fAccPower;
fTheta = D3DXToRadian( fAngle );
vAcc.x = sinf( fTheta ) * d;
vAcc.z = -cosf( fTheta ) * d;
vAcc.y = -sinf( fThetaX ) * fAccPower;
float fLenSq = D3DXVec3LengthSq( &vDelta );
D3DXVECTOR3 vDeltaNorm, vAccNorm;
D3DXVec3Normalize( &vDeltaNorm, &vDelta );
D3DXVec3Normalize( &vAccNorm, &vAcc );
float fDot = D3DXVec3Dot( &vDeltaNorm, &vAccNorm );
if( fAccPower > 0.0f )
{
if( fLenSq > 0.01f )
{
if( fDot < cosf( 70.0f ) )
{
vAcc *= 2.0f;
vDelta *= 0.985f;
}
}
}
fLenSq = D3DXVec3Length( &vDelta );
if( fLenSq < 0.3f )
{
vDelta += vAcc;
}
vDelta *= ( 1.0f - FRIC_AIR );
v += vDelta;
if( v.y > MAX_MOVE_HEIGHT )
v.y = MAX_MOVE_HEIGHT;
//.........这里部分代码省略.........
示例4: ProcessFlyTracking
void CActionMover::ProcessFlyTracking()
{
CMover* pMover = m_pMover;
// 자동 추적 모드. g_pPlayer만 실행된다.
if( pMover->IsActiveMover() && (pMover->m_dwFlag & MVRF_TRACKING) )
{
static float s_fTurnAcc = 0, s_fTurnAccH = 0;
{
CMover *pTarget = prj.GetMover( pMover->m_idTracking ); // 추적할 목표.
if( pTarget )
{
D3DXVECTOR3 vDist = pTarget->GetPos() - pMover->GetPos(); // 나를 원점으로 타겟까지의 벡터.
FLOAT fAngXZ, fAngH;
xGetDegree( &fAngXZ, &fAngH, vDist ); // 타겟과의 각도 구함.
// 남쪽이 0도 기준. 시계방향 -180까지 시계반대방향 +180
// 3도 이하는 무시.
FLOAT fMoverAng = pMover->GetAngle();
if( fMoverAng > 180.0f ) // 계산하기 좋게 좌표계를 +,- 로 바꿈.
fMoverAng -= 360.0f;
FLOAT fSubAng = fAngXZ - fMoverAng;
if( fSubAng > 180.0f )
fSubAng -= 360.0f;
else if( fSubAng < -180.0f )
fSubAng += 360.0f;
#ifdef _DEBUG
#ifdef __XUZHU
extern float _g_fReg[];
_g_fReg[1] = fSubAng;
_g_fReg[2] = fAngXZ;
#endif
#endif
if( fSubAng < -3.0f ) // 오른쪽으로 돌아야 한다.
s_fTurnAcc = -2.5f;
else
if( fSubAng > 3.0f ) // 왼쪽으로 돌아야 한다.
s_fTurnAcc = 2.5f;
else
s_fTurnAcc = 0;
FLOAT fMoverAngX = pMover->GetAngleX();
FLOAT fSubAngH = fAngH - fMoverAngX;
if( fSubAngH > 180.0f )
fSubAngH -= 360.0f;
else if( fSubAngH < -180.0f )
fSubAngH += 360.0f;
if( fSubAngH < -3.0f )
s_fTurnAccH = -1.5f;
else
if( fSubAngH > 3.0f )
s_fTurnAccH = 1.5f;
else
s_fTurnAccH = 0;
pMover->SetAngle( pMover->GetAngle() + s_fTurnAcc );
pMover->SetAngleX( pMover->GetAngleX() + s_fTurnAccH );
if( s_fTurnAcc || s_fTurnAccH ) // 값이 달라지면 전송함.
g_DPlay.PostPlayerAngle( TRUE );
}
}
}
}
示例5: 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 );
}
}
}
} // 투명모드가 아닐때
}
示例6: Process
//.........这里部分代码省略.........
fTemp -= -360.0f;
}
if( !bLeft && !bRight )
{
FLOAT fGoal = fabs(m_fCurRotx - fTemp);
if( m_fCurRotx < fTemp )
{
if( fGoal > fSpeed )
m_fCurRotx += fSpeed;
}
else
{
if( fGoal > fSpeed )
m_fCurRotx -= fSpeed;
}
}
}
else
{
m_fCurRotx = m_fRotx;
}
#else //__Y_CAMERA_SLOW_8
m_fCurRotx = m_fRotx;
#endif //__Y_CAMERA_SLOW_8
#ifdef __XUZHU
_g_fReg[0] = fAngleY;
#endif
float fAdjAng = (1.0f - fAngleY / 90.0f) * 45.0f;
m_fCurRoty += fAdjAng;
m_fCurRoty += pMover->GetAngleX();
if( pMover->m_pActMover->IsFly() ) // 비행할땐 조금 들어주자
m_fCurRoty += 0.0f;
if( m_fCurRoty > 80.0f )
m_fCurRoty = 80.0f;
#if __VER >= 13 // __HOUSING
if(m_nCamMode == CM_MYROOM)
{
if(m_fCurRoty <= 10.0f)
{
m_fCurRoty = 10.0f;
if(m_fRoty > 0.0f) m_fRoty = 0.0f;
if(m_fRoty < -30.0f) m_fRoty = -30.0f;
}
}
#endif // __HOUSING
fAngle = m_fCurRotx - fAngle + 180.0f;
D3DXMATRIX matTemp;
// zoom 상태에 따라 카메라 위치를 조정
extern float fDiv;
if( fDiv == 2.0f )
//vTemp = D3DXVECTOR3( 0.0f, 0.0f, -0.0f - (m_fZoom / 2.0f) * 2.0f );
vTemp = D3DXVECTOR3( 0.0f, 0.0f, -0.0f - 2.0f );
else
{
if( g_pShip )
vTemp = D3DXVECTOR3( 0.0f, 0.0f, -4.0f - m_fZoom * 16.0f );
else