#ifndef HYDRAPLANETQUADACTOR #define HYDRAPLANETQUADACTOR #include "../HydraActor.h" #include 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::dvec4 vert_in, glm::dmat4 trans, double diameter, glm::vec3 origin); 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 = 100; 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 m_child_quads; protected: void _CreatePosition(); void _CreateMesh(); void _CreateMaterial(); void _CreatePhysics(); void _CreateRenderableComponent(); void _MergeQuads(); }; #endif /* HYDRAPLANETQUADACTOR */