About to implement physics

This commit is contained in:
2023-03-19 10:17:33 -07:00
parent 704b8f38ef
commit e1d991916c
9 changed files with 109 additions and 69 deletions

View File

@ -10,4 +10,5 @@ target_sources(${DAWN_TARGET_NAME}
CubeCollider.cpp
CapsuleCollider.cpp
SphereCollider.cpp
CharacterController3D.cpp
)

View File

@ -0,0 +1,35 @@
// Copyright (c) 2023 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "CharacterController3D.hpp"
using namespace Dawn;
CharacterController3D::CharacterController3D(SceneItem *item) :
SceneItemComponent(item)
{
}
void CharacterController3D::onStart() {
useEvent([&](float_t delta){
// Friction
velocity -= glm::vec3(velocity.x, 0, velocity.z) * friction * delta;
// Gravity
velocity += this->gravity * delta;
auto myCollider = item->getComponent<Collider3D>();
auto colliders = getScene()->findComponents<Collider3D>();
auto itCollider = colliders.begin();
while(itCollider != colliders.end()) {
(*itCollider)->
++itCollider;
}
// Move / Update
transform->setLocalPosition(transform->getLocalPosition() + (velocity * delta));
}, getScene()->eventSceneUpdate);
}

View File

@ -0,0 +1,20 @@
// Copyright (c) 2023 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "Collider3D.hpp"
namespace Dawn {
class CharacterController3D : public SceneItemComponent {
public:
glm::vec3 velocity = glm::vec3(0, 0, 0);
glm::vec3 gravity = glm::vec3(0, -1, 0);
float_t friction = 12.0f;
CharacterController3D(SceneItem *item);
void onStart() override;
};
}