use bevy::prelude::*;
use bevy_ecs_tiled::prelude::*;
mod helper;
const STEP_SIZE: u32 = 8;
fn main() {
App::new()
.add_plugins(DefaultPlugins.build().set(ImagePlugin::default_nearest()))
.add_plugins(TiledPlugin::default())
.add_plugins(helper::HelperPlugin)
.add_plugins(TiledDebugPluginGroup)
.add_systems(Startup, startup)
.add_systems(Update, (input, text_update_system))
.run();
}
#[derive(Component, Debug)]
struct HelperText;
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn(Camera2d);
commands.spawn((
TiledWorld(asset_server.load("worlds/orthogonal.world")),
TilemapAnchor::Center,
TiledWorldChunking::new(200., 200.),
));
commands
.spawn((
Text::new("[+/-] Chunking: "),
TextFont {
font_size: 24.,
..default()
},
))
.with_child((
TextSpan::default(),
TextFont {
font_size: 24.,
..default()
},
HelperText,
));
}
fn input(mut chunking: Query<&mut TiledWorldChunking>, keys: Res<ButtonInput<KeyCode>>) {
let Ok(mut chunking) = chunking.single_mut() else {
return;
};
if keys.pressed(KeyCode::Minus) {
if let Some(c) = chunking.0 {
if (c.x - STEP_SIZE as f32) > 0. {
*chunking = TiledWorldChunking::new(c.x - STEP_SIZE as f32, c.y - STEP_SIZE as f32);
}
}
}
if keys.pressed(KeyCode::Equal) {
if let Some(c) = chunking.0 {
if c.x < f32::MAX - STEP_SIZE as f32 {
*chunking = TiledWorldChunking::new(c.x + STEP_SIZE as f32, c.y + STEP_SIZE as f32);
}
}
}
}
fn text_update_system(
chunking: Query<&TiledWorldChunking>,
mut query: Query<&mut TextSpan, With<HelperText>>,
) {
let Ok(chunking) = chunking.single() else {
return;
};
for mut span in &mut query {
span.0 = chunking.0.map_or(String::from("None"), |chunking| {
format!("{}x{}", chunking.x, chunking.y)
});
}
}