107 lines
3.1 KiB
C++
107 lines
3.1 KiB
C++
#include "HydraPlayerActor.h"
|
|
#include "HydraActorManager.h"
|
|
#include "../HydraDefines.h"
|
|
#include "../engine/HydraEngine.h"
|
|
|
|
#include "../ecs/HydraECS.h"
|
|
#include "../ecs/components/HydraPositionComponent.h"
|
|
|
|
|
|
|
|
void HydraPlayerActor::InitialiseComponents()
|
|
{
|
|
HydraECS* ecs = GetEngine()->ECS();
|
|
//HydraID entity_id = ecs->CreateEntity();
|
|
HydraPositionComponent position_component;
|
|
ecs->AddComponent<HydraPositionComponent>(GetID(), position_component);
|
|
}
|
|
|
|
void HydraPlayerActor::DeferredInitialiseComponents()
|
|
{
|
|
//_CreatePhysics();
|
|
}
|
|
void HydraPlayerActor::_CreatePhysics()
|
|
{
|
|
// HydraPhysicsComponent* physics_component = static_cast<HydraPhysicsComponent*>(GetEngine()->ComponentManager()->CreateComponent((uint32_t)HYDRA_COMPONENT_TYPE::PHYSICS, GetID()));
|
|
|
|
// physics_component->physics_definition.PhysicsType = HydraPhyicsType::Dynamic;
|
|
// physics_component->physics_definition.PhysicsShape = HydraPhysicsShape::HydraBoxShape;
|
|
// physics_component->physics_definition.Mass = 10.0f;
|
|
// physics_component->physics_definition.ExtentX = 0.5f;
|
|
// physics_component->physics_definition.ExtentY = 0.5f;
|
|
// physics_component->physics_definition.ExtentZ = 0.5f;
|
|
// physics_component->physics_definition.DynamicFriction = 0.5f;
|
|
// physics_component->physics_definition.Restitution = 0.5f;
|
|
// physics_component->physics_definition.Velocity = GetEngine()->ActorManager()->GetActorVelocity(GetID());
|
|
|
|
}
|
|
void HydraPlayerActor::HandleInput(float delta_t)
|
|
{
|
|
glm::vec2 change = GetEngine()->MouseChange();
|
|
|
|
bool move_forward = GetEngine()->KeyPressed(HYDRA_KEY_CODES::HYDRA_KEY_W);
|
|
bool move_backward = GetEngine()->KeyPressed(HYDRA_KEY_CODES::HYDRA_KEY_S);
|
|
bool move_fast = GetEngine()->KeyPressed(HYDRA_KEY_CODES::HYDRA_KEY_LEFT_SHIFT);
|
|
|
|
bool move_left = GetEngine()->KeyPressed(HYDRA_KEY_CODES::HYDRA_KEY_A);
|
|
bool move_right = GetEngine()->KeyPressed(HYDRA_KEY_CODES::HYDRA_KEY_D);
|
|
|
|
HydraRenderSettings render_settings = GetEngine()->RenderSettings();
|
|
float scale = 0.2f;
|
|
|
|
float x_angle = (change.x / render_settings.DisplayWidth) * -500 * delta_t * scale;
|
|
float y_angle = (change.y / render_settings.DisplayHeight) * -500 * delta_t * scale;
|
|
|
|
float extra_speed = 1.0f;
|
|
float speed = 5.0f;
|
|
|
|
if (move_fast)
|
|
{
|
|
extra_speed = 150;
|
|
}
|
|
|
|
GetEngine()->ActorManager()->RotateActor(GetID(), y_angle, x_angle, 0.0f);
|
|
|
|
glm::dvec3 pos_vec = GetEngine()->ActorManager()->GetActorPosition(GetID());
|
|
glm::vec3 rot_vec = GetEngine()->ActorManager()->GetActorOrientation(GetID());
|
|
|
|
glm::mat4 rot = glm::mat4(1);
|
|
|
|
rot = glm::eulerAngleXYZ(rot_vec.x, rot_vec.y, rot_vec.z);
|
|
|
|
glm::dvec3 forward = m_forward * rot;
|
|
glm::dvec3 right = m_right * rot;
|
|
glm::dvec3 up = m_up * rot;
|
|
|
|
glm::dvec3 trans = glm::dvec3(0, 0, 0);
|
|
|
|
double distance = (double)(speed * extra_speed * delta_t);
|
|
bool moved = false;
|
|
if (move_forward)
|
|
{
|
|
trans = trans - (forward * distance);
|
|
moved = true;
|
|
}
|
|
if (move_backward)
|
|
{
|
|
trans = trans + (forward * distance);
|
|
moved = true;
|
|
}
|
|
|
|
if (move_right)
|
|
{
|
|
trans = trans - (right * distance);
|
|
moved = true;
|
|
}
|
|
|
|
if (move_left)
|
|
{
|
|
trans = trans + (right * distance);
|
|
moved = true;
|
|
}
|
|
if (moved)
|
|
{
|
|
GetEngine()->ActorManager()->TranslateActor(GetID(), -trans);
|
|
}
|
|
}
|