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