diff --git a/src/character_actor.hpp b/src/character_actor.hpp index 686964b..9ee2f77 100644 --- a/src/character_actor.hpp +++ b/src/character_actor.hpp @@ -3,6 +3,7 @@ #include "character_data.hpp" #include "health.hpp" +#include "state.hpp" #include "projectile_pool.hpp" #include #include @@ -19,11 +20,19 @@ public: virtual void _enter_tree() override; virtual void _process(double delta_time) override; virtual void _physics_process(double delta_time) override; + // manually set target_velocity void move(Vector3 world_vector); + // manually aim at a target position + // calls aim_direction with the flattened direction to 'at' void aim(Vector3 at); + // manually set the forward vector of target_rotation void aim_direction(Vector3 direction); + // set a movement target to navigate towards void move_to(Vector3 to, float target_distance = 0.5f); + // fire weapon at a target position + // calls aim(at) and set_firing(true) void shoot_at(Vector3 at); + // getter-setters void set_firing(bool firing); void set_manual_mode(bool value); @@ -44,19 +53,31 @@ protected: void process_rotation(double delta_time); void try_fire_weapon(); private: + // desired velocity, accelerated towards each frame Vector3 velocity_target{0.f,0.f,0.f}; + // target rotation, slerped towards each frame Basis target_rotation{}; - NavigationAgent3D *nav_agent{nullptr}; + // ignore any ai planning or navigation bool mode_manual{false}; + // fire weapon at whatever we're aiming at + bool firing{false}; + // the next timestamp at which a weapon can be fired + float fire_timer{0.f}; + // the origin point for projectiles + Node3D *weapon_muzzle{nullptr}; + // whatever the AI is currently targetting + Node *target{nullptr}; + // the current state of the actor + goap::State current_state{}; // the current state + Health *health{nullptr}; ProjectilePool *primary_weapon_pool{nullptr}; - Ref data; - float fire_interval{0.f}; - bool firing{false}; - float fire_timer{0.f}; - Node3D *weapon_muzzle{nullptr}; + NavigationAgent3D *nav_agent{nullptr}; Ref rotation_speed_curve{}; + // character data assigned when spawned + Ref data; + float fire_interval{0.f}; // derived from the current weapon's rpm static float const ACCELERATION; static float const WALK_SPEED;