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