Skip to content

Commit

Permalink
WIP "new api".
Browse files Browse the repository at this point in the history
  • Loading branch information
StarArawn committed Apr 19, 2022
1 parent af750d5 commit a39178a
Show file tree
Hide file tree
Showing 76 changed files with 3,722 additions and 1,284 deletions.
568 changes: 249 additions & 319 deletions Cargo.lock

Large diffs are not rendered by default.

14 changes: 1 addition & 13 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ default = []
atlas = []

[dependencies]
bevy = { version = "0.6", default-features = false, features = ["render"] }
bevy = { version = "0.6.1", default-features = false, features = ["render"] }
log = "0.4"
regex = "1.5.4"
bytemuck = "1.7.2"
Expand All @@ -28,17 +28,5 @@ env_logger = "0.9"
serde_json = { version = "1.0" }
tiled = { version = "0.9", default-features = false }

[[example]]
name = "ldtk"
path = "examples/ldtk/ldtk_usage.rs"

[[example]]
name = "tiled"
path = "examples/tiled/tiled_usage.rs"

[[example]]
name = "tiled_rotate"
path = "examples/tiled/tiled_rotate.rs"

[target.wasm32-unknown-unknown]
runner = "wasm-server-runner"
62 changes: 62 additions & 0 deletions examples/basic.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
use bevy::prelude::*;
use bevy_ecs_tilemap::{
map::{
Tilemap2dGridSize, Tilemap2dSize, Tilemap2dTextureSize, Tilemap2dTileSize, TilemapId,
TilemapTexture,
},
tiles::{Tile2dStorage, TilePos2d, TileTexture},
Tilemap2dPlugin, TilemapBundle,
};

mod helpers;

fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn_bundle(OrthographicCameraBundle::new_2d());

let texture_handle: Handle<Image> = asset_server.load("tiles.png");

let tilemap_size = Tilemap2dSize { x: 32, y: 32 };
let mut tile_storage = Tile2dStorage::empty(tilemap_size);
let tilemap_entity = commands.spawn().id();

for x in 0..32u32 {
for y in 0..32u32 {
let tile_pos = TilePos2d { x, y };
let tile_entity = commands
.spawn()
.insert(tile_pos)
.insert(TileTexture(0))
.insert(TilemapId(tilemap_entity))
.id();
tile_storage.set(&tile_pos, Some(tile_entity));
}
}

commands
.entity(tilemap_entity)
.insert_bundle(TilemapBundle {
grid_size: Tilemap2dGridSize { x: 16.0, y: 16.0 },
size: tilemap_size,
storage: tile_storage,
texture_size: Tilemap2dTextureSize { x: 96.0, y: 16.0 },
texture: TilemapTexture(texture_handle),
tile_size: Tilemap2dTileSize { x: 16.0, y: 16.0 },
..Default::default()
});
}

fn main() {
App::new()
.insert_resource(WindowDescriptor {
width: 1270.0,
height: 720.0,
title: String::from("Basic Example"),
..Default::default()
})
.add_plugins(DefaultPlugins)
.add_plugin(Tilemap2dPlugin)
.add_startup_system(startup)
.add_system(helpers::camera::movement)
.add_system(helpers::texture::set_texture_filters_to_nearest)
.run();
}
72 changes: 36 additions & 36 deletions examples/bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,50 +2,50 @@ use bevy::{
diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin},
prelude::*,
};
use bevy_ecs_tilemap::prelude::*;
use bevy_ecs_tilemap::{
map::{
Tilemap2dGridSize, Tilemap2dSize, Tilemap2dTextureSize, Tilemap2dTileSize, TilemapId,
TilemapTexture,
},
tiles::{Tile2dStorage, TilePos2d, TileTexture},
Tilemap2dPlugin, TilemapBundle,
};

mod helpers;

fn startup(
mut commands: Commands,
asset_server: Res<AssetServer>,
mut meshes: ResMut<Assets<Mesh>>,
) {
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn_bundle(OrthographicCameraBundle::new_2d());

let texture_handle = asset_server.load("tiles.png");

// Create map with (10 * 128) ^ 2 tiles or 1,638,400 tiles.
// Be patient when running this example as meshing does not run on multiple CPU's yet..
let layer_entity = LayerBuilder::<TileBundle>::new_batch(
&mut commands,
LayerSettings::new(
MapSize(10, 10),
ChunkSize(128, 128),
TileSize(16.0, 16.0),
TextureSize(96.0, 16.0),
),
&mut meshes,
texture_handle,
0u16,
0u16,
|_| Some(TileBundle::default()),
);
let texture_handle: Handle<Image> = asset_server.load("tiles.png");

// Create map entity and component:
let map_entity = commands.spawn().id();
let mut map = Map::new(0u16, map_entity);
let tilemap_size = Tilemap2dSize { x: 1280, y: 1280 };
let mut tile_storage = Tile2dStorage::empty(tilemap_size);
let tilemap_entity = commands.spawn().id();

// Required to keep track of layers for a map internally.
map.add_layer(&mut commands, 0u16, layer_entity);
for x in 0..tilemap_size.x {
for y in 0..tilemap_size.y {
let tile_pos = TilePos2d { x, y };
let tile_entity = commands
.spawn()
.insert(tile_pos)
.insert(TileTexture(0))
.insert(TilemapId(tilemap_entity))
.id();
tile_storage.set(&tile_pos, Some(tile_entity));
}
}

// Spawn Map
// Required in order to use map_query to retrieve layers/tiles.
commands
.entity(map_entity)
.insert(map)
.insert(Transform::from_xyz(-10240.0, -10240.0, 0.0))
.insert(GlobalTransform::default());
.entity(tilemap_entity)
.insert_bundle(TilemapBundle {
grid_size: Tilemap2dGridSize { x: 16.0, y: 16.0 },
size: tilemap_size,
storage: tile_storage,
texture_size: Tilemap2dTextureSize { x: 96.0, y: 16.0 },
texture: TilemapTexture(texture_handle),
tile_size: Tilemap2dTileSize { x: 16.0, y: 16.0 },
..Default::default()
});
}

