X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fparticles.h;h=6f518b7710056ae6bfe1d7f21d413a4636a29809;hb=b2ab5fd1615ac5f907e43992d0905a56cddf798f;hp=b317549e731044189a7fc3f2a2b557c55253cec2;hpb=979ca23f1eae1adeb8b0083dffe7203c54d87395;p=minetest.git diff --git a/src/particles.h b/src/particles.h index b317549e7..6f518b771 100644 --- a/src/particles.h +++ b/src/particles.h @@ -17,82 +17,63 @@ 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 - -#include -#include "irrlichttypes_extrabloated.h" -#include "tile.h" -#include "localplayer.h" -#include "environment.h" - -class Particle : public scene::ISceneNode -{ - public: - Particle( - IGameDef* gamedef, - scene::ISceneManager* mgr, - LocalPlayer *player, - s32 id, - v3f pos, - v3f velocity, - v3f acceleration, - float expirationtime, - float size, - AtlasPointer texture - ); - ~Particle(); - - virtual const core::aabbox3d& getBoundingBox() const - { - return m_box; - } - - virtual u32 getMaterialCount() const - { - return 1; +#pragma once + +#include +#include "irrlichttypes_bloated.h" +#include "tileanimation.h" +#include "mapnode.h" + +// This file defines the particle-related structures that both the server and +// client need. The ParticleManager and rendering is in client/particles.h + +struct CommonParticleParams { + bool collisiondetection = false; + bool collision_removal = false; + bool object_collision = false; + bool vertical = false; + std::string texture; + struct TileAnimationParams animation; + u8 glow = 0; + MapNode node; + u8 node_tile = 0; + + CommonParticleParams() { + animation.type = TAT_NONE; + node.setContent(CONTENT_IGNORE); } - virtual video::SMaterial& getMaterial(u32 i) - { - return m_material; + /* This helper is useful for copying params from + * ParticleSpawnerParameters to ParticleParameters */ + inline void copyCommon(CommonParticleParams &to) const { + to.collisiondetection = collisiondetection; + to.collision_removal = collision_removal; + to.object_collision = object_collision; + to.vertical = vertical; + to.texture = texture; + to.animation = animation; + to.glow = glow; + to.node = node; + to.node_tile = node_tile; } +}; - virtual void OnRegisterSceneNode(); - virtual void render(); - - void step(float dtime, ClientEnvironment &env); - - bool get_expired () - { return m_expiration < m_time; } - -private: - float m_time; - float m_expiration; +struct ParticleParameters : CommonParticleParams { + v3f pos; + v3f vel; + v3f acc; + f32 expirationtime = 1; + f32 size = 1; - IGameDef *m_gamedef; - core::aabbox3d m_box; - core::aabbox3d m_collisionbox; - video::SMaterial m_material; - v3f m_pos; - v3f m_velocity; - v3f m_acceleration; - float tex_x0; - float tex_x1; - float tex_y0; - float tex_y1; - LocalPlayer *m_player; - float m_size; - AtlasPointer m_ap; - u8 m_light; + void serialize(std::ostream &os, u16 protocol_ver) const; + void deSerialize(std::istream &is, u16 protocol_ver); }; -void allparticles_step (float dtime, ClientEnvironment &env); - -void addDiggingParticles(IGameDef* gamedef, scene::ISceneManager* smgr, LocalPlayer *player, v3s16 pos, const TileSpec tiles[]); -void addPunchingParticles(IGameDef* gamedef, scene::ISceneManager* smgr, LocalPlayer *player, v3s16 pos, const TileSpec tiles[]); -void addNodeParticle(IGameDef* gamedef, scene::ISceneManager* smgr, LocalPlayer *player, v3s16 pos, const TileSpec tiles[]); +struct ParticleSpawnerParameters : CommonParticleParams { + u16 amount = 1; + v3f minpos, maxpos, minvel, maxvel, minacc, maxacc; + f32 time = 1; + f32 minexptime = 1, maxexptime = 1, minsize = 1, maxsize = 1; -#endif + // For historical reasons no (de-)serialization methods here +};