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 + -
显示快捷键?