bullet.cpp

来自「国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国」· C++ 代码 · 共 223 行

CPP
223
字号
//-----------------------------------------------------------------------------------------------------------
//	File : Bullet.cpp
//
//	MCGames...
//-----------------------------------------------------------------------------------------------------------

#include "Stdafx.h"

CBullet::CBullet()
{
	m_pPart		= NULL;
	m_bActive	= TRUE;
}

CBullet::~CBullet()
{
	DestroyBullet();
}

HRESULT CBullet::CreateBullet(CMCModel *pModel, _WEAPON_DATA *pBulletInfo,D3DXVECTOR3 vStartPos, LPDIRECT3DDEVICE9 pd3dDevice)
{
	SAFE_DELETE(m_pPart);

	if(!m_bActive) return E_FAIL;

	m_pd3dDevice	= pd3dDevice;
	m_ptagInfo		= pBulletInfo;
	m_vStartPos		= vStartPos;

	m_pPart = new CMCParts;
	m_pPart->CreateParts(pd3dDevice,MODEL_BULLET,pModel);
	m_pPart->Scaling(m_ptagInfo->fScale[0],m_ptagInfo->fScale[1],m_ptagInfo->fScale[2]);

	D3DXVECTOR3 vUp,v1,v2;

	v1 = D3DXVECTOR3(m_ptagInfo->fDir[0],m_ptagInfo->fDir[1],m_ptagInfo->fDir[2]);
	v2 = m_pPart->GetLookDir();

	float R = CUtility::SectorV1ToV2(&v1,&v2);
	D3DXVec3Cross(&vUp,&v2,&v1);
	D3DXVec3Normalize(&vUp,&vUp);
	m_pPart->RotateAxis(&vUp,R);

	v2 = m_pPart->GetLookDir();

	m_pPart->Translation(&vStartPos,TRUE);
	m_pPart->SetWorldMatrix();

	m_pCollision = new CCollision;
	m_pCollision->CreateOBB(m_pPart->GetBoundBox()->vMins,m_pPart->GetBoundBox()->vMaxs,m_pPart->GetWorldMatrix());
	return S_OK;
}

HRESULT CBullet::DestroyBullet()
{
	SAFE_DELETE(m_pPart);
	SAFE_DELETE(m_pCollision);
	m_bActive = FALSE;

	return S_OK;
}

BOOL CBullet::FrameMove()
{
	if(m_pPart==NULL)	return FALSE;
	if(!m_bActive)		return FALSE;

	if( D3DXVec3Length( &(m_pPart->GetPosVector() - m_vStartPos) ) > m_ptagInfo->nRange )
	{
		// 咯扁辑 昏力
		//m_bActive=FALSE;
		this->DestroyBullet();
		return FALSE;
	}

	D3DXVECTOR3 vMove(m_ptagInfo->fDir[0],m_ptagInfo->fDir[1],m_ptagInfo->fDir[2]);
	D3DXVec3Normalize(&vMove,&vMove);
	
	vMove *= m_ptagInfo->fBulletSpeed;

	m_pPart->Translation(&vMove);
	m_pPart->SetWorldMatrix();
	return TRUE;
}

BOOL CBullet::Render()
{
	if(!m_bActive)		return FALSE;

	if(m_pPart) m_pPart->Render();
	return TRUE;
}

