About to implement physics
This commit is contained in:
@ -10,4 +10,5 @@ target_sources(${DAWN_TARGET_NAME}
|
||||
CubeCollider.cpp
|
||||
CapsuleCollider.cpp
|
||||
SphereCollider.cpp
|
||||
CharacterController3D.cpp
|
||||
)
|
@ -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);
|
||||
}
|
@ -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;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user