Files
HydraV3/HydraEngine/source/actor/PlanetActor/HydraPlanetQuadActor.h
T
2026-09-24 20:15:39 +01:00

53 lines
1.7 KiB
C++

#ifndef HYDRAPLANETQUADACTOR
#define HYDRAPLANETQUADACTOR
#include "../HydraActor.h"
#include <GLMIncludes.h>
class CLASS_DEFINE HydraPlanetQuadActor : public HydraActor
{
public:
virtual void InitialiseComponents();
virtual void DeferredInitialiseComponents();
virtual void Destroy();
void InitialiseQuad(HydraID parent_id, float planet_diameter, float quad_dimension, uint32_t divisions, glm::dvec3 origin, glm::vec3 orientation);
void CheckResolution(glm::dvec3 player_position);
virtual ~HydraPlanetQuadActor();
private:
glm::vec3 _ProjectSphere(glm::dvec4 vert_in, glm::dmat4 trans, glm::dmat4 inv_trans, double diameter, glm::vec3 origin);
glm::dvec3 _ProjectCentre(glm::vec3 centre, glm::dmat4 trans, double diameter);
void _Split();
HydraID m_parent_id = INVALID_HYDRA_ID;
double m_scale = 1.0;
double m_widthscale = 1000.0f;
HydraID m_center_actor = INVALID_HYDRA_ID;
HydraID m_material_component = INVALID_HYDRA_ID;
HydraID m_position_component = INVALID_HYDRA_ID;
HydraID m_mesh_component = INVALID_HYDRA_ID;
uint32_t m_divisions = 64;
float m_quad_dimension = 0;
float m_planet_diameter = 0;
glm::dvec3 m_centre {};
glm::vec3 m_origin {};
glm::vec3 m_orientation {};
bool m_divided = false;
std::vector<HydraID> m_child_quads;
protected:
void _CreatePosition();
void _CreateMesh();
void _CreateMaterial();
void _CreatePhysics();
void _CreateRenderableComponent();
void _MergeQuads();
};
#endif /* HYDRAPLANETQUADACTOR */