/
ParticleNode.h
51 lines (38 loc) · 1.36 KB
/
ParticleNode.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#pragma once
#include "scene/Node.h"
#include "iparticlenode.h"
#include "iparticles.h"
#include "itransformnode.h"
#include "RenderableParticle.h"
namespace particles
{
/**
* Like the model nodes this ParticleNode encapsulates a renderable particle
* such that it can be inserted into the scenegraph as child node of an entity.
*/
class ParticleNode :
public IParticleNode,
public scene::Node,
public ITransformNode // to compensate parent rotations
{
// The actual particle system that will be rendered
RenderableParticlePtr _renderableParticle;
mutable Matrix4 _local2Parent;
public:
// Construct the node giving a renderable particle
ParticleNode(const RenderableParticlePtr& particle);
std::string name() const override;
Type getNodeType() const override;
IRenderableParticlePtr getParticle() const override;
const AABB& localAABB() const override;
std::size_t getHighlightFlags() override;
void renderSolid(RenderableCollector& collector, const VolumeTest& volume) const override;
void renderWireframe(RenderableCollector& collector, const VolumeTest& volume) const override;
void setRenderSystem(const RenderSystemPtr& renderSystem) override;
// ITransformNode
const Matrix4& localToParent() const override;
private:
void update(const VolumeTest& viewVolume) const;
};
typedef std::shared_ptr<ParticleNode> ParticleNodePtr;
} // namespace