XE::VEC2 XKeyPos::AssignRandom() const { if( m_radiusRandom ) { return m_vPosOrig + XE::GetAngleVector( xRandomF(360.f), m_radiusRandom ); } else { auto vPosRandomed = m_vPosOrig; if( !m_vRangeRandomX.IsZero() ) vPosRandomed.x += xRandomF( m_vRangeRandomX.v1, m_vRangeRandomX.v2 ); if( !m_vRangeRandomY.IsZero() ) vPosRandomed.y += xRandomF( m_vRangeRandomY.v1, m_vRangeRandomY.v2 ); return vPosRandomed; } return m_vPosOrig; }
void CCamera::Transform( LPDIRECT3DDEVICE9 pd3dDevice, CWorld* pWorld ) { D3DXVECTOR3 vTempPos = m_vPos; if( m_nQuakeSec > 0 ) { // float x = (float)(8.0f - xRandom(16)) / 256.0f; // float y = (float)(8.0f - xRandom(16)) / 256.0f; // float z = (float)(8.0f - xRandom(16)) / 256.0f; float x = (m_fQuakeSize / 2.0f) - xRandomF( m_fQuakeSize ); float y = (m_fQuakeSize / 2.0f) - xRandomF( m_fQuakeSize ); float z = (m_fQuakeSize / 2.0f) - xRandomF( m_fQuakeSize ); vTempPos.x += x; vTempPos.y += y; vTempPos.z += z; --m_nQuakeSec; } D3DXVECTOR3 vUp = D3DXVECTOR3(0, 1.0f, 0 ); #ifdef __CLIENT if( g_WndMng.m_pWndWorld ) { if( g_pPlayer && g_Option.m_bRollEffect ) { D3DXMATRIX mRot; FLOAT fRollAng = ((CWndWorld *)g_WndMng.m_pWndWorld)->m_fRollAng; D3DXMatrixRotationYawPitchRoll( &mRot, D3DXToRadian(-g_pPlayer->GetAngle()), 0/*D3DXToRadian(g_pPlayer->GetAngleX())*/, D3DXToRadian(fRollAng) ); D3DXVec3TransformCoord( &vUp, &vUp, &mRot ); } } #endif // client D3DXMatrixLookAtLH( &m_matView, &vTempPos, &m_vLookAt, &vUp ); pd3dDevice->SetTransform( D3DTS_VIEW, &m_matView ); pWorld->UpdateCullInfo( &m_matView, &pWorld->m_matProj ); // 거대한 오브젝트의 컬링을 위해 카메라를 실제보다 뒤로 조금 뺀다. /* D3DXVECTOR3 vTempLook = m_vLookAt; D3DXVec3Normalize(&(vTempLook),&(vTempLook)); vTempPos -= ( vTempLook * 3); D3DXMATRIX mTempView; D3DXMatrixLookAtLH( &mTempView, &vTempPos, &m_vLookAt, &D3DXVECTOR3(0.0f,1.0f,0.0f) ); pWorld->UpdateCullInfo( &mTempView, &pWorld->m_matProj ); */ // 현재 카메라의 역함수를 구한다. 이것은 여기저기서 다목적으로 사용한다. D3DXMatrixInverse( &m_matInvView, NULL, &m_matView ); m_matInvView._41 = 0.0f; m_matInvView._42 = 0.0f; m_matInvView._43 = 0.0f; g_matInvView = m_matInvView; g_matView = m_matView; }
XE::VEC2 XKeyScale::AssignRandom() const { if( !m_vRangeRandomXY.IsZero() ) { const float rangeRandom = xRandomF( m_vRangeRandomXY.v1, m_vRangeRandomXY.v2 ); return m_vScaleOrig + XE::VEC2( rangeRandom, rangeRandom ); } else { auto vRandomed = m_vScaleOrig; if( !m_vRangeRandomX.IsZero() ) { vRandomed.x += xRandomF( m_vRangeRandomX.v1, m_vRangeRandomX.v2 ); } if( !m_vRangeRandomY.IsZero() ) { vRandomed.y += xRandomF( m_vRangeRandomY.v1, m_vRangeRandomY.v2 ); } return vRandomed; } return m_vScaleOrig; }
XE::VEC2 XKeyScale::AssignRandom() const { XE::VEC2 vRandomed; vRandomed = m_vScaleOrig; if( !m_vRangeXY.IsZero() ) { const float rangeRandom = xRandomF( m_vRangeXY.v1, m_vRangeXY.v2 ); vRandomed += XE::VEC2( rangeRandom, rangeRandom ); } else { if( !m_vRangeX.IsZero() ) { vRandomed.x += xRandomF( m_vRangeX.v1, m_vRangeX.v2 ); } if( !m_vRangeY.IsZero() ) { vRandomed.y += xRandomF( m_vRangeY.v1, m_vRangeY.v2 ); } } return vRandomed; }
/** @brief 로긴서버로부터 아직 계정정보가 도착안했다 @param bToLogin true면 로긴서버부터 다시 접속하도록함. */ void XClientConnection::OnAccountInfoNotYetFromLoginSvr( ID idAccount, bool bToLogin ) { const float sec = (bToLogin)? xRandomF(3.f,5.f) : xRandomF(1.f,2.f); // x초후에 다시 재접할것을 요청함. XPacket ar( (ID)xCL2GS_ACCOUNT_RECONNECT_TO_GAMESVR ); ar << (WORD)(sec * 1000); ar << (BYTE)xboolToByte(bToLogin); // Send( ar ); MAIN->m_fpsToClientRetry.Process(); // CONSOLE( "idAcc:%d 의 계정정보가 로긴서버로부터 아직 도착하지 않아 대기열에 넣음" ); // #if _DEV_LEVEL <= DLV_DEV_EXTERNAL // CONSOLE( "idAcc:%d 의 계정정보가 로긴서버로부터 아직 도착하지 않아 접속끊음.", idAccount ); // #endif // // 일단은 별다른 처리없이 즉각 끊어버림. // // SendMsgBox( NULL, 465 ); // SendLoginFailedGameSvr( 0 ); // DoDisconnect(); }
void CreateFlyParticle( CMover *pMover, float fAngX, int nType ) { FLOAT fAngXZ, fAngH, fDist, fSpeed; D3DXVECTOR3 vVel; D3DXVECTOR3 vPos = pMover->GetPos(); if( nType == 0 ) vPos.y += 0.8f; fAngXZ = pMover->GetAngle(); fAngXZ += 180.0f; fAngXZ = D3DXToRadian( fAngXZ ); vPos.x += (xRandom(100) / 100.0f) - 0.50f; vPos.y += (xRandom(100) / 100.0f) - 0.50f; vPos.z += (xRandom(100) / 100.0f) - 0.50f; for( int i = 0; i < 2; i ++ ) { fAngXZ = (float)(-45.0f + xRandomF(90)); fAngXZ += pMover->GetAngle(); fAngXZ += 180.0f; fAngXZ = D3DXToRadian( fAngXZ ); fAngH = (float)(fAngX + xRandomF(10)); fAngH = D3DXToRadian( fAngH ); fSpeed = xRandomF(0.02f); fDist = cosf(-fAngH) * fSpeed; vVel.x = sinf(fAngXZ) * fDist; vVel.z = -cosf(fAngXZ) * fDist; vVel.y = -sinf(-fAngH) * fSpeed; if( nType == 1 ) // 근두운용. g_ParticleMng.CreateParticle( 10 + xRandom(3), vPos, vVel, CMover::GetActiveMover()->GetPos().y + 0.5f ); else g_ParticleMng.CreateParticle( 2 + xRandom(3), vPos, vVel, CMover::GetActiveMover()->GetPos().y + 0.5f ); } }