aboutsummaryrefslogtreecommitdiff
path: root/src/client/gui/position_indicator.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/gui/position_indicator.rs')
-rw-r--r--src/client/gui/position_indicator.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/client/gui/position_indicator.rs b/src/client/gui/position_indicator.rs
new file mode 100644
index 0000000..4d68b86
--- /dev/null
+++ b/src/client/gui/position_indicator.rs
@@ -0,0 +1,37 @@
+//! The position indicator shows the mouse position on the map
+//!
+//! The exact position the mouse is currently on is shown unless hidden by the user (TODO). This
+//! helps to place things exactly where they should be on the map and let the user know where they
+//! are looking and where relative to them other things should be easily at all times. Currently, this
+//! is a simple HUD so it doesn't interact with anything in the world, but that may change in the
+//! future.
+
+use crate::client::colours::DEFAULT_COLOURS;
+use crate::client::snapping::Snapper;
+use crate::client::transform::Transform;
+use crate::math::Vec2;
+use raylib::drawing::{RaylibDraw, RaylibDrawHandle};
+
+/// Function to draw a dot at the mouse position and the coordinates associated with it.
+// TODO: Snap this, when the user wants to snap, don't if they don't want to.
+pub fn position_indicator_draw(
+ rld: &mut RaylibDrawHandle,
+ mouse_pos_px: Vec2<f64>,
+ transform: &Transform,
+ snapper: &Snapper,
+) {
+ let mouse_pos_snapped_m = snapper.snap(transform.point_px_to_m(&mouse_pos_px));
+ let mouse_pos_snapped_px = transform.point_m_to_px(&mouse_pos_snapped_m);
+
+ rld.draw_circle_v(mouse_pos_snapped_px, 2., DEFAULT_COLOURS.position_indicator);
+ rld.draw_text(
+ &format!(
+ "({:.3}m, {:.3}m)",
+ mouse_pos_snapped_m.x, mouse_pos_snapped_m.y
+ ),
+ mouse_pos_snapped_px.x as i32 - 30,
+ mouse_pos_snapped_px.y as i32 - 30,
+ 20,
+ DEFAULT_COLOURS.position_text,
+ );
+}