| 1437 | } |
| 1438 | |
| 1439 | void ApplyAcceleration(dmArray<Particle>& particles, Property* modifier_properties, const Quat& rotation, float scale, float emitter_t, float dt) |
| 1440 | { |
| 1441 | uint32_t particle_count = particles.Size(); |
| 1442 | Vector3 acc_step = rotate(rotation, ACCELERATION_LOCAL_DIR) * dt * scale; |
| 1443 | const Property& magnitude_property = modifier_properties[MODIFIER_KEY_MAGNITUDE]; |
| 1444 | uint32_t segment_index = dmMath::Min((uint32_t)(emitter_t * PROPERTY_SAMPLE_COUNT), PROPERTY_SAMPLE_COUNT - 1); |
| 1445 | float magnitude; |
| 1446 | SAMPLE_PROP(magnitude_property.m_Segments[segment_index], emitter_t, magnitude) |
| 1447 | float mag_spread = magnitude_property.m_Spread; |
| 1448 | for (uint32_t i = 0; i < particle_count; ++i) |
| 1449 | { |
| 1450 | Particle* particle = &particles[i]; |
| 1451 | particle->SetVelocity(particle->GetVelocity() + acc_step * (magnitude + mag_spread * particle->GetSpreadFactor())); |
| 1452 | } |
| 1453 | } |
| 1454 | |
| 1455 | void ApplyDrag(dmArray<Particle>& particles, Property* modifier_properties, dmParticleDDF::Modifier* modifier_ddf, const Quat& rotation, float emitter_t, float dt) |
| 1456 | { |