summary refs log tree commit diff
path: root/src/Entities
diff options
context:
space:
mode:
Diffstat (limited to 'src/Entities')
-rw-r--r--src/Entities/Player.cpp31
-rw-r--r--src/Entities/Player.hpp3
2 files changed, 28 insertions, 6 deletions
diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp
index 66f08c6..a8abb1d 100644
--- a/src/Entities/Player.cpp
+++ b/src/Entities/Player.cpp
@@ -23,6 +23,18 @@ void Player::update(const Time& time, GFX::Window& window, GFX::Camera& camera,
     rotate(rotational_input(window));
 
     update_camera_position(camera);
+
+    if (window.mouse(GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS)) {
+        auto look_transform = camera_transform();
+        auto look_direction = -look_transform.forward(); // Why does this need to be inverted?
+        auto block = world.traverse(
+            Ray{look_transform.position(), look_direction},
+            4.0,
+            [](auto b) { return b.type.is_solid(); }
+        );
+
+        if (block != Position::BlockWorld{}) world.break_block(block);
+    }
 }
 
 void Player::move(Position::WorldOffset by) {
@@ -203,12 +215,21 @@ std::vector<AABB> Player::terrain_collision_domain(
     return colliding_blocks;
 }
 
-void Player::update_camera_position(GFX::Camera& camera) {
-    auto camera_position = m_transform.position();
-    camera_position.y() += 1.5;
+Transform Player::camera_transform() const {
+    auto position = m_transform.position();
+    position.y() += 1.5;
+    return {
+        position,
+        m_transform.rotation(),
+        m_transform.scale(),
+    };
+}
+
+void Player::update_camera_position(GFX::Camera& camera) const {
+    auto cam_transform = camera_transform();
 
-    camera.set_position(camera_position);
-    camera.set_angles(m_transform.rotation());
+    camera.set_position(cam_transform.position());
+    camera.set_angles(cam_transform.rotation());
 }
 
 Vec3 Player::directional_input(GFX::Window& window) {
diff --git a/src/Entities/Player.hpp b/src/Entities/Player.hpp
index 5d70559..b1ec8e7 100644
--- a/src/Entities/Player.hpp
+++ b/src/Entities/Player.hpp
@@ -40,7 +40,8 @@ private:
     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);
+    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);