void CParticleSystem::SetBufferData() { if (m_pParticleSystem) g_PhysxManager->GetActiveScene()->removeActor(*m_pParticleSystem); if (!m_Emitter.m_useSkeleton) { m_pParticleSystem = g_PhysxManager->CreateParticleSystem(m_numParticles); } m_particles.initialize(m_numParticles); VEC3 offset = GetOffsetPosition(); PxVec3 pos = PxVec3(0, 0, 0); for (int i = 0; i < m_numParticles; i++) { m_particles.indexBuffer[i] = i; m_particles.maxLifeTimeBuffer[i] = *m_Emitter.GetLifeTime() + random(*m_Emitter.GetLifeTimeRandomMin(), *m_Emitter.GetLifeTimeRandomMax()); //max time pos = *m_Emitter.GetPosition() + PhysxConversion::Vec3ToPxVec3(offset); m_particles.positionBuffer[i] = pos; m_particles.velocityBuffer[i] = *m_Emitter.GetVelocity(); m_particles.negativeVelocityBuffer[i] = -*m_Emitter.GetVelocity(); m_particles.lifeTimeBuffer[i] = m_particles.maxLifeTimeBuffer[i]; dbg("Particle %d - max lifetime = %f\n", i, m_particles.lifeTimeBuffer[i]); m_particles.positionInitBuffer[i] = pos; m_particles.velocityInitBuffer[i] = m_initial_velocity; m_particles.colorBuffer[i] = PhysxConversion::PxVec4ToVec4(*m_Emitter.GetColor()); m_particles.colorOriginBuffer[i] = m_particles.colorBuffer[i]; } m_particles.speed_frame = frames_speed; m_particles.numParticles = m_numParticles; bool ret = true; //m_pParticleValidity = (PxU32*)PX_ALLOC(((m_pParticleSystem->getMaxParticles() + 31) >> 5) << 2, "validParticleBitmap"); if (!m_Emitter.m_useSkeleton) { m_pIndexPool = PxParticleExt::createIndexPool(m_numParticles); m_pParticleValidity = std::vector<PxU32>(((m_pParticleSystem->getMaxParticles() + 31) >> 5) << 2).data(); ret = CreateParticles(m_particles); }
Ogre::Vector2 UserInterfaceComponent::GetScreenPosition() const { return GetOffsetPosition() + GetPosition(); }