| 1315 | } |
| 1316 | |
| 1317 | void Object::renderParticles(RenderCallback* renderCallback) { |
| 1318 | if (!inWorld()) |
| 1319 | return; |
| 1320 | |
| 1321 | if (auto orientation = currentOrientation()) { |
| 1322 | if (m_emissionTimers.size() != orientation->particleEmitters.size()) |
| 1323 | resetEmissionTimers(); |
| 1324 | |
| 1325 | for (size_t i = 0; i < orientation->particleEmitters.size(); i++) { |
| 1326 | auto& particleEmitter = orientation->particleEmitters.at(i); |
| 1327 | |
| 1328 | if (particleEmitter.particleEmissionRate <= 0.0f) |
| 1329 | continue; |
| 1330 | |
| 1331 | auto& timer = m_emissionTimers.at(i); |
| 1332 | if (timer.ready()) { |
| 1333 | auto particle = particleEmitter.particle; |
| 1334 | particle.applyVariance(particleEmitter.particleVariance); |
| 1335 | if (particleEmitter.placeInSpaces) |
| 1336 | particle.translate(Vec2F(Random::randFrom(orientation->spaces)) + Vec2F(0.5, 0.5)); |
| 1337 | particle.translate(position()); |
| 1338 | renderCallback->addParticle(std::move(particle)); |
| 1339 | timer = GameTimer(1.0f / (particleEmitter.particleEmissionRate + Random::randf(-particleEmitter.particleEmissionRateVariance, particleEmitter.particleEmissionRateVariance))); |
| 1340 | } |
| 1341 | } |
| 1342 | } |
| 1343 | } |
| 1344 | |
| 1345 | void Object::renderSounds(RenderCallback* renderCallback) { |
| 1346 | if (m_soundEffectEnabled.get()) { |
nothing calls this directly
no test coverage detected