diff options
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/client.h | 3 | ||||
-rw-r--r-- | src/client/clientevent.h | 2 | ||||
-rw-r--r-- | src/client/particles.cpp | 37 | ||||
-rw-r--r-- | src/client/particles.h | 26 |
4 files changed, 26 insertions, 42 deletions
diff --git a/src/client/client.h b/src/client/client.h index 60735f665..312b8c87f 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -565,9 +565,6 @@ private: // And relations to objects std::unordered_map<int, u16> m_sounds_to_objects; - // CSM/client IDs to SSM/server IDs Mapping - // Map server particle spawner IDs to client IDs - std::unordered_map<u32, u32> m_particles_server_to_client; // Map server hud ids to client hud ids std::unordered_map<u32, u32> m_hud_server_to_client; diff --git a/src/client/clientevent.h b/src/client/clientevent.h index 4976eb174..2a44717ce 100644 --- a/src/client/clientevent.h +++ b/src/client/clientevent.h @@ -108,7 +108,7 @@ struct ClientEvent u16 attached_id; bool vertical; std::string *texture; - u32 id; + u64 id; struct TileAnimationParams animation; u8 glow; } add_particlespawner; diff --git a/src/client/particles.cpp b/src/client/particles.cpp index 25cfa081e..ebd52f0f0 100644 --- a/src/client/particles.cpp +++ b/src/client/particles.cpp @@ -261,7 +261,6 @@ ParticleSpawner::ParticleSpawner( u16 attached_id, bool vertical, video::ITexture *texture, - u32 id, const struct TileAnimationParams &anim, u8 glow, ParticleManager *p_manager @@ -423,17 +422,11 @@ void ParticleManager::step(float dtime) void ParticleManager::stepSpawners (float dtime) { MutexAutoLock lock(m_spawner_list_lock); - for (std::map<u32, ParticleSpawner*>::iterator i = - m_particle_spawners.begin(); - i != m_particle_spawners.end();) - { - if (i->second->get_expired()) - { + for (auto i = m_particle_spawners.begin(); i != m_particle_spawners.end();) { + if (i->second->get_expired()) { delete i->second; m_particle_spawners.erase(i++); - } - else - { + } else { i->second->step(dtime, m_env); ++i; } @@ -443,17 +436,12 @@ void ParticleManager::stepSpawners (float dtime) void ParticleManager::stepParticles (float dtime) { MutexAutoLock lock(m_particle_list_lock); - for(std::vector<Particle*>::iterator i = m_particles.begin(); - i != m_particles.end();) - { - if ((*i)->get_expired()) - { + for (auto i = m_particles.begin(); i != m_particles.end();) { + if ((*i)->get_expired()) { (*i)->remove(); delete *i; i = m_particles.erase(i); - } - else - { + } else { (*i)->step(dtime); ++i; } @@ -464,10 +452,7 @@ void ParticleManager::clearAll () { MutexAutoLock lock(m_spawner_list_lock); MutexAutoLock lock2(m_particle_list_lock); - for(std::map<u32, ParticleSpawner*>::iterator i = - m_particle_spawners.begin(); - i != m_particle_spawners.end();) - { + for (auto i = m_particle_spawners.begin(); i != m_particle_spawners.end();) { delete i->second; m_particle_spawners.erase(i++); } @@ -509,7 +494,7 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, Client *client, video::ITexture *texture = client->tsrc()->getTextureForMesh(*(event->add_particlespawner.texture)); - ParticleSpawner *toadd = new ParticleSpawner(client, player, + auto toadd = new ParticleSpawner(client, player, event->add_particlespawner.amount, event->add_particlespawner.spawntime, *event->add_particlespawner.minpos, @@ -528,7 +513,6 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, Client *client, event->add_particlespawner.attached_id, event->add_particlespawner.vertical, texture, - event->add_particlespawner.id, event->add_particlespawner.animation, event->add_particlespawner.glow, this); @@ -544,10 +528,7 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, Client *client, { MutexAutoLock lock(m_spawner_list_lock); - m_particle_spawners.insert( - std::pair<u32, ParticleSpawner*>( - event->add_particlespawner.id, - toadd)); + m_particle_spawners[event->add_particlespawner.id] = toadd; } break; } diff --git a/src/client/particles.h b/src/client/particles.h index 3392e7e95..353743372 100644 --- a/src/client/particles.h +++ b/src/client/particles.h @@ -132,7 +132,6 @@ public: u16 attached_id, bool vertical, video::ITexture *texture, - u32 id, const struct TileAnimationParams &anim, u8 glow, ParticleManager* p_manager); @@ -196,12 +195,16 @@ public: void addNodeParticle(IGameDef *gamedef, LocalPlayer *player, v3s16 pos, const MapNode &n, const ContentFeatures &f); - u32 getSpawnerId() const + /** + * This function is only used by client particle spawners + * + * We don't need to check the particle spawner list because client ID will n + * ever overlap (u64) + * @return new id + */ + u64 generateSpawnerId() { - for (u32 id = 0;; ++id) { // look for unused particlespawner id - if (m_particle_spawners.find(id) == m_particle_spawners.end()) - return id; - } + return m_next_particle_spawner_id++; } protected: @@ -209,13 +212,16 @@ protected: private: - void stepParticles (float dtime); - void stepSpawners (float dtime); + void stepParticles(float dtime); + void stepSpawners(float dtime); - void clearAll (); + void clearAll(); std::vector<Particle*> m_particles; - std::map<u32, ParticleSpawner*> m_particle_spawners; + std::unordered_map<u64, ParticleSpawner*> m_particle_spawners; + // Start the particle spawner ids generated from here after u32_max. lower values are + // for server sent spawners. + u64 m_next_particle_spawner_id = U32_MAX + 1; ClientEnvironment* m_env; std::mutex m_particle_list_lock; |