X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fparticles.h;h=6f518b7710056ae6bfe1d7f21d413a4636a29809;hb=9d6e7e48d6fb1daff8fedcb2f111164bef61f1e7;hp=7c89a79bfd80afbacc594e9021292c68a3f4f8cd;hpb=2b1eff772524fca8249fd64028e5cbfeabc127a0;p=minetest.git diff --git a/src/particles.h b/src/particles.h index 7c89a79bf..6f518b771 100644 --- a/src/particles.h +++ b/src/particles.h @@ -17,149 +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, - 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 - { - 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: - void updateLight(ClientEnvironment &env); - void updateVertices(); - - video::S3DVertex m_vertices[4]; - float m_time; - float m_expiration; - - IGameDef *m_gamedef; - core::aabbox3d m_box; - core::aabbox3d m_collisionbox; - video::SMaterial m_material; - v2f m_texpos; - v2f m_texsize; - v3f m_pos; - v3f m_velocity; - v3f m_acceleration; - LocalPlayer *m_player; - float m_size; - u8 m_light; - bool m_collisiondetection; - bool m_vertical; }; -class ParticleSpawner -{ - public: - ParticleSpawner(IGameDef* gamedef, - scene::ISceneManager *smgr, - LocalPlayer *player, - u16 amount, - float time, - v3f minp, v3f maxp, - v3f minvel, v3f maxvel, - v3f minacc, v3f maxacc, - float minexptime, float maxexptime, - float minsize, float maxsize, - bool collisiondetection, - bool vertical, - video::ITexture *texture, - u32 id); - - ~ParticleSpawner(); - - void step(float dtime, ClientEnvironment &env); - - bool get_expired () - { return (m_amount <= 0) && m_spawntime != 0; } +struct ParticleParameters : CommonParticleParams { + v3f pos; + v3f vel; + v3f acc; + f32 expirationtime = 1; + f32 size = 1; - private: - float m_time; - IGameDef *m_gamedef; - scene::ISceneManager *m_smgr; - LocalPlayer *m_player; - u16 m_amount; - float m_spawntime; - v3f m_minpos; - v3f m_maxpos; - v3f m_minvel; - v3f m_maxvel; - v3f m_minacc; - v3f m_maxacc; - float m_minexptime; - float m_maxexptime; - float m_minsize; - float m_maxsize; - video::ITexture *m_texture; - std::vector m_spawntimes; - bool m_collisiondetection; - bool m_vertical; + 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 allparticlespawners_step (float dtime, ClientEnvironment &env); +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; -void delete_particlespawner (u32 id); -void clear_particles (); - -void addDiggingParticles(IGameDef* gamedef, scene::ISceneManager* smgr, - LocalPlayer *player, ClientEnvironment &env, v3s16 pos, - const TileSpec tiles[]); - -void addPunchingParticles(IGameDef* gamedef, scene::ISceneManager* smgr, - LocalPlayer *player, ClientEnvironment &env, v3s16 pos, - const TileSpec tiles[]); - -void addNodeParticle(IGameDef* gamedef, scene::ISceneManager* smgr, - LocalPlayer *player, ClientEnvironment &env, v3s16 pos, - const TileSpec tiles[]); - -#endif + // For historical reasons no (de-)serialization methods here +};