Skip to content

Commit a39178a

Browse files
committed
WIP "new api".
1 parent af750d5 commit a39178a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+3722
-1284
lines changed

Cargo.lock

Lines changed: 249 additions & 319 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ default = []
1414
atlas = []
1515

1616
[dependencies]
17-
bevy = { version = "0.6", default-features = false, features = ["render"] }
17+
bevy = { version = "0.6.1", default-features = false, features = ["render"] }
1818
log = "0.4"
1919
regex = "1.5.4"
2020
bytemuck = "1.7.2"
@@ -28,17 +28,5 @@ env_logger = "0.9"
2828
serde_json = { version = "1.0" }
2929
tiled = { version = "0.9", default-features = false }
3030

31-
[[example]]
32-
name = "ldtk"
33-
path = "examples/ldtk/ldtk_usage.rs"
34-
35-
[[example]]
36-
name = "tiled"
37-
path = "examples/tiled/tiled_usage.rs"
38-
39-
[[example]]
40-
name = "tiled_rotate"
41-
path = "examples/tiled/tiled_rotate.rs"
42-
4331
[target.wasm32-unknown-unknown]
4432
runner = "wasm-server-runner"

examples/basic.rs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
use bevy::prelude::*;
2+
use bevy_ecs_tilemap::{
3+
map::{
4+
Tilemap2dGridSize, Tilemap2dSize, Tilemap2dTextureSize, Tilemap2dTileSize, TilemapId,
5+
TilemapTexture,
6+
},
7+
tiles::{Tile2dStorage, TilePos2d, TileTexture},
8+
Tilemap2dPlugin, TilemapBundle,
9+
};
10+
11+
mod helpers;
12+
13+
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
14+
commands.spawn_bundle(OrthographicCameraBundle::new_2d());
15+
16+
let texture_handle: Handle<Image> = asset_server.load("tiles.png");
17+
18+
let tilemap_size = Tilemap2dSize { x: 32, y: 32 };
19+
let mut tile_storage = Tile2dStorage::empty(tilemap_size);
20+
let tilemap_entity = commands.spawn().id();
21+
22+
for x in 0..32u32 {
23+
for y in 0..32u32 {
24+
let tile_pos = TilePos2d { x, y };
25+
let tile_entity = commands
26+
.spawn()
27+
.insert(tile_pos)
28+
.insert(TileTexture(0))
29+
.insert(TilemapId(tilemap_entity))
30+
.id();
31+
tile_storage.set(&tile_pos, Some(tile_entity));
32+
}
33+
}
34+
35+
commands
36+
.entity(tilemap_entity)
37+
.insert_bundle(TilemapBundle {
38+
grid_size: Tilemap2dGridSize { x: 16.0, y: 16.0 },
39+
size: tilemap_size,
40+
storage: tile_storage,
41+
texture_size: Tilemap2dTextureSize { x: 96.0, y: 16.0 },
42+
texture: TilemapTexture(texture_handle),
43+
tile_size: Tilemap2dTileSize { x: 16.0, y: 16.0 },
44+
..Default::default()
45+
});
46+
}
47+
48+
fn main() {
49+
App::new()
50+
.insert_resource(WindowDescriptor {
51+
width: 1270.0,
52+
height: 720.0,
53+
title: String::from("Basic Example"),
54+
..Default::default()
55+
})
56+
.add_plugins(DefaultPlugins)
57+
.add_plugin(Tilemap2dPlugin)
58+
.add_startup_system(startup)
59+
.add_system(helpers::camera::movement)
60+
.add_system(helpers::texture::set_texture_filters_to_nearest)
61+
.run();
62+
}

examples/bench.rs

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,50 @@ use bevy::{
22
diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin},
33
prelude::*,
44
};
5-
use bevy_ecs_tilemap::prelude::*;
5+
use bevy_ecs_tilemap::{
6+
map::{
7+
Tilemap2dGridSize, Tilemap2dSize, Tilemap2dTextureSize, Tilemap2dTileSize, TilemapId,
8+
TilemapTexture,
9+
},
10+
tiles::{Tile2dStorage, TilePos2d, TileTexture},
11+
Tilemap2dPlugin, TilemapBundle,
12+
};
613

714
mod helpers;
815

