X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fparticles.h;h=1956580452cf6f8f91c67608a57061d566dc6337;hb=a3441638c67c9a9f626d7542a53fef6340d42751;hp=6d8c6139f2debc8ffb8707421039551a5061dc80;hpb=93e3555eae2deaeca69ee252cfa9cc9c3e0e49ef;p=minetest.git diff --git a/src/particles.h b/src/particles.h index 6d8c6139f..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, @@ -51,15 +49,11 @@ class Particle : public scene::ISceneNode video::ITexture *texture, v2f texpos, v2f texsize, - u32 material_type_param, - u16 vertical_frame_num, - u16 horizontal_frame_num, - u16 first_frame, - float frame_length, - bool loop_animation, - u8 glow + const struct TileAnimationParams &anim, + u8 glow, + video::SColor color = video::SColor(0xFFFFFFFF) ); - ~Particle(); + ~Particle() = default; virtual const aabb3f &getBoundingBox() const { @@ -89,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; @@ -104,16 +98,17 @@ 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; - u16 m_vertical_frame_num; - u16 m_horizontal_frame_num; - u16 m_first_frame; - float m_frame_length; - bool m_loop_animation; + struct TileAnimationParams m_animation; + float m_animation_time = 0.0f; + int m_animation_frame = 0; u8 m_glow; }; @@ -121,7 +116,6 @@ class ParticleSpawner { public: ParticleSpawner(IGameDef* gamedef, - scene::ISceneManager *smgr, LocalPlayer *player, u16 amount, float time, @@ -136,16 +130,10 @@ class ParticleSpawner bool vertical, video::ITexture *texture, u32 id, - u32 material_type_param, - u16 vertical_frame_num, - u16 horizontal_frame_num, - u16 min_first_frame, - u16 max_first_frame, - float frame_length, - bool loop_animation, - u8 glow, + const struct TileAnimationParams &anim, u8 glow, ParticleManager* p_manager); - ~ParticleSpawner(); + + ~ParticleSpawner() = default; void step(float dtime, ClientEnvironment *env); @@ -156,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; @@ -176,13 +163,7 @@ class ParticleSpawner bool m_collision_removal; bool m_vertical; u16 m_attached_id; - u32 m_material_type_param; - u16 m_vertical_frame_num; - u16 m_horizontal_frame_num; - u16 m_min_first_frame; - u16 m_max_first_frame; - float m_frame_length; - bool m_loop_animation; + struct TileAnimationParams m_animation; u8 m_glow; }; @@ -198,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); @@ -224,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