util.rs 944B

12345678910111213141516171819202122232425262728293031323334353637
  1. use crate::config::{GRID_TILE_HEIGHT, GRID_TILE_WIDTH};
  2. use crate::physics::GridPosition;
  3. use crate::{ScenePoint, Vector2, WindowPoint};
  4. pub fn vec_from_angle(angle: f32) -> Vector2 {
  5. let vx = angle.sin();
  6. let vy = angle.cos();
  7. Vector2::new(vx, vy)
  8. }
  9. pub fn grid_position_from_scene_point(position: &ScenePoint) -> GridPosition {
  10. GridPosition::new(
  11. (position.x / GRID_TILE_WIDTH) as i32,
  12. (position.y / GRID_TILE_HEIGHT) as i32,
  13. )
  14. }
  15. pub fn scene_point_from_window_point(
  16. window_point: &WindowPoint,
  17. display_offset: &WindowPoint,
  18. ) -> ScenePoint {
  19. ScenePoint::new(
  20. window_point.x - display_offset.x,
  21. window_point.y - display_offset.y,
  22. )
  23. }
  24. pub fn window_point_from_scene_point(
  25. scene_point: &ScenePoint,
  26. display_offset: &WindowPoint,
  27. ) -> WindowPoint {
  28. WindowPoint::new(
  29. scene_point.x + display_offset.x,
  30. scene_point.y + display_offset.y,
  31. )
  32. }