9-
fn startup(
10-
mut commands: Commands,
11-
asset_server: Res<AssetServer>,
12-
mut meshes: ResMut<Assets<Mesh>>,
13-
) {
16+
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
1417
commands.spawn_bundle(OrthographicCameraBundle::new_2d());
1518

16-
let texture_handle = asset_server.load("tiles.png");
17-
18-
// Create map with (10 * 128) ^ 2 tiles or 1,638,400 tiles.
19-
// Be patient when running this example as meshing does not run on multiple CPU's yet..
20-
let layer_entity = LayerBuilder::<TileBundle>::new_batch(
21-
&mut commands,
22-
LayerSettings::new(
23-
MapSize(10, 10),
24-
ChunkSize(128, 128),
25-
TileSize(16.0, 16.0),
26-
TextureSize(96.0, 16.0),
27-
),
28-
&mut meshes,
29-
texture_handle,
30-
0u16,
31-
0u16,
32-
|_| Some(TileBundle::default()),
33-
);
19+
let texture_handle: Handle<Image> = asset_server.load("tiles.png");
3420

35-
// Create map entity and component:
36-
let map_entity = commands.spawn().id();
37-
let mut map = Map::new(0u16, map_entity);
21+
let tilemap_size = Tilemap2dSize { x: 1280, y: 1280 };
22+
let mut tile_storage = Tile2dStorage::empty(tilemap_size);
23+
let tilemap_entity = commands.spawn().id();
3824

39-
// Required to keep track of layers for a map internally.
40-
map.add_layer(&mut commands, 0u16, layer_entity);
25+
for x in 0..tilemap_size.x {
26+
for y in 0..tilemap_size.y {
27+
let tile_pos = TilePos2d { x, y };
28+
let tile_entity = commands
29+
.spawn()
30+
.insert(tile_pos)
31+
.insert(TileTexture(0))
32+
.insert(TilemapId(tilemap_entity))
33+
.id();
34+
tile_storage.set(&tile_pos, Some(tile_entity));
35+
}
36+
}
4137

42-
// Spawn Map
43-
// Required in order to use map_query to retrieve layers/tiles.
4438
commands
45-
.entity(map_entity)
46-
.insert(map)
47-
.insert(Transform::from_xyz(-10240.0, -10240.0, 0.0))
48-
.insert(GlobalTransform::default());
39+
.entity(tilemap_entity)
40+
.insert_bundle(TilemapBundle {
41+
grid_size: Tilemap2dGridSize { x: 16.0, y: 16.0 },
42+
size: tilemap_size,
43+
storage: tile_storage,
44+
texture_size: Tilemap2dTextureSize { x: 96.0, y: 16.0 },
45+
texture: TilemapTexture(texture_handle),
46+
tile_size: Tilemap2dTileSize { x: 16.0, y: 16.0 },
47+
..Default::default()
48+
});
4949
}
5050

