Splits
This commit is contained in:
@@ -17,7 +17,7 @@ class CLASS_DEFINE HydraLightSpawnerActor : public HydraActor
|
||||
public:
|
||||
void InitialiseComponents() override;
|
||||
void SetEnabled(bool enabled);
|
||||
void FixedTick(float delta_t);
|
||||
void FixedTick(float delta_t) override;
|
||||
void SpawnSettings(float spawns_per_second,
|
||||
glm::vec3 spawn_direction,
|
||||
glm::vec3 dir_variation,
|
||||
|
||||
@@ -8,12 +8,30 @@
|
||||
#include "../../ecs/components/HydraMeshComponent.h"
|
||||
#include "../../ecs/components/HydraRenderableComponent.h"
|
||||
#include "../../ecs/components/HydraMaterialComponent.h"
|
||||
#include "../../ecs/components/HydraTickComponent.h"
|
||||
#include "../../buffer/HydraMaterialBufferManager.h"
|
||||
#include "../../buffer/HydraTextureBufferManager.h"
|
||||
#include "../../buffer/HydraMaterialBuffer.h"
|
||||
#include "../../mesh/HydraMeshManager.h"
|
||||
#include "../../mesh/HydraMesh.h"
|
||||
|
||||
void HydraPlanetActor::FixedTick(float delta_t)
|
||||
{
|
||||
HydraID player_id = GetEngine()->GetPossessedPlayer();
|
||||
HydraPositionComponent pos_comp = GetEngine()->ECS()->GetComponent<HydraPositionComponent>(player_id);
|
||||
HydraActorManager* actor_manager = GetEngine()->ActorManager();
|
||||
HydraECS* ecs = GetEngine()->ECS();
|
||||
|
||||
HydraPlanetQuadActor* quad0 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[0]));
|
||||
HydraPlanetQuadActor* quad1 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[1]));
|
||||
HydraPlanetQuadActor* quad2 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[2]));
|
||||
HydraPlanetQuadActor* quad3 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[3]));
|
||||
|
||||
quad0->CheckResolution(pos_comp.position);
|
||||
quad1->CheckResolution(pos_comp.position);
|
||||
quad2->CheckResolution(pos_comp.position);
|
||||
quad3->CheckResolution(pos_comp.position);
|
||||
}
|
||||
|
||||
void HydraPlanetActor::InitialiseComponents()
|
||||
{
|
||||
@@ -26,12 +44,22 @@ void HydraPlanetActor::InitialiseComponents()
|
||||
//_CreateMesh();
|
||||
//_CreateRenderableComponent();
|
||||
_CreateQuads();
|
||||
_CreateTick();
|
||||
}
|
||||
|
||||
void HydraPlanetActor::DeferredInitialiseComponents()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void HydraPlanetActor::_CreateTick()
|
||||
{
|
||||
HydraECS *ecs = GetEngine()->ECS();
|
||||
HydraTickComponent tick_component;
|
||||
tick_component.entity_id = GetID();
|
||||
tick_component.fixed = true;
|
||||
ecs->AddComponent<HydraTickComponent>(GetID(), tick_component);
|
||||
}
|
||||
void HydraPlanetActor::_CreatePosition()
|
||||
{
|
||||
HydraECS *ecs = GetEngine()->ECS();
|
||||
@@ -217,6 +245,7 @@ void HydraPlanetActor::_CreateQuads()
|
||||
float diameter = 50000.0f;
|
||||
float quad_size = 50000.0f;
|
||||
float radius = diameter /2.0f;
|
||||
|
||||
m_quads[0] = GetEngine()->ActorManager()->CreateActor<HydraPlanetQuadActor>();
|
||||
HydraPlanetQuadActor* quad0 = static_cast<HydraPlanetQuadActor*>(GetEngine()->ActorManager()->GetActor(m_quads[0]));
|
||||
quad0->InitialiseQuad(diameter, quad_size, divisions, glm::vec3(0,0,radius), glm::vec3(0,0,0));
|
||||
|
||||
@@ -19,10 +19,12 @@ class CLASS_DEFINE HydraPlanetActor : public HydraActor
|
||||
void _CreatePhysics();
|
||||
void _CreateRenderableComponent();
|
||||
void _CreateQuads();
|
||||
void _CreateTick();
|
||||
public:
|
||||
virtual void InitialiseComponents();
|
||||
virtual void DeferredInitialiseComponents();
|
||||
virtual void Destroy(){}
|
||||
void FixedTick(float delta_t) override;
|
||||
void InitialiseComponents() override;
|
||||
void DeferredInitialiseComponents()override;
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
@@ -42,7 +42,24 @@ void HydraPlanetQuadActor::InitialiseQuad(float planet_diameter, float quad_dime
|
||||
_CreateMesh();
|
||||
}
|
||||
|
||||
glm::vec3 HydraPlanetQuadActor::_ProjectSphere(glm::dvec4 vert_in, glm::mat4 trans, glm::mat4 inv_trans, double diameter, glm::vec3 origin)
|
||||
void HydraPlanetQuadActor::CheckResolution(glm::dvec3 player_position)
|
||||
{
|
||||
if(m_divided)
|
||||
{
|
||||
std::vector<HydraID> children = GetEngine()->ActorManager()->GetChildren(GetID());
|
||||
for(HydraID child_id : children)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
double distance_to_quad = glm::length(player_position - m_centre);
|
||||
if(distance_to_quad < m_quad_dimension)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
glm::vec3 HydraPlanetQuadActor::_ProjectSphere(glm::dvec4 vert_in, glm::dmat4 trans, glm::dmat4 inv_trans, double diameter, glm::vec3 origin)
|
||||
{
|
||||
glm::dvec4 vert = trans * vert_in;
|
||||
vert = glm::normalize(vert);
|
||||
@@ -60,11 +77,18 @@ glm::vec3 HydraPlanetQuadActor::_ProjectSphere(glm::dvec4 vert_in, glm::mat4 tra
|
||||
|
||||
vert = glm::normalize(vert) * ((m_planet_diameter / 2.0) + (noise * 500.0f));
|
||||
vert = inv_trans * glm::dvec4(vert.x, vert.y, vert.z, 1.0);
|
||||
|
||||
|
||||
return glm::vec3(vert);
|
||||
}
|
||||
|
||||
glm::dvec3 HydraPlanetQuadActor::_ProjectCentre(glm::dvec4 vert_in, glm::dmat4 trans, double diameter, glm::vec3 origin)
|
||||
{
|
||||
glm::dvec4 vert = trans * vert_in;
|
||||
vert = glm::normalize(vert);
|
||||
vert = vert * (m_planet_diameter / 2.0);
|
||||
|
||||
return glm::dvec3(vert);
|
||||
}
|
||||
|
||||
void HydraPlanetQuadActor::_CreatePosition()
|
||||
{
|
||||
HydraECS *ecs = GetEngine()->ECS();
|
||||
@@ -121,10 +145,15 @@ void HydraPlanetQuadActor::_CreateMesh()
|
||||
uint32_t index_idx = 0;
|
||||
//glm::mat4 trans = GetEngine()->ActorManager()->GetActorPose(actor_id);
|
||||
|
||||
glm::mat4 trans_matrix = glm::translate(pos_comp.position);
|
||||
glm::mat4 rot_matrix = glm::toMat4(glm::quat(pos_comp.orientation));
|
||||
glm::mat4 trans = trans_matrix * rot_matrix;
|
||||
glm::mat4 inv_trans = glm::inverse(trans);
|
||||
glm::dmat4 trans_matrix = glm::translate(pos_comp.position);
|
||||
glm::dmat4 rot_matrix = glm::toMat4(glm::quat(pos_comp.orientation));
|
||||
glm::dmat4 trans = trans_matrix * rot_matrix;
|
||||
glm::dmat4 inv_trans = glm::inverse(trans);
|
||||
|
||||
glm::dvec4 centre = glm::dvec4(max_x - min_x, max_y - min_y, max_z - min_z, 1.0);
|
||||
|
||||
m_centre = _ProjectCentre(centre, trans, m_planet_diameter, m_origin);
|
||||
|
||||
for (uint32_t y_count = 0; y_count < m_divisions - 1; y_count++)
|
||||
{
|
||||
for (uint32_t x_count = 0; x_count < m_divisions - 1; x_count++)
|
||||
@@ -236,3 +265,4 @@ void HydraPlanetQuadActor::_CreateRenderableComponent()
|
||||
ecs->AddComponent<HydraRenderableComponent>(GetID(), render_comp);
|
||||
ecs->AddComponent<HydraShadowCasterComponent>(GetID(), shad_caster);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,8 +11,10 @@ class CLASS_DEFINE HydraPlanetQuadActor : public HydraActor
|
||||
virtual void DeferredInitialiseComponents();
|
||||
virtual void Destroy(){}
|
||||
void InitialiseQuad(float planet_diameter, float quad_dimension, uint32_t divisions, glm::dvec3 origin, glm::vec3 orientation);
|
||||
void CheckResolution(glm::dvec3 player_position);
|
||||
private:
|
||||
glm::vec3 _ProjectSphere(glm::dvec4 vert_in, glm::mat4 trans, glm::mat4 inv_trans, double diameter, glm::vec3 origin);
|
||||
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);
|
||||
double m_scale = 1.0;
|
||||
double m_widthscale = 1000.0f;
|
||||
HydraID m_material_component = INVALID_HYDRA_ID;
|
||||
@@ -21,7 +23,9 @@ class CLASS_DEFINE HydraPlanetQuadActor : public HydraActor
|
||||
uint32_t m_divisions = 100;
|
||||
float m_quad_dimension = 0;
|
||||
float m_planet_diameter = 0;
|
||||
glm::vec3 m_origin {};
|
||||
glm::dvec3 m_centre {};
|
||||
glm::vec3 m_origin {};
|
||||
bool m_divided = false;
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user