// 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(std::weak_ptr<SceneItem> item) :
  SceneItemComponent(item)
{

}

void CharacterController3D::onStart() {
  useEvent([&](float_t delta){
    auto item = this->item.lock();

    // 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
    item->setLocalPosition(item->getLocalPosition() + (velocity * delta));
  }, getScene()->eventSceneUpdate);
}