fn main() {
Expand All @@ -59,7 +59,7 @@ fn main() {
.add_plugins(DefaultPlugins)
.add_plugin(LogDiagnosticsPlugin::default())
.add_plugin(FrameTimeDiagnosticsPlugin::default())
.add_plugin(TilemapPlugin)
.add_plugin(Tilemap2dPlugin)
.add_startup_system(startup)
.add_system(helpers::camera::movement)
.add_system(helpers::texture::set_texture_filters_to_nearest)
Expand Down
1 change: 0 additions & 1 deletion examples/helpers/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
pub mod camera;
pub mod movement;
pub mod texture;
115 changes: 57 additions & 58 deletions examples/layers.rs
Original file line number Diff line number Diff line change
@@ -1,83 +1,82 @@
use bevy::prelude::*;
use bevy_ecs_tilemap::prelude::*;
use rand::{thread_rng, Rng};
use bevy_ecs_tilemap::{
map::{
Tilemap2dGridSize, Tilemap2dSize, Tilemap2dTextureSize, Tilemap2dTileSize, TilemapId,
TilemapTexture,
},
tiles::{Tile2dStorage, TileTexture},
Tilemap2dPlugin, TilemapBundle,
};

mod helpers;

fn startup(mut commands: Commands, asset_server: Res<AssetServer>, mut map_query: MapQuery) {
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn_bundle(OrthographicCameraBundle::new_2d());

let texture_handle = asset_server.load("tiles.png");
let texture_handle: Handle<Image> = asset_server.load("tiles.png");

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

let map_settings = LayerSettings::new(
MapSize(2, 2),
ChunkSize(8, 8),
TileSize(16.0, 16.0),
TextureSize(96.0, 16.0),
);

// Layer 0
let (mut layer_0, layer_0_entity) =
LayerBuilder::new(&mut commands, map_settings.clone(), 0u16, 0u16);

// Required to keep track of layers for a map internally.
map.add_layer(&mut commands, 0u16, layer_0_entity);

layer_0.set_all(TileBundle::default());

map_query.build_layer(&mut commands, layer_0, texture_handle.clone());

// Make 2 layers on "top" of the base map.
for z in 0..2 {
let (mut layer_builder, layer_entity) =
LayerBuilder::new(&mut commands, map_settings.clone(), 0u16, z + 1);

let mut random = thread_rng();
// Layer 1
let mut tile_storage = Tile2dStorage::empty(tilemap_size);
let tilemap_entity = commands.spawn().id();

for _ in 0..100 {
let position = TilePos(random.gen_range(0..16), random.gen_range(0..16));
// Ignore errors for demo sake.
let _ = layer_builder.set_tile(
position,
TileBundle {
tile: Tile {
texture_index: z + 1,
..Default::default()
},
..Default::default()
},
);
}

map_query.build_layer(&mut commands, layer_builder, texture_handle.clone());
bevy_ecs_tilemap::helpers::fill_tilemap(
TileTexture(0),
tilemap_size,
TilemapId(tilemap_entity),
&mut commands,
&mut tile_storage,
);

// Required to keep track of layers for a map internally.
map.add_layer(&mut commands, z + 1, layer_entity);
}
commands
.entity(tilemap_entity)
.insert_bundle(TilemapBundle {
grid_size: Tilemap2dGridSize { x: 16.0, y: 16.0 },
size: tilemap_size,
storage: tile_storage,
texture_size: Tilemap2dTextureSize { x: 96.0, y: 16.0 },
texture: TilemapTexture(texture_handle.clone()),
tile_size: Tilemap2dTileSize { x: 16.0, y: 16.0 },
..Default::default()
});

// Layer 2
let mut tile_storage = Tile2dStorage::empty(tilemap_size);
let tilemap_entity = commands.spawn().id();

bevy_ecs_tilemap::helpers::fill_tilemap(
TileTexture(2),
tilemap_size,
TilemapId(tilemap_entity),
&mut commands,
&mut tile_storage,
);

// Spawn Map
// Required in order to use map_query to retrieve layers/tiles.
commands
.entity(map_entity)
.insert(map)
.insert(Transform::from_xyz(-128.0, -128.0, 0.0))
.insert(GlobalTransform::default());
.entity(tilemap_entity)
.insert_bundle(TilemapBundle {
grid_size: Tilemap2dGridSize { x: 16.0, y: 16.0 },
size: tilemap_size,
storage: tile_storage,
texture_size: Tilemap2dTextureSize { x: 96.0, y: 16.0 },
texture: TilemapTexture(texture_handle),
tile_size: Tilemap2dTileSize { x: 16.0, y: 16.0 },
transform: Transform::from_xyz(32.0, 32.0, 1.0),
..Default::default()
});
}

fn main() {
App::new()
.insert_resource(WindowDescriptor {
width: 1270.0,
height: 720.0,
title: String::from("Layed Map Example"),
title: String::from("Layers Example"),
..Default::default()
})
.add_plugins(DefaultPlugins)
.add_plugin(TilemapPlugin)
.add_plugin(Tilemap2dPlugin)
.add_startup_system(startup)
.add_system(helpers::camera::movement)
.add_system(helpers::texture::set_texture_filters_to_nearest)
Expand Down
Loading

0 comments on commit a39178a

Please sign in to comment.