pioneer/src/scenegraph/Thruster.h

51 lines
1.6 KiB
C++

// Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
#ifndef _SCENEGRAPH_THRUSTER_H
#define _SCENEGRAPH_THRUSTER_H
/*
* Spaceship thruster
*/
#include "Node.h"
#include "libs.h"
namespace Graphics {
class Renderer;
class VertexBuffer;
class Material;
class RenderState;
} // namespace Graphics
namespace SceneGraph {
class Thruster : public Node {
public:
Thruster(Graphics::Renderer *, bool linear, const vector3f &pos, const vector3f &dir);
Thruster(const Thruster &, NodeCopyCache *cache = 0);
Node *Clone(NodeCopyCache *cache = 0) override;
virtual void Accept(NodeVisitor &v) override;
virtual const char *GetTypeName() const override { return "Thruster"; }
virtual void Render(const matrix4x4f &trans, const RenderData *rd) override;
virtual void Save(NodeDatabase &) override;
static Thruster *Load(NodeDatabase &);
void SetColor(const Color c) { currentColor = c; }
const vector3f &GetDirection() { return dir; }
private:
static Graphics::VertexBuffer *CreateThrusterGeometry(Graphics::Renderer *, Graphics::Material *);
static Graphics::VertexBuffer *CreateGlowGeometry(Graphics::Renderer *, Graphics::Material *);
RefCountedPtr<Graphics::Material> m_tMat;
RefCountedPtr<Graphics::Material> m_glowMat;
RefCountedPtr<Graphics::VertexBuffer> m_tBuffer;
RefCountedPtr<Graphics::VertexBuffer> m_glowBuffer;
Graphics::RenderState *m_renderState;
bool linearOnly;
vector3f dir;
vector3f pos;
Color currentColor;
};
} // namespace SceneGraph
#endif