bevy_flowfield_tiles_plugin 0.14.0

An implementation of FlowField (vector field) pathfinding as a plugin to the Bevy game engine
Documentation
//! Defines the Bevy [Plugin] for FlowfieldTiles
//!

use crate::prelude::*;
use bevy::prelude::*;

pub mod cost_layer;
pub mod flow_layer;

#[derive(SystemSet, Debug, Hash, PartialEq, Eq, Clone)]
pub enum OrderingSet {
	Tidy,
	Calculate,
}

pub struct FlowFieldTilesPlugin;

impl Plugin for FlowFieldTilesPlugin {
	#[cfg(not(tarpaulin_include))]
	fn build(&self, app: &mut App) {
		app.register_type::<Ordinal>()
			.register_type::<MapDimensions>()
			.register_type::<CostField>()
			.register_type::<Portals>()
			.register_type::<PortalGraph>()
			.register_type::<FlowField>()
			.register_type::<SectorID>()
			.register_type::<FieldCell>()
			.register_type::<RouteMetadata>()
			.register_type::<FlowFieldMetadata>()
			.add_message::<cost_layer::EventUpdateCostfieldsCell>()
			.add_message::<cost_layer::EventCleanCaches>()
			.add_message::<flow_layer::EventPathRequest>()
			.configure_sets(
				PreUpdate,
				(OrderingSet::Tidy, OrderingSet::Calculate).chain(),
			)
			.add_systems(
				PreUpdate,
				(
					(
						flow_layer::cleanup_old_routes,
						flow_layer::cleanup_old_flowfields,
						(
							cost_layer::process_costfields_updates,
							cost_layer::clean_cache,
						)
							.chain(),
					)
						.in_set(OrderingSet::Tidy),
					(
						flow_layer::event_insert_route_queue,
						flow_layer::process_route_queue,
						flow_layer::create_queued_integration_fields,
						flow_layer::create_flow_fields,
					)
						.in_set(OrderingSet::Calculate),
				),
			);
	}
}