use avian2d::prelude::*;
use bevy::prelude::*;
use bevy_ecs_tiled::prelude::*;
mod helper;
fn main() {
App::new()
.add_plugins(DefaultPlugins.build().set(ImagePlugin::default_nearest()))
.add_plugins(TiledPlugin::default())
.add_plugins(helper::HelperPlugin)
.add_plugins(TiledPhysicsPlugin::<TiledPhysicsAvianBackend>::default())
.add_plugins(PhysicsPlugins::default().with_length_unit(100.0))
.add_plugins(PhysicsDebugPlugin::default())
.add_systems(Startup, startup)
.add_systems(Update, switch_map)
.run();
}
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn(Camera2d);
let default_callback: helper::assets::MapInfosCallback = |c| {
c.insert((
TilemapAnchor::Center,
TilemapRenderSettings {
render_chunk_size: UVec2::new(64, 1),
y_sort: true,
},
));
};
let mut mgr = helper::assets::AssetsManager::new(&mut commands);
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/orthogonal/finite.tmx",
"A finite orthogonal map",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/orthogonal/infinite.tmx",
"An infinite orthogonal map",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/hexagonal/finite_flat_top_even.tmx",
"A finite flat-top (stagger axis = X) hexagonal map with 'even' stagger index",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/hexagonal/finite_flat_top_odd.tmx",
"A finite flat-top (stagger axis = X) hexagonal map with 'odd' stagger index",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/hexagonal/finite_pointy_top_even.tmx",
"A finite pointy-top (stagger axis = Y) hexagonal map with 'even' stagger index",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/hexagonal/finite_pointy_top_odd.tmx",
"A finite pointy-top (stagger axis = Y) hexagonal map with 'odd' stagger index",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/hexagonal/infinite_flat_top_even.tmx",
"An infinite flat-top (stagger axis = X) hexagonal map with 'even' stagger index",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/hexagonal/infinite_flat_top_odd.tmx",
"An infinite flat-top (stagger axis = X) hexagonal map with 'odd' stagger index",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/hexagonal/infinite_pointy_top_even.tmx",
"An infinite pointy-top (stagger axis = Y) hexagonal map with 'even' stagger index",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/hexagonal/infinite_pointy_top_odd.tmx",
"An infinite pointy-top (stagger axis = Y) hexagonal map with 'odd' stagger index",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/isometric/finite_diamond.tmx",
"A finite 'diamond' isometric map",
default_callback,
));
mgr.add_map(helper::assets::MapInfos::new(
&asset_server,
"maps/isometric/infinite_diamond.tmx",
"An infinite 'diamond' isometric map",
default_callback,
));
commands.insert_resource(mgr);
}
fn switch_map(
mut commands: Commands,
keyboard_input: Res<ButtonInput<KeyCode>>,
mut mgr: ResMut<helper::assets::AssetsManager>,
) {
if keyboard_input.just_pressed(KeyCode::Space) {
mgr.cycle_map(&mut commands);
}
}