1use bevy_ecs::prelude::*;
2use macroquad::prelude::*;
3
4use starbloom_tiles::*;
5
6pub const CHUNK_DIM: usize = 16;
7
8pub const CHUNK_SIZE: f32 = CHUNK_DIM as f32 * TILE_SIZE;
9
10#[derive(Component)]
11pub struct Chunk {
12 x: u64, y: u64,
14 tiles: [[TileRepr; CHUNK_DIM]; CHUNK_DIM],
15}
16
17impl Chunk {
18 pub fn load(x: u64, y: u64) -> Self {
19 Self {
20 x,
21 y,
22 tiles: [[1; CHUNK_DIM]; CHUNK_DIM],
23 }
24 }
25
26 pub fn render(&self, tile_regestry: &TileRegestry) {
27 for (x, row) in self.tiles.iter().enumerate() {
28 for (y, tile_idx) in row.iter().enumerate() {
29 let tile = tile_regestry.get_tile_by_idx(tile_idx);
30 if !tile.renderable {
31 continue;
32 }
33 draw_rectangle(
34 self.x as f32 * CHUNK_SIZE + x as f32 * TILE_SIZE,
35 self.y as f32 * CHUNK_SIZE + y as f32 * TILE_SIZE,
36 TILE_SIZE,
37 TILE_SIZE,
38 GREEN,
39 );
40 }
41 }
42
43 let dim = measure_text(format!("{}, {}", self.x, self.y), None, 20, 1.);
44 draw_text(
45 format!("{}, {}", self.x, self.y),
46 self.x as f32 * CHUNK_SIZE,
47 self.y as f32 * CHUNK_SIZE + dim.height,
48 20.,
49 BLACK,
50 );
51 }
52
53 pub fn get(&self, x: usize, y: usize) -> TileRepr {
54 self.tiles[x][y]
55 }
56
57 pub fn get_bounding_rect(&self) -> Rect {
58 Rect::new(
59 self.x as f32 * CHUNK_SIZE,
60 self.y as f32 * CHUNK_SIZE,
61 CHUNK_SIZE,
62 CHUNK_SIZE,
63 )
64 }
65}