X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fparticles.h;h=1956580452cf6f8f91c67608a57061d566dc6337;hb=a3441638c67c9a9f626d7542a53fef6340d42751;hp=eb8c6665d0e127200e9dd1ddc5655f13e6494a23;hpb=5fd1ef9b589419e2464f5599ea47a2f28f4d7b7b;p=minetest.git diff --git a/src/particles.h b/src/particles.h index eb8c6665d..195658045 100644 --- a/src/particles.h +++ b/src/particles.h @@ -17,27 +17,25 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef PARTICLES_HEADER -#define PARTICLES_HEADER - -#define DIGGING_PARTICLES_AMOUNT 10 +#pragma once #include #include "irrlichttypes_extrabloated.h" #include "client/tile.h" #include "localplayer.h" -#include "environment.h" +#include "tileanimation.h" struct ClientEvent; class ParticleManager; class ClientEnvironment; +struct MapNode; +struct ContentFeatures; class Particle : public scene::ISceneNode { public: Particle( IGameDef* gamedef, - scene::ISceneManager* mgr, LocalPlayer *player, ClientEnvironment *env, v3f pos, @@ -50,9 +48,12 @@ class Particle : public scene::ISceneNode bool vertical, video::ITexture *texture, v2f texpos, - v2f texsize + v2f texsize, + const struct TileAnimationParams &anim, + u8 glow, + video::SColor color = video::SColor(0xFFFFFFFF) ); - ~Particle(); + ~Particle() = default; virtual const aabb3f &getBoundingBox() const { @@ -82,7 +83,7 @@ class Particle : public scene::ISceneNode void updateVertices(); video::S3DVertex m_vertices[4]; - float m_time; + float m_time = 0.0f; float m_expiration; ClientEnvironment *m_env; @@ -97,18 +98,24 @@ class Particle : public scene::ISceneNode v3f m_acceleration; LocalPlayer *m_player; float m_size; - u8 m_light; + //! Color without lighting + video::SColor m_base_color; + //! Final rendered color + video::SColor m_color; bool m_collisiondetection; bool m_collision_removal; bool m_vertical; v3s16 m_camera_offset; + struct TileAnimationParams m_animation; + float m_animation_time = 0.0f; + int m_animation_frame = 0; + u8 m_glow; }; class ParticleSpawner { public: ParticleSpawner(IGameDef* gamedef, - scene::ISceneManager *smgr, LocalPlayer *player, u16 amount, float time, @@ -123,9 +130,10 @@ class ParticleSpawner bool vertical, video::ITexture *texture, u32 id, + const struct TileAnimationParams &anim, u8 glow, ParticleManager* p_manager); - ~ParticleSpawner(); + ~ParticleSpawner() = default; void step(float dtime, ClientEnvironment *env); @@ -136,7 +144,6 @@ class ParticleSpawner ParticleManager* m_particlemanager; float m_time; IGameDef *m_gamedef; - scene::ISceneManager *m_smgr; LocalPlayer *m_player; u16 m_amount; float m_spawntime; @@ -156,6 +163,8 @@ class ParticleSpawner bool m_collision_removal; bool m_vertical; u16 m_attached_id; + struct TileAnimationParams m_animation; + u8 m_glow; }; /** @@ -170,17 +179,17 @@ friend class ParticleSpawner; void step (float dtime); - void handleParticleEvent(ClientEvent *event,IGameDef *gamedef, - scene::ISceneManager* smgr, LocalPlayer *player); + void handleParticleEvent(ClientEvent *event, Client *client, + LocalPlayer *player); - void addDiggingParticles(IGameDef* gamedef, scene::ISceneManager* smgr, - LocalPlayer *player, v3s16 pos, const TileSpec tiles[]); + void addDiggingParticles(IGameDef *gamedef, LocalPlayer *player, v3s16 pos, + const MapNode &n, const ContentFeatures &f); - void addPunchingParticles(IGameDef* gamedef, scene::ISceneManager* smgr, - LocalPlayer *player, v3s16 pos, const TileSpec tiles[]); + void addPunchingParticles(IGameDef *gamedef, LocalPlayer *player, v3s16 pos, + const MapNode &n, const ContentFeatures &f); - void addNodeParticle(IGameDef* gamedef, scene::ISceneManager* smgr, - LocalPlayer *player, v3s16 pos, const TileSpec tiles[]); + void addNodeParticle(IGameDef *gamedef, LocalPlayer *player, v3s16 pos, + const MapNode &n, const ContentFeatures &f); protected: void addParticle(Particle* toadd); @@ -196,8 +205,6 @@ friend class ParticleSpawner; std::map m_particle_spawners; ClientEnvironment* m_env; - Mutex m_particle_list_lock; - Mutex m_spawner_list_lock; + std::mutex m_particle_list_lock; + std::mutex m_spawner_list_lock; }; - -#endif