From 7b061aee2b4c15d242bb9f18101d6b9ea776c5cd Mon Sep 17 00:00:00 2001 From: Mel Date: Thu, 1 Feb 2024 23:56:57 +0100 Subject: Walking movement --- src/Entities/Player.hpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'src/Entities/Player.hpp') diff --git a/src/Entities/Player.hpp b/src/Entities/Player.hpp index 95e3d64..5d70559 100644 --- a/src/Entities/Player.hpp +++ b/src/Entities/Player.hpp @@ -25,16 +25,35 @@ public: AABB bounds() const; private: - static Position::World process_collisions(World::World& world, Position::World from, Position::World to); + struct BlockedAxis { + Bool positive, negative; + }; + + struct ProcessCollisionsResult { + Position::World position; + Vector<3, BlockedAxis> blocked_axes; + }; + static ProcessCollisionsResult process_collisions(World::World& world, Position::World from, Position::World to); static std::vector terrain_collision_domain(Position::World from, Position::World to, World::World& world); + Position::World movement(GFX::Window& window, const Time& time, Vec3 input_direction); + Vec3 walking_velocity(GFX::Window& window, const Time& time, Vec3 input_direction); + Vec3 flying_velocity(GFX::Window& window, const Time& time, Vec3 input_direction); + void update_camera_position(GFX::Camera& camera); + static Vec3 directional_input(GFX::Window& window); + static Rotation rotational_input(GFX::Window& window); + // Creates a bounding box where `position` is at the center of the bottom face. static AABB bounding_box_for_position(Position::World position); // Returns position of the center of the bottom face of `box`. static Position::World position_for_bounding_box(AABB box); + Bool m_on_ground = false; + Bool m_flying = false; + + Vec3 m_velocity{}; Transform m_transform; static inline AABB s_bounds{{0.35, 1.8, 0.35}}; }; -- cgit 1.4.1