From cafe376841a3d29eeca9b456ae441e7c02d6340c Mon Sep 17 00:00:00 2001 From: popertots Date: Sun, 22 Mar 2026 00:43:03 +0000 Subject: [PATCH] Plugin cleanup --- src/entities/cargo/mod.rs | 2 ++ src/entities/shared_systems/pathfinding.rs | 6 ++--- src/entities/tasks/mod.rs | 2 ++ src/main.rs | 30 ++++++++++------------ src/plugins/cargo.rs | 20 +++++++++++++++ src/plugins/entities.rs | 15 +++++++++++ src/plugins/mod.rs | 11 ++++++++ src/plugins/tasks.rs | 27 +++++++++++++++++++ 8 files changed, 93 insertions(+), 20 deletions(-) create mode 100644 src/plugins/cargo.rs create mode 100644 src/plugins/entities.rs create mode 100644 src/plugins/mod.rs create mode 100644 src/plugins/tasks.rs diff --git a/src/entities/cargo/mod.rs b/src/entities/cargo/mod.rs index 1f17ca9..beaffa5 100644 --- a/src/entities/cargo/mod.rs +++ b/src/entities/cargo/mod.rs @@ -4,3 +4,5 @@ pub mod systems; pub use crate::world::tiles::tilemap::CargoPlaceError; pub use components::{Cargo, CarryVisualState, HaulSlot, Haulable}; pub use systems::{any_hauling, carry_visual_system, haul_encumbrance_system}; + +pub use crate::plugins::cargo::CargoPlugin; diff --git a/src/entities/shared_systems/pathfinding.rs b/src/entities/shared_systems/pathfinding.rs index 7dd8a1e..bba8f84 100644 --- a/src/entities/shared_systems/pathfinding.rs +++ b/src/entities/shared_systems/pathfinding.rs @@ -63,7 +63,7 @@ use crate::constants::{ ITILE_SIZE, PATHFINDER_HIERARCHICAL_THRESHOLD_CHUNKS, PATHFINDER_MAX_NODES, PATHFINDER_PROVISIONAL_NODE_LIMIT, PIXEL_RATIO, TILE_SIZE, }; -use crate::entities::cargo::haul_encumbrance_system; + use crate::entities::item::inventory::{update_encumbrance, InventoryChangedEvent}; use crate::entities::shared_systems::constants::{ CONVOY_DOT_THRESHOLD, ES_DIRECTION_THRESHOLD, HEAD_ON_DOT_THRESHOLD, OCCUPANCY_CROWD_THRESHOLD, @@ -71,7 +71,7 @@ use crate::entities::shared_systems::constants::{ WALK_SPEED_DIVISOR, }; use crate::entities::shared_systems::occupancy::{rebuild_tile_occupancy, TileOccupancy}; -use crate::entities::tasks::task_executor_system; + use crate::world::tiles::tile_changed::{PathfindingDirtyChunks, TileChangedEvent}; use crate::world::tiles::TileMap; use crate::world::{ @@ -232,7 +232,6 @@ impl Plugin for PathfindingPlugin { FixedUpdate, ( rebuild_tile_occupancy, - haul_encumbrance_system, update_encumbrance, collect_pathfinding_dirty_chunks, invalidate_paths_on_tile_change, @@ -240,7 +239,6 @@ impl Plugin for PathfindingPlugin { // DEPRECATED: Wandering now handled by Task::Idle in task executor update_wandering_targets, movement, - task_executor_system, ) .chain(), ) diff --git a/src/entities/tasks/mod.rs b/src/entities/tasks/mod.rs index b9c0277..8d622f9 100644 --- a/src/entities/tasks/mod.rs +++ b/src/entities/tasks/mod.rs @@ -6,3 +6,5 @@ pub mod idle; pub use components::{Task, TaskQueue, TaskState}; pub use events::{TaskBlocked, TaskClaimed, TaskCompleted, TaskDropped, TaskFailed}; pub use executor::task_executor_system; + +pub use crate::plugins::tasks::TasksPlugin; diff --git a/src/main.rs b/src/main.rs index bb518ac..eb555b2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,14 +1,12 @@ use bevy::prelude::*; use bevy_rand::prelude::*; -use crate::entities::{ - cargo::carry_visual_system, - cargo::any_hauling, - item::{initialize_item_rotation_state, item_tile_management_system, ItemRotationTimer}, - shared_systems::digging::dig_system, - tasks::{TaskClaimed, TaskCompleted, TaskFailed, TaskDropped, TaskBlocked}, +use crate::entities::item::{ + initialize_item_rotation_state, item_tile_management_system, ItemRotationTimer, }; use crate::game::SpawnDelay; +use crate::plugins::{CargoPlugin, TasksPlugin, EntitiesPlugin}; +use crate::world::WorldPlugin; mod camera; mod config; @@ -17,6 +15,7 @@ mod cursor; mod debug; mod entities; mod game; +mod plugins; mod system_info; mod world; @@ -46,13 +45,13 @@ fn main() { (constants::SEED as u64).to_le_bytes(), )) .insert_resource(ClearColor(Color::srgb(0., 0., 0.))) - .add_plugins(world::WorldPlugin) - .add_plugins(entities::pathfinding::PathfindingPlugin) - .add_message::() - .add_message::() - .add_message::() - .add_message::() - .add_message::() + .add_plugins(( + WorldPlugin, + EntitiesPlugin, + CargoPlugin, + TasksPlugin, + entities::pathfinding::PathfindingPlugin, + )) .add_systems( Startup, (camera::spawn_panning_camera, cursor::setup_cursor), @@ -67,7 +66,7 @@ fn main() { entities::sentient::dorf::spawn_dorfs, entities::livestock::pig::spawn_pigs, entities::livestock::rabbit::spawn_rabbits, - dig_system, + entities::shared_systems::digging::dig_system, ), ) @@ -78,6 +77,5 @@ fn main() { item_tile_management_system.after(initialize_item_rotation_state), ) .add_systems(Update, debug::entity_dump::dump_entity_positions) - .add_systems(Update, carry_visual_system.run_if(any_hauling)) .run(); -} +} \ No newline at end of file diff --git a/src/plugins/cargo.rs b/src/plugins/cargo.rs new file mode 100644 index 0000000..e517268 --- /dev/null +++ b/src/plugins/cargo.rs @@ -0,0 +1,20 @@ +//! CargoPlugin — registers cargo/haul systems and events. +//! +//! Systems: +//! - haul_encumbrance_system (FixedUpdate, before update_encumbrance) +//! - carry_visual_system (Update, run_if any_hauling) + +use crate::entities::cargo::{any_hauling, carry_visual_system, haul_encumbrance_system}; +use bevy::prelude::*; + +pub struct CargoPlugin; + +impl Plugin for CargoPlugin { + fn build(&self, app: &mut App) { + app.add_systems( + FixedUpdate, + haul_encumbrance_system.before(crate::entities::item::inventory::update_encumbrance), + ) + .add_systems(Update, carry_visual_system.run_if(any_hauling)); + } +} diff --git a/src/plugins/entities.rs b/src/plugins/entities.rs new file mode 100644 index 0000000..caeca69 --- /dev/null +++ b/src/plugins/entities.rs @@ -0,0 +1,15 @@ +//! EntitiesPlugin — aggregates entity-type plugins for clean composition. +//! +//! This is a meta-plugin that adds sub-plugins for each entity category. +//! Keeps main.rs from needing to know about every entity submodule. + +use bevy::prelude::*; + +pub struct EntitiesPlugin; + +impl Plugin for EntitiesPlugin { + fn build(&self, app: &mut App) { + // Placeholder — entity bundles are added at spawn time via component bundles. + // Future: add SentientPlugin, LivestockPlugin, ItemPlugin as they're created. + } +} diff --git a/src/plugins/mod.rs b/src/plugins/mod.rs new file mode 100644 index 0000000..c133269 --- /dev/null +++ b/src/plugins/mod.rs @@ -0,0 +1,11 @@ +//! Plugin composition layer — re-exports all game plugins. +//! +//! main.rs should only import from this module, not reach into src/entities/*. + +pub mod cargo; +pub mod tasks; +pub mod entities; + +pub use cargo::CargoPlugin; +pub use tasks::TasksPlugin; +pub use entities::EntitiesPlugin; \ No newline at end of file diff --git a/src/plugins/tasks.rs b/src/plugins/tasks.rs new file mode 100644 index 0000000..9380df8 --- /dev/null +++ b/src/plugins/tasks.rs @@ -0,0 +1,27 @@ +//! TasksPlugin — registers task infrastructure: executor, events, idle logic. +//! +//! Systems: +//! - task_executor_system (FixedUpdate, after pathfinding movement setup) + +use crate::entities::tasks::{ + task_executor_system, TaskBlocked, TaskClaimed, TaskCompleted, TaskDropped, TaskFailed, +}; +use bevy::prelude::*; + +pub struct TasksPlugin; + +impl Plugin for TasksPlugin { + fn build(&self, app: &mut App) { + app.add_message::() + .add_message::() + .add_message::() + .add_message::() + .add_message::() + .add_systems( + FixedUpdate, + task_executor_system + .after(crate::entities::shared_systems::pathfinding::prepare_paths) + .before(crate::entities::shared_systems::pathfinding::movement), + ); + } +}