diff --git a/src/player.cpp b/src/player.cpp index 2b16d67..17eaaa2 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -1,14 +1,42 @@ #include "player.hpp" #include "utils/godot_macros.hpp" +#include +#include -void Player::_bind_methods() { -} +void Player::_bind_methods() {} void Player::_ready() { this->anim_tree = this->get_node("%AnimationTree"); + this->input = this->get_node("%PlayerInput"); + this->input->listen_to(utils::PlayerInput::Listener("dir_left", "dir_right", callable_mp(this, &Player::_on_dir_horizontal))); + this->input->listen_to(utils::PlayerInput::Listener("dir_backward", "dir_forward", callable_mp(this, &Player::_on_dir_vertical))); + this->input->listen_to(utils::PlayerInput::Listener("look_left", "look_right", callable_mp(this, &Player::_on_look_horizontal))); + this->input->listen_to(utils::PlayerInput::Listener("look_down", "look_up", callable_mp(this, &Player::_on_look_vertical))); + this->input->listen_to(utils::PlayerInput::Listener("_mouse_left", "_mouse_right", callable_mp(this, &Player::_on_look_horizontal))); + this->input->listen_to(utils::PlayerInput::Listener("_mouse_down", "_mouse_up", callable_mp(this, &Player::_on_look_vertical))); this->model_node = this->get_node("%CharacterModel"); } +void Player::_on_dir_horizontal(gd::Ref, float value) { + this->input_directions.x = value; +} + +void Player::_on_dir_vertical(gd::Ref, float value) { + this->input_directions.y = value; +} + +void Player::_on_look_horizontal(gd::Ref, float value) { + this->input_look.x = value; +} + +void Player::_on_look_vertical(gd::Ref, float value) { + this->input_look.y = value; +} + +void Player::_process(double delta [[maybe_unused]]) { + this->anim_tree->set("parameters/Movement/blend_position", this->input_directions); +} + 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()}; diff --git a/src/player.hpp b/src/player.hpp index 4a722aa..4e50d98 100644 --- a/src/player.hpp +++ b/src/player.hpp @@ -11,11 +11,19 @@ class Player : public gd::CharacterBody3D { static void _bind_methods(); public: virtual void _ready() override; + virtual void _process(double delta) override; virtual void _physics_process(double delta) override; + + void _on_dir_horizontal(gd::Ref, float value); + void _on_dir_vertical(gd::Ref, float value); + void _on_look_horizontal(gd::Ref, float value); + void _on_look_vertical(gd::Ref, float value); private: gd::AnimationTree *anim_tree{nullptr}; utils::PlayerInput *input{nullptr}; gd::Node3D *model_node{nullptr}; + gd::Vector2 input_directions{}; + gd::Vector2 input_look{}; }; #endif // !TR_PLAYER_HPP