60 lines
1.6 KiB
C++
60 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 _HYPERSPACECLOUD_H
|
|
#define _HYPERSPACECLOUD_H
|
|
|
|
#include "Body.h"
|
|
|
|
class Frame;
|
|
class Ship;
|
|
|
|
namespace Graphics {
|
|
class Material;
|
|
class Renderer;
|
|
class VertexArray;
|
|
class RenderState;
|
|
} // namespace Graphics
|
|
|
|
class HyperspaceCloud : public Body {
|
|
public:
|
|
OBJDEF(HyperspaceCloud, Body, HYPERSPACECLOUD);
|
|
HyperspaceCloud() = delete;
|
|
HyperspaceCloud(Ship *, double dateDue, bool isArrival);
|
|
HyperspaceCloud(const Json &jsonObj, Space *space);
|
|
virtual ~HyperspaceCloud();
|
|
virtual void SetVelocity(const vector3d &v) override { m_vel = v; }
|
|
virtual vector3d GetVelocity() const override { return m_vel; }
|
|
virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override;
|
|
virtual void PostLoadFixup(Space *space) override;
|
|
virtual void TimeStepUpdate(const float timeStep) override;
|
|
Ship *GetShip() { return m_ship; }
|
|
Ship *EvictShip();
|
|
double GetDueDate() const { return m_due; }
|
|
void SetIsArrival(bool isArrival);
|
|
bool IsArrival() const { return m_isArrival; }
|
|
virtual void UpdateInterpTransform(double alpha) override;
|
|
|
|
protected:
|
|
virtual void SaveToJson(Json &jsonObj, Space *space) override;
|
|
|
|
private:
|
|
void InitGraphics();
|
|
|
|
Ship *m_ship;
|
|
vector3d m_vel;
|
|
double m_birthdate;
|
|
double m_due;
|
|
bool m_isArrival;
|
|
bool m_isBeingKilled;
|
|
|
|
struct Graphic {
|
|
std::unique_ptr<Graphics::VertexArray> vertices;
|
|
std::unique_ptr<Graphics::Material> material;
|
|
Graphics::RenderState *renderState;
|
|
};
|
|
Graphic m_graphic;
|
|
};
|
|
|
|
#endif /* _HYPERSPACECLOUD_H */
|