Rust rendering library built on top of Raylib
0

Configure Feed

Select the types of activity you want to include in your feed.

ren / crates / ren-graphics / src / _lib / camera.rs
2.4 kB 98 lines
1use ren_core::math::Vec2; 2 3use raylib_ffi::{self as rl, Camera2D, Vector2}; 4 5use crate::IGraphicsDrawer; 6 7pub struct Camera { 8 pub rl_camera: raylib_ffi::Camera2D, 9} 10 11impl Camera { 12 pub fn new(offset: Vec2<f32>) -> Self { 13 Self { 14 rl_camera: Camera2D { 15 offset: Vector2 { 16 x: offset.x, 17 y: offset.y, 18 }, 19 target: Vector2 { x: 0.0, y: 0.0 }, 20 rotation: 0.0, 21 zoom: 1.0, 22 }, 23 } 24 } 25 26 pub fn get_offset(&self) -> Vec2<f32> { 27 Vec2::new(self.rl_camera.offset.x, self.rl_camera.offset.y) 28 } 29 30 pub fn get_target(&self) -> Vec2<f32> { 31 Vec2::new(self.rl_camera.target.x, self.rl_camera.target.y) 32 } 33 34 pub fn get_zoom(&self) -> f32 { 35 self.rl_camera.zoom 36 } 37 38 pub fn draw<T: Fn(&mut D), D: IGraphicsDrawer>(&self, drawer: &mut D, f: T) { 39 unsafe { 40 rl::BeginMode2D(self.rl_camera); 41 } 42 f(drawer); 43 unsafe { 44 rl::EndMode2D(); 45 } 46 } 47 48 pub fn draw_mut<T: FnMut(&mut D), D: IGraphicsDrawer>(&self, drawer: &mut D, f: &mut T) { 49 unsafe { 50 rl::BeginMode2D(self.rl_camera); 51 } 52 f(drawer); 53 unsafe { 54 rl::EndMode2D(); 55 } 56 } 57 58 /* remember to use end_draw, otherwise unexpected results will occur. */ 59 #[inline] 60 pub fn begin_draw(&self) { 61 unsafe { 62 rl::BeginMode2D(self.rl_camera); 63 } 64 } 65 66 #[inline] 67 pub fn end_draw(&self) { 68 unsafe { 69 rl::EndMode2D(); 70 } 71 } 72 73 pub fn vec2_to_world(&self, vec: Vec2<i32>) -> Vec2<i32> { 74 let v = unsafe { 75 raylib_ffi::GetScreenToWorld2D( 76 Vector2 { 77 x: vec.x as f32, 78 y: vec.y as f32, 79 }, 80 self.rl_camera, 81 ) 82 }; 83 Vec2::new(v.x as i32, v.y as i32) 84 } 85 86 pub fn vec2_to_screen(&self, vec: Vec2<i32>) -> Vec2<i32> { 87 let v = unsafe { 88 raylib_ffi::GetWorldToScreen2D( 89 Vector2 { 90 x: vec.x as f32, 91 y: vec.y as f32, 92 }, 93 self.rl_camera, 94 ) 95 }; 96 Vec2::new(v.x as i32, v.y as i32) 97 } 98}