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);
}