missile.cpp
来自「国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国」· C++ 代码 · 共 224 行
CPP
224 行
//-----------------------------------------------------------------------------------------------------------
// File : Missile.cpp
//-----------------------------------------------------------------------------------------------------------
#include "StdAfx.h"
CAttack_Missile::CAttack_Missile()
{ this->Init(); }
CAttack_Missile::CAttack_Missile(_WEAPON_DATA *pInfo, CMCModel *pGunModel, CMCModel *pBulletModel)
{
this->Init(); // 檬扁拳
this->SetInfoEquip(pInfo); // 沥焊悸泼
this->Create(pGunModel,pBulletModel); // 葛胆 积己
}
CAttack_Missile::~CAttack_Missile()
{
m_listBullet.clear();
}
void CAttack_Missile::Init()
{
m_EquipType = EQUIP_ATTACK;
m_cpPart = NULL;
m_pBulletModel = NULL;
m_dwLastTime = timeGetTime();
m_dwCurTime = 0;
m_bReload = false;
}
HRESULT CAttack_Missile::Create(CMCModel *pGunModel, CMCModel *pBulletModel)
{
SAFE_DELETE(m_cpPart);
if(pGunModel)
{
m_cpPart = new CMCParts;
m_cpPart->CreateParts(g_pApp->GetD3dDevice(),MODEL_EQUIP,pGunModel);
}
if(pBulletModel)
m_pBulletModel = pBulletModel;
m_nBulletNum = m_pInfoEquip->nBulletNum; // 弥檬 醚舅 悸泼
return S_OK;
}
void CAttack_Missile::DeleteBullet(list<CBullet*>::iterator iter)
{ SAFE_DELETE(*iter); m_listBullet.erase(iter); }
bool CAttack_Missile::Fire(bool bMyShoot)
{
// 楷惯 加档甫 拌魂茄促.
m_dwCurTime = timeGetTime();
DWORD dwElapsed = m_dwCurTime - m_dwLastTime;
m_dwLastTime = m_dwCurTime;
m_dwAccTime += dwElapsed;
if(m_dwAccTime < m_pInfoEquip->fShootSpeed ) // 楷惯加档焊促 儒弗 矫埃捞 累促搁
return false; // 醚舅阑 父甸瘤 臼绰促.
// 醚舅 俺荐 憋扁
if( m_nBulletNum <= 0)
{
m_nBulletNum = 0;
m_bReload = true;
// return false;
}
--m_nBulletNum;
m_dwAccTime = 0;
CTestBullet *pTestBullet = new CTestBullet();
// 罚待 矫累 谅钎 积己
D3DXVECTOR3 vStartPos;
if( !m_cpPart->GetFirePos(&vStartPos) ) // 矫累 谅钎扼 救逞绢 柯促搁
{ return false; } // 傍拜 且荐 绝澜
D3DXVECTOR3 vDir(m_pInfoEquip->fDir[0],m_pInfoEquip->fDir[1],m_pInfoEquip->fDir[2]);
if( m_pObject != NULL ) // 拿府记 坷宏璃飘啊 乐促搁, 绝阑 荐档 乐促.(窍疵俊 醚阑 败传促带啊)
{
// 醚(肚绰 醚舅鞍篮 拱眉)狼 规氢阑 拌魂茄促.
// 弥辆 规氢 = 乔欧等 瘤痢 - 胶鸥飘 瘤痢
D3DXVec3Normalize(&vDir,&(m_pObject->m_tagUnproRay.vIntersectPt - vStartPos));
}
D3DXVECTOR3 vLook,vCross;
D3DXVec3Normalize(&vLook,&vDir);
D3DXVec3Cross(&vCross,&D3DXVECTOR3(0,1,0),&vLook);
D3DXVec3Normalize(&vCross,&vCross);
// ((罚待%100)-沥犬档)/100
// -10~90 / 100 = -0.1 ~ 0.9
vLook *= (float)( (rand()%100)-10 )/1000;
vCross *= (float)( (rand()%100)-50 )/700;
vStartPos += vLook;
vStartPos += vCross;
pTestBullet->CreateBullet(m_pBulletModel, m_pInfoEquip, vStartPos);
m_listBullet.push_back(pTestBullet);
CEffect * pEffect = new CEffect;
EFFECT_INFO effect_info;
effect_info.vStart = vStartPos;
effect_info.vDir = m_cpPart->GetLookDir();
effect_info.nPersec = 25; // 局聪 鸥烙阑 快急 25风 技泼 沁伙...
effect_info.nMaxFrame = 3; // 橇方阑 烙矫风 3俺风 货泼窃.. 飘府啊 3厘观俊 诀绢辑夫~~
effect_info.nRenderType = 0;
pEffect->CreateEffect(&effect_info, "FireNomalWeapon");
g_pTerrain->GetEffectManager()->AddEffectSys(pEffect);
return true;
}
BOOL CAttack_Missile::DeleteBullet(DWORD nIndex)
{
int i=0;
list<CBullet*>::iterator iter;
for(iter=m_listBullet.begin(); iter!=m_listBullet.end(); ++iter, ++i)
{
if(i == nIndex)
{
this->DeleteBullet(iter);
return TRUE;
}
}
return FALSE;
}
BOOL CAttack_Missile::CheckCollision(CCollision *pObject)
{
m_pObject = pObject; // Property甫 惑加 罐绰 逞甸篮 傍烹栏肺 秦拎具窃
if( m_listBullet.empty() )
return FALSE;
// 甸绢柯 拿府记阑 啊瘤绊 "OBB 拿府记"阑 父电促.
CCollision OBB;
if( m_pObject->m_Type == MODEL_PLAYER ) // 颇明牢瘤, 蜡历狼 何困老荐档 乐绊
{ OBB.CreateOBB( m_pObject->m_pPart ); }
else if( m_pObject->m_Type == MODEL_OBJECT ) // 坷宏璃飘牢瘤, 弊成 倒耽捞 老荐档 乐促.
{ OBB.CreateOBB( m_pObject->m_pObject ); }
// 父甸绢柳 OBB拿府记栏肺 醚舅苞 面倒 八荤甫 茄促.
BOOL bCheck = FALSE;
list<CBullet*>::iterator iter;
for(iter=m_listBullet.begin(); iter!=m_listBullet.end(); ++iter)
{
CBullet *pBullet = *iter;
if( !pBullet->IsActive() ) // 醚舅捞 磷绢 乐促搁
continue;
if( pBullet->CheckCollision( &OBB ) )
{
bCheck = TRUE;
}
}
return bCheck;
}
BOOL CAttack_Missile::FrameMove()
{
list<CBullet*>::iterator iter;
for(iter=m_listBullet.begin(); iter!=m_listBullet.end(); ++iter)
{
if( !(*iter)->IsActive() ) // 磷篮 惑怕狼 醚舅捞扼搁 昏力茄促.
{
this->DeleteBullet(iter); // 昏力
iter = m_listBullet.begin(); // 风橇甫 拌加 倒扁 困秦辑
}
else (*iter)->FrameMove();
}
// list啊 厚绢乐栏搁 Longrange绰 磷篮惑怕
m_bActive = !m_listBullet.empty();
// Reload绰 Reload 局聪概捞记捞 场唱搁, 单捞磐啊 贸府 等促.
// if( (m_cpPart->GetCurAniType() == LEFT_RELOAD || m_cpPart->GetCurAniType() == RIGHT_RELOAD) && m_bReload)
// {
// if( m_cpPart->GetEndFrame() == m_cpPart->GetCurFrame() )
// {
// if( m_pInfoAttack->MagazineNum <= 0 )
// { return false; }
//
// m_bReload = false;
//
// --m_pInfoAttack->MagazineNum;
//
// m_nBulletNum = m_pInfoAttack->nBulletNum;
// }
// }
return TRUE;
}
BOOL CAttack_Missile::Render()
{
if(m_cpPart) m_cpPart->Render();
list<CBullet*>::iterator iter;
for(iter=m_listBullet.begin(); iter != m_listBullet.end(); ++iter)
{
(*iter)->Render();
}
CUtility::printf_Debug("\n旦瘤 : %d",m_pInfoEquip->nAttack);
return TRUE;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?