summary refs log tree commit diff
path: root/src/Entities/Player.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Entities/Player.hpp')
-rw-r--r--src/Entities/Player.hpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/Entities/Player.hpp b/src/Entities/Player.hpp
index c8a1c1f..c829d1f 100644
--- a/src/Entities/Player.hpp
+++ b/src/Entities/Player.hpp
@@ -5,6 +5,7 @@
 #include "../GFX/Camera.hpp"
 #include "../World/World.hpp"
 #include "../GFX/Window.hpp"
+#include "../GFX/Shading/Program.hpp"
 #include "../Math/AABB.hpp"
 #include "../Math/Rotation.hpp"
 #include "../World/Position.hpp"
@@ -12,9 +13,10 @@
 namespace MC::Entities {
 class Player {
 public:
-    explicit Player(Position::World position) : m_transform(position) {}
+    explicit Player(Position::World position, Real ascept, Real fov, Real near, Real far);
 
     void update(const Time& time, GFX::Window& window, GFX::Camera& camera, World::World& world);
+    void render(const GFX::Camera& camera);
 
     void move(Position::WorldOffset by);
     void move_to(Position::World to);
@@ -43,6 +45,7 @@ private:
     Vec3 flying_velocity(GFX::Window& window, const Time& time, Vec3 input_direction);
     Vec3 noclip_velocity(GFX::Window& window, const Time& time, Vec3 input_direction);
 
+    void update_targeted_block(World::World& world);
     void actions(GFX::Window& window, World::World& world);
 
     Transform camera_transform() const;
@@ -56,6 +59,8 @@ private:
     // Returns position of the center of the bottom face of `box`.
     static Position::World position_for_bounding_box(AABB box);
 
+    static GFX::Mesh create_outline_cube_mesh();
+
     enum class MovementMode {
         // Gravity, collision, and normal movement
         Walking,
@@ -68,9 +73,26 @@ private:
     MovementMode m_movement = MovementMode::Walking;
     Bool m_on_ground = false;
 
+    struct TargetedBlock {
+        Position::BlockWorld position;
+        Position::BlockWorldOffset normal;
+    };
+    std::optional<TargetedBlock> m_targeted_block;
+
     Vec3 m_velocity{};
     Transform m_transform;
     static inline AABB s_bounds{{0.35, 1.8, 0.35}};
+
+    // TODO: Put this into the rendering system
+    static const Char* outline_vertex;
+    static const Char* outline_fragment;
+
+    GFX::Shading::Program m_outline_program;
+    GFX::Mesh m_outline_mesh;
+
+    GFX::Shading::Uniform m_outline_model_uniform;
+    GFX::Shading::Uniform m_outline_view_uniform;
+    GFX::Shading::Uniform m_outline_projection_uniform;
 };
 
 }