1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
use sdl2::pixels::Color; use sdl2::rect::Rect; use sdl2::render::Canvas; use sdl2::video::Window; use crate::entity; use crate::math::{self, TwoDimensional}; pub fn render_objects( tile_size: u32, screen_size: math::Dimension, canvas: &mut Canvas<Window>, player: &entity::Entity, objects: &Vec<entity::Entity>, ) { canvas.set_draw_color(Color::RGB(0, 0, 0)); canvas.clear(); render_player(tile_size, screen_size, canvas, player); for object in objects.iter() { render_entity( tile_size, screen_size, canvas, object, player.get_rectangle(), ); } canvas.present(); } pub fn render_player( tile_size: u32, screen_size: math::Dimension, canvas: &mut Canvas<Window>, entity: &entity::Entity, ) { let entity_rectangle = Rect::new( (screen_size.get_width() / 2 - 1) as i32, (screen_size.get_height() / 2 - 1) as i32, entity.get_rectangle().width() * tile_size, entity.get_rectangle().height() * tile_size, ); let (red, green, blue) = entity.get_skin().get_rgb_colors().unwrap(); canvas.set_draw_color(Color::RGB(red, green, blue)); canvas.fill_rect(entity_rectangle); } pub fn render_entity( tile_size: u32, screen_size: math::Dimension, canvas: &mut Canvas<Window>, entity: &entity::Entity, player_rect: math::Rectangle, ) { let (x, y) = entity.get_position().get_coordinates(); let (width, height) = entity.get_size().get_coordinates(); let entity_rectangle = Rect::new( (x - player_rect.x()) * tile_size as i32 + (screen_size.get_width() / 2 - 1) as i32, (y - player_rect.y()) * tile_size as i32 + (screen_size.get_height() / 2 - 1) as i32, width * tile_size, height * tile_size, ); let (red, green, blue) = entity.get_skin().get_rgb_colors().unwrap(); canvas.set_draw_color(Color::RGB(red, green, blue)); canvas.fill_rect(entity_rectangle); }