BOOL CBullet::CheckCollision(CCollision *pObject)
{
	// 裹困 救俊 甸绢吭栏哥
	if( m_pCollision->SphereToSphere(pObject) )	// 备 面倒 矫累
	{
		D3DXVECTOR3 vDir(m_ptagInfo->fDir[0],m_ptagInfo->fDir[1],m_ptagInfo->fDir[2]);
		if( m_pCollision->OBBToOBBEx(pObject,vDir,m_ptagInfo->fBulletSpeed) )	// 技何 面倒 OBB
		{
			m_bActive=FALSE;				// 咀萍宏甫 波滚覆

//			D3DXVECTOR3 vOrg = m_pPart->GetPosVector();
//			D3DXVECTOR3 vMove;
//			D3DXVec3Normalize(&vMove,&m_tagInfo.vDir);
//			D3DXVECTOR3 vDest = vOrg+(vMove*m_tagInfo.fBulletSpeed);
//			D3DXVECTOR3 vCollision = D3DXVECTOR3(vDest.x,vDest.y,vDest.z);
//			CEffect * pEffect = new CEffect;
//			EFFECT_INFO effect_info;
//			effect_info.vStart = vCollision;
//			effect_info.vDir = vCollision;
//			effect_info.nPersec = 25;
//			effect_info.nMaxFrame = 3;
//			effect_info.nRenderType = 0;
//			pEffect->CreateEffect(&effect_info, "EffectScrap");
//			g_pTerrain->GetEffectManager()->AddEffectSys(pEffect);
		}
	}
	
	// 瘤屈 面倒..
	/*
	if(m_bActive)
	{
		D3DXVECTOR3 vOrg = m_pPart->GetPosVector();
		if(vOrg.y > 0.0f)
			int cde = 0;
		D3DXVECTOR3 vMove(m_ptagInfo->fDir[0],m_ptagInfo->fDir[1],m_ptagInfo->fDir[2]);
		D3DXVec3Normalize(&vMove,&vMove);
	
	//	vMove *= m_tagInfo.fBulletSpeed;
		D3DXVECTOR3 vDest = vOrg+(vMove*m_ptagInfo->fBulletSpeed);
		float fDest = D3DXVec3Length( &(vDest - vOrg));

		float fHeight = g_pTerrain->GetHeightWorld(vDest.x,vDest.z);
		if(fHeight > vDest.y && vOrg.y > fHeight)
		{
//			m_bActive=FALSE;
//			// 八荤 窍伙..
//			float fx = fabs(vMove.x);
//			float fy = vMove.y;
//			float fz = fabs(vMove.z);
//			int iLangex = (int)(fx/1.0f);
//			int iLangez = (int)(fz/1.0f);

//			int nCount =1;
			if(m_ptagInfo->fBulletSpeed <= 1.0f)		// 加档啊 0焊促 累阑锭绰..
			{
				float fCollDist = 0.0f;
				D3DXVECTOR3 vCollision;
//				if(g_pTerrain->CheckCollision(vOrg,vDest,vDest.x,vDest.z,fCollDist,vCollision))
				if(g_pTerrain->CheckCollision(vOrg,vMove,vOrg.x,vOrg.z,fCollDist,vCollision))
				{
					m_bActive=FALSE;
					// 捞棋飘 俊聪皋捞减 虐伙..
				} else if(g_pTerrain->CheckCollision(vOrg,vMove,vDest.x,vDest.z,fCollDist,vCollision)) {		//				if(!m_bActive)		{
					
					m_bActive=FALSE;
				}else{
					vCollision = D3DXVECTOR3(vDest.x,fHeight,vDest.z);
					m_bActive=FALSE;
				}
				// 官风 眉农 窍伙..
			// 捞蒲飘 积己.. 快急 呼焊靛风父 积己..				
				CEffect * pEffect = new CEffect;
				EFFECT_INFO effect_info;
				effect_info.vStart = vCollision;
//				effect_info.vDir = vCollision;		// 过急归磐 掘绢坷伙..	过急阑 傲 掘绢棵鳖.?
				effect_info.vDir = D3DXVECTOR3(0.0f,0.1f,0.0f);		// 过急归磐 掘绢坷伙..	过急阑 傲 掘绢棵鳖.?
				effect_info.nPersec = 25;			// 局聪 鸥烙阑 快急 25风 技泼 沁伙...
				effect_info.nMaxFrame = 3;			// 橇方阑 烙矫风 3俺风 货泼窃.. 飘府啊 3厘观俊 诀绢辑夫~~
				effect_info.nRenderType = 0;
				pEffect->CreateEffect(&effect_info, "EffectScrap");
				g_pTerrain->GetEffectManager()->AddEffectSys(pEffect);
			}else{
	//			for(float fI=0.0f;fI<(int)m_tagInfo.fBulletSpeed;fI+=1.0f)
				D3DXVECTOR3 vOld;
				for(float fI=0.0f;fI<m_ptagInfo->fBulletSpeed;fI+=1.0f)
				{
					D3DXVECTOR3 vCheck = vOrg+(vMove*fI);
					fHeight = g_pTerrain->GetHeightWorld(vCheck.x,vCheck.z);
					if(fHeight > vCheck.y && vOld.y > fHeight)
					{
						//八荤窍伙..
						float fCollDist = 0.0f;
						D3DXVECTOR3 vCollision;
//						if(g_pTerrain->CheckCollision(vOrg,vDest,vCheck.x,vCheck.z,fCollDist,vCollision))
						if(g_pTerrain->CheckCollision(vOrg,vMove,vCheck.x,vCheck.z,fCollDist,vCollision))
						{
							m_bActive=FALSE;
							// 捞棋飘 俊聪皋捞减 虐伙..
//							break;
						} else if(g_pTerrain->CheckCollision(vOrg,vMove,vOld.x,vOld.z,fCollDist,vCollision)) {
							m_bActive=FALSE;
//							break;
						} else {	//if(!m_bActive)
							vCollision = D3DXVECTOR3(vCheck.x,fHeight,vCheck.z);
							m_bActive=FALSE;
//							break;
						}

						// 捞蒲飘 积己.. 快急 呼焊靛风父 积己..				
						CEffect * pEffect = new CEffect;
						EFFECT_INFO effect_info;
						effect_info.vStart = vCollision;
//						effect_info.vDir = vCollision;		// 过急归磐 掘绢坷伙..	过急阑 傲 掘绢棵鳖.?
						effect_info.vDir = D3DXVECTOR3(0.0f,0.1f,0.0f);		// 过急归磐 掘绢坷伙..	过急阑 傲 掘绢棵鳖.?
						effect_info.nPersec = 25;			// 局聪 鸥烙阑 快急 25风 技泼 沁伙...
						effect_info.nMaxFrame = 3;			// 橇方阑 烙矫风 3俺风 货泼窃.. 飘府啊 3厘观俊 诀绢辑夫~~
						effect_info.nRenderType = 0;
						pEffect->CreateEffect(&effect_info, "EffectScrap");
						g_pTerrain->GetEffectManager()->AddEffectSys(pEffect);
						break;
					}
					vOld = vCheck;
				}
			}
		}
	}
*/
	// 府畔且锭绰 馆措肺 第笼绢拎具, 咀萍宏啊 波瘤搁 面倒(TRUE)捞绊, 难历乐促搁 (FALSE)啊 等促.
	return !m_bActive;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?