Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
/**
 @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 );
	}
	
}