X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fparticles.h;h=101fc49ce145cb8cb5a0bd72f8e8315318ec6543;hb=a020d1b653f94fbcaac06c15f9dbab4521fda355;hp=3ed9dfdc8bdad44817aa21ecd7d722ff7a196ca6;hpb=61f5ca6b164b035de41bd32bb9409c7e04ea0d41;p=oweals%2Fminetest.git diff --git a/src/particles.h b/src/particles.h index 3ed9dfdc8..101fc49ce 100644 --- a/src/particles.h +++ b/src/particles.h @@ -1,6 +1,6 @@ /* -Minetest-c55 -Copyright (C) 2012 celeron55, Perttu Ahola +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -35,13 +35,17 @@ class Particle : public scene::ISceneNode IGameDef* gamedef, scene::ISceneManager* mgr, LocalPlayer *player, - s32 id, + ClientEnvironment &env, v3f pos, v3f velocity, v3f acceleration, float expirationtime, float size, - AtlasPointer texture + bool collisiondetection, + bool vertical, + video::ITexture *texture, + v2f texpos, + v2f texsize ); ~Particle(); @@ -63,36 +67,101 @@ 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(); + 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; video::SMaterial m_material; + v2f m_texpos; + v2f m_texsize; 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; + bool m_collisiondetection; + bool m_vertical; + v3s16 m_camera_offset; +}; + +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; } + + 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 allparticles_step (float dtime, ClientEnvironment &env); +void allparticles_step (float dtime); +void allparticlespawners_step (float dtime, ClientEnvironment &env); + +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 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[]); +void addNodeParticle(IGameDef* gamedef, scene::ISceneManager* smgr, + LocalPlayer *player, ClientEnvironment &env, v3s16 pos, + const TileSpec tiles[]); #endif