Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Bevy EntiTiles 🗺️
A 2d tilemap library for bevy. With many useful algorithms/tools built in.
This repo is under maintenance as long as this message exists. ( Hope this message can bring you peace of mind. Yeah, that's childish :p )
It's NOT recommended to use the code in dev branch! There's full of incomplete code and even errors! But master branch would be ok if you can't wait to try out new features.
Future Goals
The higher the priority, the more towards the front in the following list.
- Chunk Unloading
- Optimization
- Tilemap Serializing (Physics)
- Tiled Support
- Custom Material
- Volumetric Clouds / Fog
- SSAO
- Realtime Lighting
- Runtime Mesh & Texture Baking
- Wang Tiling
- Tilemap Mask
Frustum CullingPathfindingPhysicsLDtk Full SupportInfinite Tilemap
Known Issues
- Spawning another tilemap while the program is running will cause panic.
Feature Flags
| Flag | Funtionality |
|---|---|
algorithm |
Implementation of algorithms |
debug |
Show some debug info including aabbs for chunks and tilemaps, path finding results etc. |
ldtk |
LDtk support. |
physics_rapier |
Physics support for bevy_rapier |
physics_xpbd |
Physics support for bevy_xpbd, like setting colliders etc. |
serializing |
Save and load the tilemap from files. Also contains tools for upgrading files. |
ui |
Support renderring tiles as ui image. |
Coordinate Systems
The x and y axes in the tilemaps are the index axes. And those x and y on a single tile means the actual mesh size. Which you can control using tile_render_size.
legs here are mathematically incorrect, please consider it as a new concept.
Show Cases & Performance
Platform: 10600KF
Notice: Due to the performance overhead caused by the recorder, the fps value maybe inaccurate!
LDtk
The gif on the right is the map generated with wave function collapse. And the orange boxes in the left image is procedural generated colliders.
Bevy 0.12.1, crate 0.2.6, LDtk 1.4.1
Chunk Unloading
I know you are confused about these weird boxes, so please check the chunk_unloading example if you want to get further info.
Bevy 0.12.1, crate 0.2.7
Pathfinding
The pathfinding algorithm is very fast.
Notice this tests are done with synchronized pathfinding. Which means whole algorithm will figure the path out in one frame. But since 0.2.1, the asynchronized one in implemented. So the algorithm can complete a part of the pathfinding and continue it in the next frame. This will make it even smoother.
| Size | Time(avg of 3 tests) ms |
|---|---|
| 100x100 | 12.00 |
| 500x500 | 295.67 |
| 1000x1000 | 1384.33 |
Bevy 0.12.0, crate 0.2.1, using
pathfindingexample
Wave Function Collapse
The wave function collapse algorithm is also fast. XD
In the following case, each tile has at least one corresponding color gap with its neighboring tiles.
Notice: The funtionality of visualizing the process of wfc was removed in 0.2.6
| Size | Time(avg of 3 tests) ms | Time(avg of 3 tests) ms | Time(avg of 3 tests) ms |
|---|---|---|---|
| 10x10 | 33.312 | 16.264 (3) | 0.516(8) |
| 20x20 | 490.950 | 96.009 (3) | 3.344(8) |
| 30x30 | 2,280.121 | 335.697 (6) | 12.280(8) |
| 50x50 | 18,838.542 | 2,095.428 (8) | 75.143(8) |
| 100x100 | (Not measurable) | 32,309.045 (16) | 999.414(8) |
Column 1: Bevy 0.11.3, crate 0.2.0, NoneWeighted Column 2: Bevy 0.12, crate 0.2.1, NoneWeighted,
max_retrace_factor= number in parentheses Column3: Bevy 0.12.1, crate 0.2.6, NoneWeighted,max_retrace_factor= number in parentheses
Limitations
- Supports up to 4 rendered layers* in one tilemap.
- Supports up to 64 animations in one tilemap. (this will no longer exists in the future)
- Supports up to 16 length of animation sequences.
* Rendered layer means the layer that will be rendered. You can insert as much layers as you want, but only the 4 top layers will be rendered.
Special Thanks & References
- SSAO & Volumetric Clouds / Fog inspired by this video.
bevy_ecs_tilemapI took this crate as the reference and learnt the basis of bevy rendering!bevy_ecs_ldtkI was confused and have no idea about how to instantiate LDtk entities before I read this crate! I also learnt proc macros and many other things from this crate!
Assets
Versions
| Bevy ver | EntiTiles ver | LDtk ver |
|---|---|---|
| 0.12.x | 0.2.7 | 1.5.1 |
| 0.12.x | 0.2.3-0.2.6 | 1.4.1 |
| 0.12.x | 0.2.0-0.2.2 | Not supported |
| 0.11.x | 0.1.x | Not supported |