summary refs log tree commit diff
path: root/src/Entities/Player.hpp
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-02-15 11:33:11 +0100
committerMel <einebeere@gmail.com>2024-02-15 11:34:28 +0100
commit92f63bbdbfc214849c203511bbcb1be0a4865588 (patch)
treed82e1b31e583b5cc9538f61cad696dab5dbd84dc /src/Entities/Player.hpp
parent87ef308220addbe4406006ceb802a7364e6f1a05 (diff)
downloadmeowcraft-92f63bbdbfc214849c203511bbcb1be0a4865588.tar.zst
meowcraft-92f63bbdbfc214849c203511bbcb1be0a4865588.zip
Proper input system
Diffstat (limited to 'src/Entities/Player.hpp')
-rw-r--r--src/Entities/Player.hpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/Entities/Player.hpp b/src/Entities/Player.hpp
index 2b69d57..342d965 100644
--- a/src/Entities/Player.hpp
+++ b/src/Entities/Player.hpp
@@ -1,14 +1,15 @@
 #pragma once
 
+#include "../Common/Pure.hpp"
 #include "../Time.hpp"
 #include "../Transform.hpp"
 #include "../GFX/Actions.hpp"
 #include "../GFX/Camera.hpp"
 #include "../World/World.hpp"
-#include "../GFX/Window.hpp"
 #include "../Math/AABB.hpp"
 #include "../Math/Rotation.hpp"
 #include "../World/Position.hpp"
+#include "../Input.hpp"
 
 namespace MC::Entities {
 class Player {
@@ -16,9 +17,9 @@ public:
     explicit Player(Position::World position)
         : m_transform(position), m_outline_mesh(create_outline_cube_mesh()) {}
 
-    Position::World position() const { return m_transform.position(); }
+    PURE Position::World position() const { return m_transform.position(); }
 
-    void update(const Time& time, GFX::Window& window, GFX::Camera& camera, World::World& world);
+    void update(Time const& time, Input const& input, GFX::Camera& camera, World::World& world);
     void render(GFX::Actions& actions);
 
     void move(Position::WorldOffset by);
@@ -27,14 +28,14 @@ public:
     void rotate(Rotation by);
     void rotate_to(Rotation to);
 
-    AABB bounds() const;
+    PURE AABB bounds() const;
 
 private:
     struct BlockedAxis {
         Bool positive, negative;
     };
 
-    Bool can_collide() const;
+    PURE Bool can_collide() const;
 
     struct ProcessCollisionsResult {
         Position::World position;
@@ -45,19 +46,19 @@ private:
 
     Position::World rescue_from_void_on_new_chunk(Time const& time, World::World& world, Position::World position);
 
-    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);
-    Vec3 noclip_velocity(GFX::Window& window, const Time& time, Vec3 input_direction);
+    Position::World movement(Time const& time, Vec3 input_direction);
+    Vec3 walking_velocity(Time const& time, Vec3 input_direction);
+    PURE Vec3 flying_velocity(Time const& time, Vec3 input_direction) const;
+    PURE Vec3 noclip_velocity(Time const& time, Vec3 input_direction) const;
 
     void update_targeted_block(World::World& world);
-    void actions(GFX::Window& window, World::World& world);
+    void actions(Input const& input, World::World& world);
 
-    Transform camera_transform() const;
+    PURE Transform camera_transform() const;
     void update_camera_position(GFX::Camera& camera) const;
 
-    static Vec3 directional_input(GFX::Window& window);
-    static Rotation rotational_input(GFX::Window& window);
+    static Vec3 directional_input(Input const& input);
+    static Rotation rotational_input(Input const& input);
 
     // Creates a bounding box where `position` is at the center of the bottom face.
     static AABB bounding_box_for_position(Position::World position);