#include "player.hpp"
#include "utils/godot_macros.hpp"

void Player::_bind_methods() {
}

void Player::_ready() {
    this->anim_tree = this->get_node<gd::AnimationTree>("%AnimationTree");
    this->model_node = this->get_node<gd::Node3D>("%CharacterModel");
}

void Player::_physics_process(double delta [[maybe_unused]]) {
    gd::Basis const &model_basis{this->model_node->get_global_basis()};
    gd::Vector3 const local_motion{this->anim_tree->get_root_motion_position()};
    gd::Vector3 const motion {
        local_motion.x * model_basis.get_column(0) +
        local_motion.y * model_basis.get_column(1) +
        local_motion.z * model_basis.get_column(2)
    };
    this->set_velocity(motion / delta);
    this->move_and_slide();
}
