コード例 #1
0
ファイル: ShootingObject.cpp プロジェクト: 2asoft/xray
void CShootingObject::FireBullet(const Fvector& pos, 
								 const Fvector& shot_dir, 
								 float fire_disp,
								 const CCartridge& cartridge,
								 u16 parent_id,
								 u16 weapon_id,
								 bool send_hit)
{
	Fvector dir;
	random_dir(dir,shot_dir,fire_disp);

	m_vCurrentShootDir = dir;
	m_vCurrentShootPos = pos;
	m_iCurrentParentID = parent_id;
	
	bool aim_bullet;
	if (m_bUseAimBullet)
	{
		if (ParentMayHaveAimBullet())
		{
			if (m_fPredBulletTime==0.0)
			{
				aim_bullet=true;
			}
			else
			{
				if ((Device.fTimeGlobal-m_fPredBulletTime)>=m_fTimeToAim)
				{
					aim_bullet=true;
				}
				else
				{
					aim_bullet=false;
				}
			}
		}
		else
		{
			aim_bullet=false;
		}
	}
	else
	{
		aim_bullet=false;
	}
	m_fPredBulletTime = Device.fTimeGlobal;

	float l_fHitPower = 0.0f;
	float l_fHitPowerCritical = 0.0f;
	if (ParentIsActor())//если из оружия стреляет актёр(игрок)
	{
		if (GameID() == eGameIDSingle)
		{
			l_fHitPower			= fvHitPower[g_SingleGameDifficulty];
			l_fHitPowerCritical = fvHitPowerCritical[g_SingleGameDifficulty];
		}
		else
		{
			l_fHitPower			= fvHitPower[egdMaster];
			l_fHitPowerCritical = fvHitPowerCritical[egdMaster];
		}
	}
	else
	{
		l_fHitPower			= fvHitPower[egdMaster];
		l_fHitPowerCritical = fvHitPowerCritical[egdMaster];
	}

	Level().BulletManager().AddBullet( pos, dir,
		m_fStartBulletSpeed * cur_silencer_koef.bullet_speed,
		l_fHitPower * cur_silencer_koef.hit_power,
		l_fHitPowerCritical,
		fHitImpulse * cur_silencer_koef.hit_impulse,
		parent_id, weapon_id,
		ALife::eHitTypeFireWound, fireDistance, cartridge, send_hit, aim_bullet);
}
コード例 #2
0
ファイル: ShootingObject.cpp プロジェクト: OLR-xray/OLR-3.0
void CShootingObject::FireBullet(const Fvector& pos, 
								 const Fvector& shot_dir, 
								 float fire_disp,
								 const CCartridge& cartridge,
								 u16 parent_id,
								 u16 weapon_id,
								 bool send_hit)
{
	Fvector dir;
	random_dir(dir,shot_dir,fire_disp);

	if (constDeviation.pitch != 0 || constDeviation.yaw != 0) // WARN: при больших значениях девиации стрелок может отсрелить себе голову!
	{
		float dir_yaw, dir_pitch;
		dir.getHP(dir_yaw, dir_pitch);
		dir_pitch += constDeviation.pitch;		
		dir_yaw += constDeviation.yaw;
		dir.setHP(dir_yaw, dir_pitch);
	}

	m_vCurrentShootDir = dir;
	m_vCurrentShootPos = pos;
	m_iCurrentParentID = parent_id;
	
	bool aim_bullet;
	if (m_bUseAimBullet)
	{
		if (ParentMayHaveAimBullet())
		{
			if (m_fPredBulletTime==0.0)
			{
				aim_bullet=true;
			}
			else
			{
				if ((Device.fTimeGlobal-m_fPredBulletTime)>=m_fTimeToAim)
				{
					aim_bullet=true;
				}
				else
				{
					aim_bullet=false;
				}
			}
		}
		else
		{
			aim_bullet=false;
		}
	}
	else
	{
		aim_bullet=false;
	}
	m_fPredBulletTime = Device.fTimeGlobal;

	float l_fHitPower;
	if (ParentIsActor())//если из оружия стреляет актёр(игрок)
	{
		if (GameID() == GAME_SINGLE)
		{
			l_fHitPower=fvHitPower[g_SingleGameDifficulty];
		}
		else
		{
			l_fHitPower=fvHitPower[egdMaster];
		}
	}
	else
	{
		l_fHitPower=fvHitPower[egdMaster];
	}

	Level().BulletManager().AddBullet(	pos, dir, m_fStartBulletSpeed, l_fHitPower, 
										fHitImpulse, parent_id, weapon_id, 
										m_eHitType, fireDistance, cartridge, send_hit, aim_bullet);
}