units testing

This commit is contained in:
2024-09-10 20:41:33 -04:00
parent 805fb3feb6
commit b156a33a54
15 changed files with 254 additions and 131 deletions

View File

@@ -3,10 +3,14 @@ use bevy_asset_loader::loading_state::{
config::{ConfigureLoadingState, LoadingStateConfig},
LoadingStateAppExt,
};
use shared::states::{AssetLoadState, GameplayState};
use world_generation::states::GeneratorState;
use shared::{sets::GameplaySet, states::AssetLoadState};
use world_generation::{hex_utils::HexCoord, prelude::Map};
use crate::assets::{unit_asset::UnitAssetPlugin, unit_database::UnitDatabase};
use crate::{
assets::{unit_asset::UnitAssetPlugin, unit_database::UnitDatabase},
components::{Target, Unit},
units_debug_plugin::UnitsDebugPlugin,
};
pub struct UnitsPlugin;
@@ -14,20 +18,16 @@ impl Plugin for UnitsPlugin {
fn build(&self, app: &mut App) {
app.add_plugins(UnitAssetPlugin);
app.configure_loading_state(LoadingStateConfig::new(AssetLoadState::Loading).load_collection::<UnitDatabase>());
#[cfg(debug_assertions)]
app.add_plugins(UnitsDebugPlugin);
app.add_systems(Update, units_control.in_set(UnitUpdateSet));
// app.configure_loading_state(LoadingStateConfig::new(AssetLoadState::Loading).load_collection::<UnitDatabase>());
app.configure_sets(
Update,
UnitUpdateSet.run_if(in_state(GameplayState::Playing).and_then(in_state(GeneratorState::Idle))),
);
app.add_systems(Update, units_control.in_set(GameplaySet));
app.add_systems(Update, move_unit.in_set(GameplaySet));
}
}
#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
struct UnitUpdateSet;
fn units_control(input: Res<ButtonInput<KeyCode>>, window: Query<&Window, With<PrimaryWindow>>) {
let win = window.single();
@@ -35,3 +35,14 @@ fn units_control(input: Res<ButtonInput<KeyCode>>, window: Query<&Window, With<P
return;
};
}
fn move_unit(mut units: Query<(&mut Transform, &Target), With<Unit>>, time: Res<Time>, map: Res<Map>) {
for (mut t, target) in units.iter_mut() {
let vel = (target.0 - t.translation).normalize() * 10.0 * time.delta_seconds();
t.translation += vel;
let coord = HexCoord::from_world_pos(t.translation);
if map.is_in_bounds(&coord) {
t.translation.y = map.sample_height(&coord);
}
}
}