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); }
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); }