void CWeapon::OnZoomIn() { m_zoom_params.m_bIsZoomModeNow = true; if(m_zoom_params.m_bUseDynamicZoom) SetZoomFactor(m_fRTZoomFactor); else m_zoom_params.m_fCurrentZoomFactor = CurrentZoomFactor(); EnableHudInertion (FALSE); //if(m_zoom_params.m_bZoomDofEnabled && !IsScopeAttached()) // GamePersistent().SetEffectorDOF (m_zoom_params.m_ZoomDof); if(GetHUDmode()) GamePersistent().SetPickableEffectorDOF(true); if(m_zoom_params.m_sUseBinocularVision.size() && IsScopeAttached() && NULL==m_zoom_params.m_pVision) m_zoom_params.m_pVision = xr_new<CBinocularsVision>(m_zoom_params.m_sUseBinocularVision/*"wpn_binoc"*/); if(m_zoom_params.m_sUseZoomPostprocess.size() && IsScopeAttached()) { CActor *pA = smart_cast<CActor *>(H_Parent()); if(pA) { if(NULL==m_zoom_params.m_pNight_vision) { m_zoom_params.m_pNight_vision = xr_new<CNightVisionEffector>(m_zoom_params.m_sUseZoomPostprocess/*"device_torch"*/); } } } }
void CWeapon::modify_holder_params (float &range, float &fov) const { if (!IsScopeAttached()) { inherited::modify_holder_params (range,fov); return; } range *= m_addon_holder_range_modifier; fov *= m_addon_holder_fov_modifier; }
void CWeapon::ZoomInc() { if(!IsScopeAttached()) return; if(!m_zoom_params.m_bUseDynamicZoom) return; float delta,min_zoom_factor; GetZoomData(m_zoom_params.m_fScopeZoomFactor, delta, min_zoom_factor); float f = GetZoomFactor()-delta; clamp (f,m_zoom_params.m_fScopeZoomFactor,min_zoom_factor); SetZoomFactor ( f ); }
void CWeapon::UpdateHUDAddonsVisibility() {//actor only if(!GetHUDmode()) return; //. return; if(ScopeAttachable()) { HudItemData()->set_bone_visible(wpn_scope, IsScopeAttached() ); } if(m_eScopeStatus==ALife::eAddonDisabled ) { HudItemData()->set_bone_visible(wpn_scope, FALSE, TRUE ); }else if(m_eScopeStatus==ALife::eAddonPermanent) HudItemData()->set_bone_visible(wpn_scope, TRUE, TRUE ); if(SilencerAttachable()) { HudItemData()->set_bone_visible(wpn_silencer, IsSilencerAttached()); } if(m_eSilencerStatus==ALife::eAddonDisabled ) { HudItemData()->set_bone_visible(wpn_silencer, FALSE, TRUE); } else if(m_eSilencerStatus==ALife::eAddonPermanent) HudItemData()->set_bone_visible(wpn_silencer, TRUE, TRUE); if(GrenadeLauncherAttachable()) { HudItemData()->set_bone_visible(wpn_grenade_launcher, IsGrenadeLauncherAttached()); } if(m_eGrenadeLauncherStatus==ALife::eAddonDisabled ) { HudItemData()->set_bone_visible(wpn_grenade_launcher, FALSE, TRUE); }else if(m_eGrenadeLauncherStatus==ALife::eAddonPermanent) HudItemData()->set_bone_visible(wpn_grenade_launcher, TRUE, TRUE); }
float CWeapon::Weight() const { float res = CInventoryItemObject::Weight(); if(IsGrenadeLauncherAttached()&&GetGrenadeLauncherName().size()){ res += pSettings->r_float(GetGrenadeLauncherName(),"inv_weight"); } if(IsScopeAttached()&&m_scopes.size()){ res += pSettings->r_float(GetScopeName(),"inv_weight"); } if(IsSilencerAttached()&&GetSilencerName().size()){ res += pSettings->r_float(GetSilencerName(),"inv_weight"); } if(iAmmoElapsed) { float w = pSettings->r_float(m_ammoTypes[m_ammoType].c_str(),"inv_weight"); float bs = pSettings->r_float(m_ammoTypes[m_ammoType].c_str(),"box_size"); res += w*(iAmmoElapsed/bs); } return res; }
u32 CWeapon::Cost() const { u32 res = CInventoryItem::Cost(); if(IsGrenadeLauncherAttached()&&GetGrenadeLauncherName().size()){ res += pSettings->r_u32(GetGrenadeLauncherName(),"cost"); } if(IsScopeAttached()&&m_scopes.size()){ res += pSettings->r_u32(GetScopeName(),"cost"); } if(IsSilencerAttached()&&GetSilencerName().size()){ res += pSettings->r_u32(GetSilencerName(),"cost"); } if(iAmmoElapsed) { float w = pSettings->r_float(m_ammoTypes[m_ammoType].c_str(),"cost"); float bs = pSettings->r_float(m_ammoTypes[m_ammoType].c_str(),"box_size"); res += iFloor(w*(iAmmoElapsed/bs)); } return res; }
float CWeapon::CurrentZoomFactor() { return IsScopeAttached() ? m_zoom_params.m_fScopeZoomFactor : m_zoom_params.m_fIronSightZoomFactor; };
void CWeapon::UpdateAddonsVisibility() { IKinematics* pWeaponVisual = smart_cast<IKinematics*>(Visual()); R_ASSERT(pWeaponVisual); u16 bone_id; UpdateHUDAddonsVisibility (); pWeaponVisual->CalculateBones_Invalidate (); bone_id = pWeaponVisual->LL_BoneID (wpn_scope); if(ScopeAttachable()) { if(IsScopeAttached()) { if(!pWeaponVisual->LL_GetBoneVisible (bone_id)) pWeaponVisual->LL_SetBoneVisible (bone_id,TRUE,TRUE); }else{ if(pWeaponVisual->LL_GetBoneVisible (bone_id)) pWeaponVisual->LL_SetBoneVisible (bone_id,FALSE,TRUE); } } if(m_eScopeStatus==ALife::eAddonDisabled && bone_id!=BI_NONE && pWeaponVisual->LL_GetBoneVisible(bone_id) ) { pWeaponVisual->LL_SetBoneVisible (bone_id,FALSE,TRUE); // Log("scope", pWeaponVisual->LL_GetBoneVisible (bone_id)); } bone_id = pWeaponVisual->LL_BoneID (wpn_silencer); if(SilencerAttachable()) { if(IsSilencerAttached()){ if(!pWeaponVisual->LL_GetBoneVisible (bone_id)) pWeaponVisual->LL_SetBoneVisible (bone_id,TRUE,TRUE); }else{ if( pWeaponVisual->LL_GetBoneVisible (bone_id)) pWeaponVisual->LL_SetBoneVisible (bone_id,FALSE,TRUE); } } if(m_eSilencerStatus==ALife::eAddonDisabled && bone_id!=BI_NONE && pWeaponVisual->LL_GetBoneVisible(bone_id) ) { pWeaponVisual->LL_SetBoneVisible (bone_id,FALSE,TRUE); // Log("silencer", pWeaponVisual->LL_GetBoneVisible (bone_id)); } bone_id = pWeaponVisual->LL_BoneID (wpn_grenade_launcher); if(GrenadeLauncherAttachable()) { if(IsGrenadeLauncherAttached()) { if(!pWeaponVisual->LL_GetBoneVisible (bone_id)) pWeaponVisual->LL_SetBoneVisible (bone_id,TRUE,TRUE); }else{ if(pWeaponVisual->LL_GetBoneVisible (bone_id)) pWeaponVisual->LL_SetBoneVisible (bone_id,FALSE,TRUE); } } if(m_eGrenadeLauncherStatus==ALife::eAddonDisabled && bone_id!=BI_NONE && pWeaponVisual->LL_GetBoneVisible(bone_id) ) { pWeaponVisual->LL_SetBoneVisible (bone_id,FALSE,TRUE); // Log("gl", pWeaponVisual->LL_GetBoneVisible (bone_id)); } pWeaponVisual->CalculateBones_Invalidate (); pWeaponVisual->CalculateBones (TRUE); }
void CWeaponMagazined::InitAddons() { ////////////////////////////////////////////////////////////////////////// // Прицел m_fIronSightZoomFactor = READ_IF_EXISTS(pSettings, r_float, cNameSect(), "ironsight_zoom_factor", 50.0f); if (IsScopeAttached()) { if (m_eScopeStatus == ALife::eAddonAttachable) { m_sScopeName = pSettings->r_string(cNameSect(), "scope_name"); m_iScopeX = pSettings->r_s32(cNameSect(), "scope_x"); m_iScopeY = pSettings->r_s32(cNameSect(), "scope_y"); shared_str scope_tex_name; scope_tex_name = pSettings->r_string(*m_sScopeName, "scope_texture"); m_fScopeZoomFactor = pSettings->r_float(*m_sScopeName, "scope_zoom_factor"); if (m_UIScope) xr_delete(m_UIScope); m_UIScope = xr_new<CUIStaticItem>(); // m_UIScope->Init(*scope_tex_name, "hud\\default", 0, 0, alNone); m_UIScope->Init(*scope_tex_name, "hud\\scopes", 0, 0, alNone); // KD: special shader that account screen resolution } else if (m_eScopeStatus == ALife::eAddonPermanent) { m_fScopeZoomFactor = pSettings->r_float(cNameSect(), "scope_zoom_factor"); shared_str scope_tex_name; scope_tex_name = pSettings->r_string(cNameSect(), "scope_texture"); if (m_UIScope) xr_delete(m_UIScope); m_UIScope = xr_new<CUIStaticItem>(); // m_UIScope->Init(*scope_tex_name, "hud\\default", 0, 0, alNone); m_UIScope->Init(*scope_tex_name, "hud\\scopes", 0, 0, alNone); // KD: special shader that account screen resolution } } else { if (m_UIScope) xr_delete(m_UIScope); if (IsZoomEnabled()) m_fIronSightZoomFactor = pSettings->r_float(cNameSect(), "scope_zoom_factor"); } if (IsSilencerAttached() && SilencerAttachable()) { m_sFlameParticlesCurrent = m_sSilencerFlameParticles; m_sSmokeParticlesCurrent = m_sSilencerSmokeParticles; m_pSndShotCurrent = &sndSilencerShot; //сила выстрела LoadFireParams(*cNameSect(), ""); //подсветка от выстрела LoadLights(*cNameSect(), "silencer_"); ApplySilencerKoeffs(); } else { m_sFlameParticlesCurrent = m_sFlameParticles; m_sSmokeParticlesCurrent = m_sSmokeParticles; m_pSndShotCurrent = &sndShot; //сила выстрела LoadFireParams(*cNameSect(), ""); //подсветка от выстрела LoadLights(*cNameSect(), ""); } inherited::InitAddons(); }