X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fparticles.h;h=dda84385c1bf49df9571b62823153b26506adf71;hb=65c09a96f41705bb8e75fc5ff4276342be91ed11;hp=327dcbc9e18dab5825694e2ecddab92401481cdf;hpb=8161ab573fd6f8a45b3986278ce7fc1596140526;p=minetest.git diff --git a/src/particles.h b/src/particles.h index 327dcbc9e..dda84385c 100644 --- a/src/particles.h +++ b/src/particles.h @@ -24,10 +24,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "irrlichttypes_extrabloated.h" -#include "tile.h" +#include "client/tile.h" #include "localplayer.h" #include "environment.h" +struct ClientEvent; +class ParticleManager; + class Particle : public scene::ISceneNode { public: @@ -35,20 +38,21 @@ class Particle : public scene::ISceneNode IGameDef* gamedef, scene::ISceneManager* mgr, LocalPlayer *player, - ClientEnvironment &env, + ClientEnvironment *env, v3f pos, v3f velocity, v3f acceleration, float expirationtime, float size, bool collisiondetection, + bool vertical, video::ITexture *texture, v2f texpos, v2f texsize ); ~Particle(); - virtual const core::aabbox3d& getBoundingBox() const + virtual const aabb3f &getBoundingBox() const { return m_box; } @@ -66,22 +70,23 @@ class Particle : public scene::ISceneNode virtual void OnRegisterSceneNode(); virtual void render(); - void step(float dtime, ClientEnvironment &env); + void step(float dtime); bool get_expired () { return m_expiration < m_time; } private: - void updateLight(ClientEnvironment &env); + void updateLight(); void updateVertices(); video::S3DVertex m_vertices[4]; float m_time; float m_expiration; + ClientEnvironment *m_env; IGameDef *m_gamedef; - core::aabbox3d m_box; - core::aabbox3d m_collisionbox; + aabb3f m_box; + aabb3f m_collisionbox; video::SMaterial m_material; v2f m_texpos; v2f m_texsize; @@ -92,6 +97,8 @@ class Particle : public scene::ISceneNode float m_size; u8 m_light; bool m_collisiondetection; + bool m_vertical; + v3s16 m_camera_offset; }; class ParticleSpawner @@ -108,17 +115,20 @@ class ParticleSpawner float minexptime, float maxexptime, float minsize, float maxsize, bool collisiondetection, + bool vertical, video::ITexture *texture, - u32 id); + u32 id, + ParticleManager* p_manager); ~ParticleSpawner(); - void step(float dtime, ClientEnvironment &env); + void step(float dtime, ClientEnvironment *env); bool get_expired () { return (m_amount <= 0) && m_spawntime != 0; } private: + ParticleManager* m_particlemanager; float m_time; IGameDef *m_gamedef; scene::ISceneManager *m_smgr; @@ -138,24 +148,50 @@ class ParticleSpawner video::ITexture *m_texture; std::vector m_spawntimes; bool m_collisiondetection; + bool m_vertical; + }; -void allparticles_step (float dtime, ClientEnvironment &env); -void allparticlespawners_step (float dtime, ClientEnvironment &env); +/** + * Class doing particle as well as their spawners handling + */ +class ParticleManager +{ +friend class ParticleSpawner; +public: + ParticleManager(ClientEnvironment* env); + ~ParticleManager(); + + void step (float dtime); + + void handleParticleEvent(ClientEvent *event,IGameDef *gamedef, + scene::ISceneManager* smgr, LocalPlayer *player); + + void addDiggingParticles(IGameDef* gamedef, scene::ISceneManager* smgr, + LocalPlayer *player, v3s16 pos, const TileSpec tiles[]); -void delete_particlespawner (u32 id); -void clear_particles (); + void addPunchingParticles(IGameDef* gamedef, scene::ISceneManager* smgr, + LocalPlayer *player, v3s16 pos, const TileSpec tiles[]); -void addDiggingParticles(IGameDef* gamedef, scene::ISceneManager* smgr, - LocalPlayer *player, ClientEnvironment &env, v3s16 pos, - const TileSpec tiles[]); + void addNodeParticle(IGameDef* gamedef, scene::ISceneManager* smgr, + LocalPlayer *player, v3s16 pos, const TileSpec tiles[]); -void addPunchingParticles(IGameDef* gamedef, scene::ISceneManager* smgr, - LocalPlayer *player, ClientEnvironment &env, v3s16 pos, - const TileSpec tiles[]); +protected: + void addParticle(Particle* toadd); -void addNodeParticle(IGameDef* gamedef, scene::ISceneManager* smgr, - LocalPlayer *player, ClientEnvironment &env, v3s16 pos, - const TileSpec tiles[]); +private: + + void stepParticles (float dtime); + void stepSpawners (float dtime); + + void clearAll (); + + std::vector m_particles; + std::map m_particle_spawners; + + ClientEnvironment* m_env; + Mutex m_particle_list_lock; + Mutex m_spawner_list_lock; +}; #endif