Compare commits

...

2 Commits

Author SHA1 Message Date
0554e2dded Merge branch 'main' into avian 2024-10-06 11:35:53 -05:00
c9c45b2569 Remove state configuration from plugins. 2024-10-06 10:42:25 -05:00
3 changed files with 13 additions and 58 deletions

View File

@ -701,6 +701,7 @@ impl PluginGroup for CorePlugins {
PluginGroupBuilder::start::<Self>() PluginGroupBuilder::start::<Self>()
.add(crate::bevy_tts::TtsPlugin) .add(crate::bevy_tts::TtsPlugin)
.add(crate::bevy_synthizer::SynthizerPlugin::default()) .add(crate::bevy_synthizer::SynthizerPlugin::default())
.add(crate::navigation::NavigationPlugin::default())
.add(CorePlugin::default()) .add(CorePlugin::default())
} }
} }

View File

@ -376,27 +376,8 @@ fn cancel_on_navigate(
} }
} }
fn cleanup(
mut commands: Commands,
explorers: Query<Entity, With<Exploring>>,
focus: Query<Entity, With<ExplorationFocused>>,
) {
for entity in &explorers {
commands.entity(entity).remove::<Exploring>();
}
for entity in &focus {
commands.entity(entity).remove::<ExplorationFocused>();
}
}
#[derive(Resource, Clone, Debug, Default)]
struct ExplorationConfig<State> {
states: Vec<State>,
}
#[derive(Resource, Clone, Default)] #[derive(Resource, Clone, Default)]
pub struct ExplorationPlugin<ExplorationType, State, MapData> { pub struct ExplorationPlugin<ExplorationType, MapData> {
pub states: Vec<State>,
pub exploration_type: PhantomData<ExplorationType>, pub exploration_type: PhantomData<ExplorationType>,
pub map_data: PhantomData<MapData>, pub map_data: PhantomData<MapData>,
} }
@ -404,18 +385,13 @@ pub struct ExplorationPlugin<ExplorationType, State, MapData> {
#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)] #[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)]
pub struct Exploration; pub struct Exploration;
impl<ExplorationType, State, MapData> Plugin for ExplorationPlugin<ExplorationType, State, MapData> impl<ExplorationType, MapData> Plugin for ExplorationPlugin<ExplorationType, MapData>
where where
ExplorationType: 'static + Component + Default + Copy + Ord + PartialEq + Into<String>, ExplorationType: 'static + Component + Default + Copy + Ord + PartialEq + Into<String>,
State: States,
MapData: 'static + Clone + Default + Send + Sync, MapData: 'static + Clone + Default + Send + Sync,
{ {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
let config = ExplorationConfig { app.register_type::<ExplorationFocused>()
states: self.states.clone(),
};
app.insert_resource(config.clone())
.register_type::<ExplorationFocused>()
.register_type::<Mappable>() .register_type::<Mappable>()
.register_type::<Explorable>() .register_type::<Explorable>()
.add_plugins(InputManagerPlugin::<ExplorationAction>::default()) .add_plugins(InputManagerPlugin::<ExplorationAction>::default())
@ -443,12 +419,5 @@ where
FixedUpdate, FixedUpdate,
(navigate_to_explored::<MapData>, cancel_on_navigate).in_set(Exploration), (navigate_to_explored::<MapData>, cancel_on_navigate).in_set(Exploration),
); );
if !config.states.is_empty() {
let states = config.states;
for state in states {
app.configure_sets(FixedUpdate, Exploration.run_if(in_state(state.clone())))
.add_systems(OnExit(state), cleanup);
}
}
} }
} }

View File

@ -312,15 +312,13 @@ fn add_speed(
} }
} }
fn log_zone_descriptions<State>( fn log_zone_descriptions(
mut events: EventReader<Collision>, mut events: EventReader<Collision>,
zones: Query<(&ColliderAabb, Option<&Name>), With<Zone>>, zones: Query<(&ColliderAabb, Option<&Name>), With<Zone>>,
players: Query<&Player>, players: Query<&Player>,
config: Res<NavigationPlugin<State>>, config: Res<NavigationPlugin>,
mut log: Query<&mut Log>, mut log: Query<&mut Log>,
) where ) {
State: 'static + Send + Sync,
{
if !config.log_area_descriptions { if !config.log_area_descriptions {
return; return;
} }
@ -361,29 +359,24 @@ fn log_zone_descriptions<State>(
pub struct Movement; pub struct Movement;
#[derive(Resource, Clone, Debug)] #[derive(Resource, Clone, Debug)]
pub struct NavigationPlugin<State> { pub struct NavigationPlugin {
pub states: Vec<State>,
pub describe_undescribed_areas: bool, pub describe_undescribed_areas: bool,
pub log_area_descriptions: bool, pub log_area_descriptions: bool,
} }
impl<State> Default for NavigationPlugin<State> { impl Default for NavigationPlugin {
fn default() -> Self { fn default() -> Self {
Self { Self {
states: vec![],
describe_undescribed_areas: false, describe_undescribed_areas: false,
log_area_descriptions: true, log_area_descriptions: true,
} }
} }
} }
impl<State> Plugin for NavigationPlugin<State> impl Plugin for NavigationPlugin {
where
State: States,
{
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.insert_resource(self.clone()); app.insert_resource(self.clone())
app.init_resource::<SnapTimers>() .init_resource::<SnapTimers>()
.register_type::<BackwardMovementFactor>() .register_type::<BackwardMovementFactor>()
.register_type::<ForwardMovementFactor>() .register_type::<ForwardMovementFactor>()
.register_type::<StrafeMovementFactor>() .register_type::<StrafeMovementFactor>()
@ -401,14 +394,6 @@ where
FixedUpdate, FixedUpdate,
(tick_snap_timers, speak_direction.pipe(error_handler)), (tick_snap_timers, speak_direction.pipe(error_handler)),
) )
.add_systems( .add_systems(PostUpdate, (remove_direction, log_zone_descriptions));
PostUpdate,
(remove_direction, log_zone_descriptions::<State>),
);
if !self.states.is_empty() {
for state in &self.states {
app.configure_sets(Update, Movement.run_if(in_state(state.clone())));
}
}
} }
} }