From 069c1f988aecb1627e29ca6b97710a6df714c432 Mon Sep 17 00:00:00 2001 From: Sara Date: Thu, 16 May 2024 08:44:37 +0200 Subject: [PATCH] feat: created CarPlayer class as a client to CarPhysics --- src/car_player.cpp | 35 +++++++++++++++++++++++++++++++++++ src/car_player.hpp | 30 ++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/car_player.cpp create mode 100644 src/car_player.hpp diff --git a/src/car_player.cpp b/src/car_player.cpp new file mode 100644 index 0000000..c8f6f22 --- /dev/null +++ b/src/car_player.cpp @@ -0,0 +1,35 @@ +#include "car_player.hpp" +#include "utils/player_input.hpp" +#include +#include + +namespace godot { +void CarPlayer::_bind_methods() { +#define CLASSNAME CarPlayer +} + +void CarPlayer::setup_player_input(PlayerInput *input) { + input->listen_to(PlayerInput::Listener("steer_right", "steer_left", callable_mp(this, &CarPlayer::on_steer))); + input->listen_to(PlayerInput::Listener("accelerate", callable_mp(this, &CarPlayer::on_accelerate))); + input->listen_to(PlayerInput::Listener("brake", callable_mp(this, &CarPlayer::on_brake))); +} + +void CarPlayer::spawn_at_position(Transform3D const &transform) { + this->set_transform(transform); + this->set_scale({1,1,1}); +} + +void CarPlayer::on_steer(Ref event, float value) { + this->set_current_steering(value * this->steering_factor); +} + +void CarPlayer::on_brake(Ref input, float value) { + this->set_brake(value != 0); +} + +void CarPlayer::on_accelerate(Ref input, float value) { + this->set_target_speed(max_speed * value); +} + +Node *CarPlayer::to_node() { return this; } +} diff --git a/src/car_player.hpp b/src/car_player.hpp new file mode 100644 index 0000000..a453107 --- /dev/null +++ b/src/car_player.hpp @@ -0,0 +1,30 @@ +#ifndef CAR_PLAYER_HPP +#define CAR_PLAYER_HPP + +#include "car_physics.hpp" +#include "utils/player.hpp" +#include +#include +#include + +namespace godot { +class CarPlayer : public CarPhysics, + public IPlayer { + GDCLASS(CarPlayer, CarPhysics); + static void _bind_methods(); +public: + virtual void setup_player_input(PlayerInput *input) override; + virtual void spawn_at_position(Transform3D const &transform) override; + virtual Node *to_node() override; + + void on_steer(Ref event, float value); + void on_brake(Ref event, float value); + void on_accelerate(Ref event, float value); +private: + const float max_speed{34.f}; + const float max_speed_reverse{10.f}; + const float steering_factor{1.f}; +}; +}; + +#endif // !CAR_PLAYER_HPP