mirror of
https://github.com/rwengine/openrw.git
synced 2024-09-18 16:32:32 +02:00
Use lambda for removing VisualFX
This commit is contained in:
parent
5951b978d7
commit
3821244c95
@ -48,6 +48,18 @@
|
|||||||
constexpr float kMaxTrafficSpawnRadius = 100.f;
|
constexpr float kMaxTrafficSpawnRadius = 100.f;
|
||||||
constexpr float kMaxTrafficCleanupRadius = kMaxTrafficSpawnRadius * 1.25f;
|
constexpr float kMaxTrafficCleanupRadius = kMaxTrafficSpawnRadius * 1.25f;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
template <typename T>
|
||||||
|
bool shouldEffectBeRemoved(const T& effect, float gameTime) {
|
||||||
|
if (effect->getType() != Particle) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
auto particle = static_cast<ParticleFX*>(effect.get());
|
||||||
|
return particle->lifetime >= 0.f &&
|
||||||
|
gameTime >= particle->starttime + particle->lifetime;
|
||||||
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
class WorldCollisionDispatcher : public btCollisionDispatcher {
|
class WorldCollisionDispatcher : public btCollisionDispatcher {
|
||||||
public:
|
public:
|
||||||
WorldCollisionDispatcher(btCollisionConfiguration* collisionConfiguration)
|
WorldCollisionDispatcher(btCollisionConfiguration* collisionConfiguration)
|
||||||
@ -526,13 +538,10 @@ TrailFX& GameWorld::createTrailEffect() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GameWorld::destroyEffect(VisualFX& effect) {
|
void GameWorld::destroyEffect(VisualFX& effect) {
|
||||||
for (auto it = effects.begin(); it != effects.end();) {
|
effects.erase(
|
||||||
if (it->get() == &effect) {
|
std::remove_if(effects.begin(), effects.end(),
|
||||||
it = effects.erase(it);
|
[&effect](auto& ef) { return ef.get() == &effect; }),
|
||||||
} else {
|
effects.end());
|
||||||
it++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameWorld::doWeaponScan(const WeaponScan& scan) {
|
void GameWorld::doWeaponScan(const WeaponScan& scan) {
|
||||||
@ -863,17 +872,12 @@ bool GameWorld::isPaused() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GameWorld::updateEffects() {
|
void GameWorld::updateEffects() {
|
||||||
for (int i = 0; i < static_cast<int>(effects.size()); ++i) {
|
effects.erase(std::remove_if(effects.begin(), effects.end(),
|
||||||
auto& effect = effects[i];
|
[gameTime = getGameTime()](auto& effect) {
|
||||||
if (effect->getType() == Particle) {
|
return shouldEffectBeRemoved(effect,
|
||||||
auto particle = static_cast<ParticleFX*>(effect.get());
|
gameTime);
|
||||||
if (particle->lifetime < 0.f) continue;
|
}),
|
||||||
if (getGameTime() >= particle->starttime + particle->lifetime) {
|
effects.end());
|
||||||
destroyEffect(*particle);
|
|
||||||
--i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VehicleObject* GameWorld::tryToSpawnVehicle(VehicleGenerator& gen) {
|
VehicleObject* GameWorld::tryToSpawnVehicle(VehicleGenerator& gen) {
|
||||||
|
Loading…
Reference in New Issue
Block a user