예제 #1
0
파일: SfxObj.cpp 프로젝트: iceberry/flyffsf
int	CSfx::SetSfx( LPDIRECT3DDEVICE9 pd3dDevice, int nIndex, 
				   D3DXVECTOR3& vPosSrc, OBJID idSrc, D3DXVECTOR3& vPosDest, OBJID idDest, int nSec )
{
	m_idSrc = idSrc;
	m_idDest = idDest;
	m_vPosDest = vPosDest;
	m_nSec = nSec;

	vPosSrc.y += 0.01f; // 지면에서 약간 띄워주자. 안그러면 밑에 뭍혀서 지글거림.
	SetPos( vPosSrc );
	
	if( nIndex >= 0 ) 
	{
#ifndef __WORLDSERVER
		SetTypeIndex( pd3dDevice, OT_SFX, nIndex,TRUE);
		m_pSfxObj = (CSfxModel*)m_pModel;
#endif	// __WORLDSERVER
		return 1;
	}
	UpdateLocalMatrix();

	if( m_pSfxObj )
		return 1;

	return 0;
}
예제 #2
0
Matrix4 TransformComponent::GetLocalMatrix() 
{ 
	if (m_LocalMatrixChanged == true)
	{
		UpdateLocalMatrix();
	}

	return m_LocalMatrix; 
}
예제 #3
0
파일: Ship.cpp 프로젝트: iceberry/flyffsf
void CShipLoop::Process()
{
	D3DXMatrixInverse( GetInvTM(), NULL, &m_matWorld );		// 좌표변환이 이뤄지기전 매트릭스로 역행렬을 구해놔야 한다.
	
	D3DXVECTOR3	vPos = GetPos();
	D3DXVECTOR3 vDeltaAccu;
	FLOAT fAng = GetAngle();
	
	vDeltaAccu = D3DXVECTOR3(0, 0, 0);		// 누적 벡터는 항상 초기화 해줘야 한다.
	m_fDeltaAng = 0.07f;
#ifdef __X15
	int		i;
	for( i = 0; i < 4; i ++ )
#endif	
	{
		fAng += m_fDeltaAng;		// 왼쪽으로 계속 회전
		AngleToVectorXZ( &m_vAcc, fAng, 0.05f );		// fAng방향으로 추진력발생.
		vDeltaAccu += m_vAcc;		// 서버 15프레임에서만 사용되는 것으로 4번을 누적함.
	}
	
	m_vDelta = vDeltaAccu;
	vPos += m_vDelta;
	SetPos( vPos );
	SetAngle( fAng );
	
#ifdef __WORLDSERVER
	if( (m_nCount & 127) == 0 )
	{
		OBJID idCtrl = NULL_ID;

		g_UserMng.AddSetPosAngle( this, GetPos(), GetAngle() );		// 먼저 this(Ship)의 위치를 sync시킴.
		// 링크되어 있는 모든 ctrl의 위치를 다시 sync시킴.
		for( i = 0; i < MAX_LINKCTRL; i ++ )		
		{
			if( m_LinkCtrl[i] == 0 )	continue;
			idCtrl = m_LinkCtrl[i];
			CCtrl *pCtrl = prj.GetCtrl( idCtrl );
			if( IsValidObj( pCtrl ) )
			{
				if( pCtrl->GetIAObjLink() == this )
					g_UserMng.AddSetPosAngle( pCtrl, pCtrl->GetPos(), pCtrl->GetAngle() );		// this(Ship)의 위치를 sync시킴.
				else
					RemoveCtrl( pCtrl->GetId() );
			}
		}
	}
#endif
	
	// IA오브젝트는 다른 오브젝트를 태우고 다녀야 하므로
	// 실시간으로 매트릭스가 갱신되어야 한다.
	UpdateLocalMatrix();		

	m_nCount ++;
}
예제 #4
0
void Transform3DComponent::UpdateWorldMatrix()
{
	UpdateLocalMatrix();

	if (m_pParentTransform != nullptr)
	{
		m_WorldMatrix = m_LocalMatrix * m_pParentTransform->GetWorldMatrix();
	}
	else
	{
		m_WorldMatrix = m_LocalMatrix;
	}
}
예제 #5
0
파일: SfxObj.cpp 프로젝트: iceberry/flyffsf
BOOL CSfx::SetIndex( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwIndex, BOOL bInitProp )
{
	BOOL bResult = FALSE;
	m_idSrc = NULL_ID;
	m_idDest = NULL_ID;
	m_vPosDest = D3DXVECTOR3( 0, 0, 0);

	if( dwIndex >= 0 ) 
	{
#ifndef __WORLDSERVER
		bResult = SetTypeIndex( pd3dDevice, OT_SFX, dwIndex, bInitProp );
		m_pSfxObj = (CSfxModel*)m_pModel;
#endif	// __WORLDSERVER
	}
	UpdateLocalMatrix();
	return bResult;
}
예제 #6
0
파일: Ship.cpp 프로젝트: iceberry/flyffsf
void CShip::Process()
{
	D3DXMatrixInverse( GetInvTM(), NULL, &m_matWorld );		// 좌표변환이 이뤄지기전 매트릭스로 역행렬을 구해놔야 한다.
	
	D3DXVECTOR3	vPos = GetPos();
	D3DXVECTOR3 vDeltaAccu;

	vDeltaAccu = D3DXVECTOR3(0, 0, 0);		// 누적 벡터는 항상 초기화 해줘야 한다.

#ifdef __X15
	int		i;
	for( i = 0; i < 4; i ++ )
#endif	
	{
		m_Act.Process();			// 오브젝트의 현재움직임 상태를 수행.
		
		m_vDeltaUnit += m_vAcc;			// 현재 속도에 새로운 힘을 더함.
		m_vDeltaUnit *= (1.0f - FRIC_AIR);
		vDeltaAccu += m_vDeltaUnit;		// 서버 15프레임에서만 사용되는 것으로 4번을 누적함.
	}
#ifdef __CLIENT
	FLOAT fLenSq = D3DXVec3Length( &m_vDelta );		// 1/60 sec 속도
	extern int g_nFlySpeed;
	if( m_pMover->IsActiveMover() )
	{
		g_nFlySpeed = (int)( (fLenSq * 60.0f) * 60.0f * 60.0f );
		g_nFlySpeed	= (int)( g_nFlySpeed / 200.0f );
	}
	
#endif	

	m_vDelta = vDeltaAccu;		// 이번프레임의 this 이동량이된다.  항상 m_vDelta에 최종 이동량이 들어가게 하자.
	vPos += m_vDelta;
	SetPos( vPos );
	m_fDeltaAng = m_fAccAng;
	
	// IA오브젝트는 다른 오브젝트를 태우고 다녀야 하므로
	// 실시간으로 매트릭스가 갱신되어야 한다.
	UpdateLocalMatrix();		


	
}