Lưới ô vuông không giới hạn kích thước, vẽ từ một tileset, chia thành chunk. Tiếp...
#include <_tilemap.h>
Các thuộc tính Public | |
| texture_handle | tileset {} |
| Ảnh tileset. | |
| vec2 | tile_size {16.0f, 16.0f} |
| Kích thước một ô, tính bằng pixel. | |
| f32 | margin = 0.0f |
| Khoảng từ mép ảnh tileset đến ô đầu tiên, pixel. | |
| f32 | spacing = 0.0f |
| Khoảng giữa hai ô liền nhau trong ảnh tileset, pixel. | |
| i32 | layer = 0 |
| Lớp vẽ, cùng thang với sprite::layer. | |
| rgba | tint {1.0f, 1.0f, 1.0f, 1.0f} |
| Màu nhân vào mọi ô. | |
| bool | visible = true |
| Ẩn khi vẽ. | |
| std::unordered_map< u64, tile_chunk > | chunks |
| Các chunk có ô, theo khóa từ tile_chunk_key(). | |
| u32 | revision = 0 |
| Tăng mỗi lần có ô đổi. | |
| std::vector< u8 > | shapes |
| Hình va chạm theo số thứ tự ô: shapes[id]. | |
| std::unordered_map< i32, tile_anim > | anims |
| Animation theo số thứ tự ô gốc. Đặt bằng tilemap_animate(). | |
Lưới ô vuông không giới hạn kích thước, vẽ từ một tileset, chia thành chunk.
Cần một transform trên cùng entity: transform.pos là góc trên trái của ô (0, 0) trong thế giới. Góc xoay và tỉ lệ bị bỏ qua.
Tileset là một ảnh gồm các ô cùng kích thước tile_size, đánh số từ 0 theo hàng từ trái sang phải rồi từ trên xuống, có thể cách mép ảnh margin và cách nhau spacing pixel (như tileset của Tiled và LDtk). Mỗi ô của lưới giữ số thứ tự ô trong tileset, hoặc -1 là ô trống. Cộng thêm njin::tile_flip_x hoặc njin::tile_flip_y để lật ô khi vẽ; đọc số thứ tự bằng tile_id().
Chunking. Ô được lưu theo khối 32 x 32 (njin::tile_chunk). Module sprite của engine vẽ sẵn mỗi chunk vào một ảnh riêng và chỉ vẽ lại chunk có ô vừa đổi, nên một bản đồ lớn chỉ tốn vài lệnh vẽ mỗi frame. Chỉ chunk nằm trong khung nhìn của camera mới được vẽ, và ảnh của chunk khuất lâu sẽ được giải phóng.
Luôn đổi ô bằng tilemap_set() để engine biết chunk nào cần vẽ lại.
| bool njin::tilemap::visible = true |
Ẩn khi vẽ.
Vẫn dùng được cho va chạm.
| std::vector<u8> njin::tilemap::shapes |
Hình va chạm theo số thứ tự ô: shapes[id].
Ô ngoài danh sách là tile_solid. Đặt bằng tilemap_set_shape().