void CShootingObject::OnShellDrop (const Fvector& play_pos, const Fvector& parent_vel) { if(!m_sShellParticles) return; if( Device.vCameraPosition.distance_to_sqr(play_pos)>2*2 ) return; CParticlesObject* pShellParticles = CParticlesObject::Create(*m_sShellParticles,TRUE); Fmatrix particles_pos; particles_pos.set (get_ParticlesXFORM()); particles_pos.c.set (play_pos); pShellParticles->UpdateParent (particles_pos, parent_vel); pShellParticles->Play (); }
void CShootingObject::UpdateParticles (CParticlesObject*& pParticles, const Fvector& pos, const Fvector& vel) { if(!pParticles) return; Fmatrix particles_pos; particles_pos.set (get_ParticlesXFORM()); particles_pos.c.set (pos); pParticles->SetXFORM(particles_pos); if(!pParticles->IsAutoRemove() && !pParticles->IsLooped() && !pParticles->PSI_alive()) { pParticles->Stop (); CParticlesObject::Destroy(pParticles); } }
void CShootingObject::UpdateFlameParticles () { if(0==m_sFlameParticlesCurrent.size()) return; if(!m_pFlameParticles) return; Fmatrix pos; pos.set (get_ParticlesXFORM() ); pos.c.set (get_CurrentFirePoint() ); m_pFlameParticles->SetXFORM (pos); if(!m_pFlameParticles->IsLooped() && !m_pFlameParticles->IsPlaying() && !m_pFlameParticles->PSI_alive()) { m_pFlameParticles->Stop(); CParticlesObject::Destroy(m_pFlameParticles); } }
void CShootingObject::OnShellDrop (const Fvector& play_pos, const Fvector& parent_vel) { if(!m_sShellParticles) return; if( Device.vCameraPosition.distance_to_sqr(play_pos)>2*2 ) return; CParticlesObject* pShellParticles = CParticlesObject::Create(*m_sShellParticles,TRUE); Fmatrix particles_pos; particles_pos.set (get_ParticlesXFORM()); particles_pos.c.set (play_pos); pShellParticles->UpdateParent (particles_pos, parent_vel); CSpectator* tmp_spectr = smart_cast<CSpectator*>(Level().CurrentControlEntity()); bool in_hud_mode = IsHudModeNow(); if (in_hud_mode && tmp_spectr && (tmp_spectr->GetActiveCam() != CSpectator::eacFirstEye)) { in_hud_mode = false; } pShellParticles->Play(in_hud_mode); }