About to implement physics
This commit is contained in:
@ -14,13 +14,18 @@ PlayerController::PlayerController(SceneItem *item) : SceneItemComponent(item) {
|
||||
|
||||
}
|
||||
|
||||
void PlayerController::onStart() {
|
||||
useEvent([&](float_t delta){
|
||||
auto camera = getScene()->findComponent<Camera>();
|
||||
assertNotNull(camera);
|
||||
std::vector<SceneItemComponent*> PlayerController::getDependencies() {
|
||||
return {
|
||||
(this->characterController = item->getComponent<CharacterController3D>())
|
||||
};
|
||||
}
|
||||
|
||||
// Friction
|
||||
velocity -= velocity * friction * delta;
|
||||
void PlayerController::onStart() {
|
||||
assertNotNull(this->characterController);
|
||||
|
||||
useEvent([&](float_t delta){
|
||||
// auto camera = getScene()->findComponent<Camera>();
|
||||
// assertNotNull(camera);
|
||||
|
||||
// Movement
|
||||
auto inputMove = getGame()->inputManager.getAxis2D(
|
||||
@ -31,40 +36,7 @@ void PlayerController::onStart() {
|
||||
if(inputMove.x != 0 || inputMove.y != 0) {
|
||||
float_t angle = atan2(inputMove.y, inputMove.x);
|
||||
glm::vec3 movement = glm::vec3(cos(angle), 0, sin(angle));
|
||||
velocity += movement * delta * moveSpeed;
|
||||
characterController->velocity += movement * delta * moveSpeed;
|
||||
}
|
||||
|
||||
// Move / Update
|
||||
transform->setLocalPosition(transform->getLocalPosition() + (velocity * delta));
|
||||
|
||||
|
||||
// tEST
|
||||
auto collider = item->getComponent<Collider3D>();
|
||||
assertNotNull(collider);
|
||||
Collider3DRayResult result;
|
||||
|
||||
struct Ray3D ray;
|
||||
ray.origin = glm::vec3(0, 0.0f, 5);
|
||||
ray.direction = glm::vec3(0, 0.0f, -4);
|
||||
|
||||
struct Color color = COLOR_MAGENTA;
|
||||
|
||||
if(collider->raycast(&result, ray)) {
|
||||
// std::cout << "Collide!" << std::endl;
|
||||
color = COLOR_WHITE;
|
||||
|
||||
getScene()->debugRay({
|
||||
.start = result.point,
|
||||
.direction = result.normal,
|
||||
.color = COLOR_GREEN
|
||||
});
|
||||
}
|
||||
|
||||
getScene()->debugRay({
|
||||
.start = ray.origin,
|
||||
.direction = ray.direction,
|
||||
.color = color
|
||||
});
|
||||
|
||||
}, getScene()->eventSceneUpdate);
|
||||
}
|
@ -4,17 +4,20 @@
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#pragma once
|
||||
#include "scene/SceneItemComponent.hpp"
|
||||
#include "scene/components/physics/3d/CharacterController3D.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class PlayerController : public SceneItemComponent {
|
||||
protected:
|
||||
CharacterController3D *characterController;
|
||||
|
||||
public:
|
||||
glm::vec3 velocity;
|
||||
float_t moveSpeed = 40.0f;
|
||||
float_t friction = 12.0f;
|
||||
|
||||
PlayerController(SceneItem *item);
|
||||
|
||||
std::vector<SceneItemComponent*> getDependencies() override;
|
||||
|
||||
void onStart() override;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user