5151
fn main() {
@@ -59,7 +59,7 @@ fn main() {
5959
.add_plugins(DefaultPlugins)
6060
.add_plugin(LogDiagnosticsPlugin::default())
6161
.add_plugin(FrameTimeDiagnosticsPlugin::default())
62-
.add_plugin(TilemapPlugin)
62+
.add_plugin(Tilemap2dPlugin)
6363
.add_startup_system(startup)
6464
.add_system(helpers::camera::movement)
6565
.add_system(helpers::texture::set_texture_filters_to_nearest)

examples/helpers/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
pub mod camera;
2-
pub mod movement;
32
pub mod texture;

examples/layers.rs

Lines changed: 57 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,82 @@
11
use bevy::prelude::*;
2-
use bevy_ecs_tilemap::prelude::*;
3-
use rand::{thread_rng, Rng};
2+
use bevy_ecs_tilemap::{
3+
map::{
4+
Tilemap2dGridSize, Tilemap2dSize, Tilemap2dTextureSize, Tilemap2dTileSize, TilemapId,
5+
TilemapTexture,
6+
},
7+
tiles::{Tile2dStorage, TileTexture},
8+
Tilemap2dPlugin, TilemapBundle,
9+
};
410

511
mod helpers;
612

7-
fn startup(mut commands: Commands, asset_server: Res<AssetServer>, mut map_query: MapQuery) {
13+
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
814
commands.spawn_bundle(OrthographicCameraBundle::new_2d());
915

10-
let texture_handle = asset_server.load("tiles.png");
16+
let texture_handle: Handle<Image> = asset_server.load("tiles.png");
1117

12-
// Create map entity and component:
13-
let map_entity = commands.spawn().id();
14-
let mut map = Map::new(0u16, map_entity);
18+
let tilemap_size = Tilemap2dSize { x: 32, y: 32 };
1519

16-
let map_settings = LayerSettings::new(
17-
MapSize(2, 2),
18-
ChunkSize(8, 8),
19-
TileSize(16.0, 16.0),
20-
TextureSize(96.0, 16.0),
21-
);
22-
23-
// Layer 0
24-
let (mut layer_0, layer_0_entity) =
25-
LayerBuilder::new(&mut commands, map_settings.clone(), 0u16, 0u16);
26-
27-
// Required to keep track of layers for a map internally.
28-
map.add_layer(&mut commands, 0u16, layer_0_entity);
29-
30-
layer_0.set_all(TileBundle::default());
31-
32-
map_query.build_layer(&mut commands, layer_0, texture_handle.clone());
33-
34-
// Make 2 layers on "top" of the base map.
35-
for z in 0..2 {
36-
let (mut layer_builder, layer_entity) =
37-
LayerBuilder::new(&mut commands, map_settings.clone(), 0u16, z + 1);
38-
39-
let mut random = thread_rng();
20+
// Layer 1
21+
let mut tile_storage = Tile2dStorage::empty(tilemap_size);
22+
let tilemap_entity = commands.spawn().id();
4023

41-
for _ in 0..100 {
42-
let position = TilePos(random.gen_range(0..16), random.gen_range(0..16));
43-
// Ignore errors for demo sake.
44-
let _ = layer_builder.set_tile(
45-
position,
46-
TileBundle {
47-
tile: Tile {
48-
texture_index: z + 1,
49-
..Default::default()
50-
},
51-
..Default::default()
52-
},
53-
);
54-
}
55-
56-
map_query.build_layer(&mut commands, layer_builder, texture_handle.clone());
24+
bevy_ecs_tilemap::helpers::fill_tilemap(
25+
TileTexture(0),
26+
tilemap_size,
27+
TilemapId(tilemap_entity),
28+
&mut commands,
29+
&mut tile_storage,
30+
);
5731

58-
// Required to keep track of layers for a map internally.
59-
map.add_layer(&mut commands, z + 1, layer_entity);
60-
}
32+
commands
33+
.entity(tilemap_entity)
34+
.insert_bundle(TilemapBundle {
35+
grid_size: Tilemap2dGridSize { x: 16.0, y: 16.0 },
36+
size: tilemap_size,
37+
storage: tile_storage,
38+
texture_size: Tilemap2dTextureSize { x: 96.0, y: 16.0 },
39+
texture: TilemapTexture(texture_handle.clone()),
40+
tile_size: Tilemap2dTileSize { x: 16.0, y: 16.0 },
41+
..Default::default()
42+
});
43+
44+
// Layer 2
45+
let mut tile_storage = Tile2dStorage::empty(tilemap_size);
46+
let tilemap_entity = commands.spawn().id();
47+
48+
bevy_ecs_tilemap::helpers::fill_tilemap(
49+
TileTexture(2),
50+
tilemap_size,
51+
TilemapId(tilemap_entity),
52+
&mut commands,
53+
&mut tile_storage,
54+
);
6155

62-
// Spawn Map
63-
// Required in order to use map_query to retrieve layers/tiles.
6456
commands
65-
.entity(map_entity)
66-
.insert(map)
67-
.insert(Transform::from_xyz(-128.0, -128.0, 0.0))
68-
.insert(GlobalTransform::default());
57+
.entity(tilemap_entity)
58+
.insert_bundle(TilemapBundle {
59+
grid_size: Tilemap2dGridSize { x: 16.0, y: 16.0 },
60+
size: tilemap_size,
61+
storage: tile_storage,
62+
texture_size: Tilemap2dTextureSize { x: 96.0, y: 16.0 },
63+
texture: TilemapTexture(texture_handle),
64+
tile_size: Tilemap2dTileSize { x: 16.0, y: 16.0 },
65+
transform: Transform::from_xyz(32.0, 32.0, 1.0),
66+
..Default::default()
67+
});
6968
}
7069

7170
fn main() {
7271
App::new()
7372
.insert_resource(WindowDescriptor {
7473
width: 1270.0,
7574
height: 720.0,
76-
title: String::from("Layed Map Example"),
75+
title: String::from("Layers Example"),
7776
..Default::default()
7877
})
7978
.add_plugins(DefaultPlugins)
80-
.add_plugin(TilemapPlugin)
79+
.add_plugin(Tilemap2dPlugin)
8180
.add_startup_system(startup)
8281
.add_system(helpers::camera::movement)
8382
.add_system(helpers::texture::set_texture_filters_to_nearest)

0 commit comments

Comments
 (0)