void CCustomDetector::UpdateNightVisionMode() { // CObject* tmp = Level().CurrentViewEntity(); bool bNightVision = false; if (GameID() == GAME_SINGLE) { bNightVision = Actor()->Cameras().GetPPEffector(EEffectorPPType(effNightvision))!=NULL; } else { if (Level().CurrentViewEntity() && Level().CurrentViewEntity()->CLS_ID == CLSID_OBJECT_ACTOR) { CActor* pActor = smart_cast<CActor*>(Level().CurrentViewEntity()); if (pActor) bNightVision = pActor->Cameras().GetPPEffector(EEffectorPPType(effNightvision))!=NULL; } } bool bOn = bNightVision && m_pCurrentActor && m_pCurrentActor==Level().CurrentViewEntity()&& IsWorking() && m_nightvision_particle.size(); ZONE_INFO_MAP_IT it; for(it = m_ZoneInfoMap.begin(); m_ZoneInfoMap.end() != it; ++it) { CCustomZone *pZone = it->first; ZONE_INFO& zone_info = it->second; if(bOn){ Fvector zero_vector; zero_vector.set(0.f,0.f,0.f); if(!zone_info.pParticle) zone_info.pParticle = CParticlesObject::Create(*m_nightvision_particle,FALSE); zone_info.pParticle->UpdateParent(pZone->XFORM(),zero_vector); if(!zone_info.pParticle->IsPlaying()) zone_info.pParticle->Play(); }else{ if(zone_info.pParticle){ zone_info.pParticle->Stop (); CParticlesObject::Destroy(zone_info.pParticle); } } } }
void CZoneEffector::Stop() { if (!m_pp_effector) return; m_pActor->Cameras().RemovePPEffector(EEffectorPPType( u32(u64(this) & u32(-1)) )); m_pp_effector = NULL; m_pActor = NULL; };
void CZoneEffector::Activate() { m_pActor = smart_cast<CActor*>(Level().CurrentEntity()); if(!m_pActor) return; m_pp_effector = xr_new<CPostprocessAnimatorLerp>(); m_pp_effector->SetType (EEffectorPPType( u32(u64(this) & u32(-1)) )); m_pp_effector->SetCyclic (true); m_pp_effector->SetFactorFunc (GET_KOEFF_FUNC(this, &CZoneEffector::GetFactor)); m_pp_effector->Load (*m_pp_fname); m_pActor->Cameras().AddPPEffector (m_pp_effector); }
////////////////////////////////////////////////////////////////////////// // CMonsterEffector ////////////////////////////////////////////////////////////////////////// CMonsterEffector::CMonsterEffector(const SPPInfo &ppi, float life_time, float attack_time, float release_time, float spec_factor) : CEffectorPP(EEffectorPPType(eCEHit), life_time) { state = ppi; m_total = life_time; m_attack = ((fis_zero(attack_time)) ? 0.5f : attack_time); m_release = ((fis_zero(release_time)) ? 0.5f : release_time); m_spec_factor = spec_factor; VERIFY(!fsimilar(m_release, 1.0f)); VERIFY(!fis_zero(m_attack)); }
////////////////////////////////////////////////////////////////////////// // CMonsterEffector ////////////////////////////////////////////////////////////////////////// CSleepEffectorPP::CSleepEffectorPP(const SPPInfo &ppi, float life_time, float attack_time, float release_time) : CEffectorPP(EEffectorPPType(SLEEP_EFFECTOR_TYPE_ID), life_time) { state = ppi; m_total = life_time; m_attack = ((fis_zero(attack_time)) ? 0.5f : attack_time); m_release = ((fis_zero(release_time)) ? 0.5f : release_time); VERIFY(!fsimilar(m_release, 1.0f)); VERIFY(!fis_zero(m_attack)); m_eSleepState = BEGIN_SLEEP; }