LCOV - code coverage report
Current view: top level - src - particles.h (source / functions) Hit Total Coverage
Test: report Lines: 4 10 40.0 %
Date: 2015-07-11 18:23:49 Functions: 2 5 40.0 %

          Line data    Source code
       1             : /*
       2             : Minetest
       3             : Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
       4             : 
       5             : This program is free software; you can redistribute it and/or modify
       6             : it under the terms of the GNU Lesser General Public License as published by
       7             : the Free Software Foundation; either version 2.1 of the License, or
       8             : (at your option) any later version.
       9             : 
      10             : This program is distributed in the hope that it will be useful,
      11             : but WITHOUT ANY WARRANTY; without even the implied warranty of
      12             : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13             : GNU Lesser General Public License for more details.
      14             : 
      15             : You should have received a copy of the GNU Lesser General Public License along
      16             : with this program; if not, write to the Free Software Foundation, Inc.,
      17             : 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      18             : */
      19             : 
      20             : #ifndef PARTICLES_HEADER
      21             : #define PARTICLES_HEADER
      22             : 
      23             : #define DIGGING_PARTICLES_AMOUNT 10
      24             : 
      25             : #include <iostream>
      26             : #include "irrlichttypes_extrabloated.h"
      27             : #include "client/tile.h"
      28             : #include "localplayer.h"
      29             : #include "environment.h"
      30             : 
      31             : struct ClientEvent;
      32             : class ParticleManager;
      33             : 
      34             : class Particle : public scene::ISceneNode
      35             : {
      36             :         public:
      37             :         Particle(
      38             :                 IGameDef* gamedef,
      39             :                 scene::ISceneManager* mgr,
      40             :                 LocalPlayer *player,
      41             :                 ClientEnvironment *env,
      42             :                 v3f pos,
      43             :                 v3f velocity,
      44             :                 v3f acceleration,
      45             :                 float expirationtime,
      46             :                 float size,
      47             :                 bool collisiondetection,
      48             :                 bool vertical,
      49             :                 video::ITexture *texture,
      50             :                 v2f texpos,
      51             :                 v2f texsize
      52             :         );
      53             :         ~Particle();
      54             : 
      55           0 :         virtual const core::aabbox3d<f32>& getBoundingBox() const
      56             :         {
      57           0 :                 return m_box;
      58             :         }
      59             : 
      60           0 :         virtual u32 getMaterialCount() const
      61             :         {
      62           0 :                 return 1;
      63             :         }
      64             : 
      65           0 :         virtual video::SMaterial& getMaterial(u32 i)
      66             :         {
      67           0 :                 return m_material;
      68             :         }
      69             : 
      70             :         virtual void OnRegisterSceneNode();
      71             :         virtual void render();
      72             : 
      73             :         void step(float dtime);
      74             : 
      75       30002 :         bool get_expired ()
      76       30002 :         { return m_expiration < m_time; }
      77             : 
      78             : private:
      79             :         void updateLight();
      80             :         void updateVertices();
      81             : 
      82             :         video::S3DVertex m_vertices[4];
      83             :         float m_time;
      84             :         float m_expiration;
      85             : 
      86             :         ClientEnvironment *m_env;
      87             :         IGameDef *m_gamedef;
      88             :         core::aabbox3d<f32> m_box;
      89             :         core::aabbox3d<f32> m_collisionbox;
      90             :         video::SMaterial m_material;
      91             :         v2f m_texpos;
      92             :         v2f m_texsize;
      93             :         v3f m_pos;
      94             :         v3f m_velocity;
      95             :         v3f m_acceleration;
      96             :         LocalPlayer *m_player;
      97             :         float m_size;
      98             :         u8 m_light;
      99             :         bool m_collisiondetection;
     100             :         bool m_vertical;
     101             :         v3s16 m_camera_offset;
     102             : };
     103             : 
     104             : class ParticleSpawner
     105             : {
     106             :         public:
     107             :         ParticleSpawner(IGameDef* gamedef,
     108             :                 scene::ISceneManager *smgr,
     109             :                 LocalPlayer *player,
     110             :                 u16 amount,
     111             :                 float time,
     112             :                 v3f minp, v3f maxp,
     113             :                 v3f minvel, v3f maxvel,
     114             :                 v3f minacc, v3f maxacc,
     115             :                 float minexptime, float maxexptime,
     116             :                 float minsize, float maxsize,
     117             :                 bool collisiondetection,
     118             :                 bool vertical,
     119             :                 video::ITexture *texture,
     120             :                 u32 id,
     121             :                 ParticleManager* p_manager);
     122             : 
     123             :         ~ParticleSpawner();
     124             : 
     125             :         void step(float dtime, ClientEnvironment *env);
     126             : 
     127        7976 :         bool get_expired ()
     128        7976 :         { return (m_amount <= 0) && m_spawntime != 0; }
     129             : 
     130             :         private:
     131             :         ParticleManager* m_particlemanager;
     132             :         float m_time;
     133             :         IGameDef *m_gamedef;
     134             :         scene::ISceneManager *m_smgr;
     135             :         LocalPlayer *m_player;
     136             :         u16 m_amount;
     137             :         float m_spawntime;
     138             :         v3f m_minpos;
     139             :         v3f m_maxpos;
     140             :         v3f m_minvel;
     141             :         v3f m_maxvel;
     142             :         v3f m_minacc;
     143             :         v3f m_maxacc;
     144             :         float m_minexptime;
     145             :         float m_maxexptime;
     146             :         float m_minsize;
     147             :         float m_maxsize;
     148             :         video::ITexture *m_texture;
     149             :         std::vector<float> m_spawntimes;
     150             :         bool m_collisiondetection;
     151             :         bool m_vertical;
     152             : 
     153             : };
     154             : 
     155             : /**
     156             :  * Class doing particle as well as their spawners handling
     157             :  */
     158             : class ParticleManager
     159             : {
     160             : friend class ParticleSpawner;
     161             : public:
     162             :         ParticleManager(ClientEnvironment* env);
     163             :         ~ParticleManager();
     164             : 
     165             :         void step (float dtime);
     166             : 
     167             :         void handleParticleEvent(ClientEvent *event,IGameDef *gamedef,
     168             :                         scene::ISceneManager* smgr, LocalPlayer *player);
     169             : 
     170             :         void addDiggingParticles(IGameDef* gamedef, scene::ISceneManager* smgr,
     171             :                 LocalPlayer *player, v3s16 pos, const TileSpec tiles[]);
     172             : 
     173             :         void addPunchingParticles(IGameDef* gamedef, scene::ISceneManager* smgr,
     174             :                 LocalPlayer *player, v3s16 pos, const TileSpec tiles[]);
     175             : 
     176             :         void addNodeParticle(IGameDef* gamedef, scene::ISceneManager* smgr,
     177             :                 LocalPlayer *player, v3s16 pos, const TileSpec tiles[]);
     178             : 
     179             : protected:
     180             :         void addParticle(Particle* toadd);
     181             : 
     182             : private:
     183             : 
     184             :         void stepParticles (float dtime);
     185             :         void stepSpawners (float dtime);
     186             : 
     187             :         void clearAll ();
     188             : 
     189             :         std::vector<Particle*> m_particles;
     190             :         std::map<u32, ParticleSpawner*> m_particle_spawners;
     191             : 
     192             :         ClientEnvironment* m_env;
     193             :         JMutex m_particle_list_lock;
     194             :         JMutex m_spawner_list_lock;
     195             : };
     196             : 
     197             : #endif

Generated by: LCOV version 1.11