units testing
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user