Task fix attempt
This commit is contained in:
@@ -30,7 +30,7 @@ use crate::entities::cargo::{Cargo, HaulSlot, Haulable};
|
||||
use crate::entities::tasks::components::{
|
||||
ChopStep, HaulStep, Task, TaskQueue, TaskState, CHOP_TICKS_DEFAULT,
|
||||
};
|
||||
use crate::entities::tasks::events::TaskFailed;
|
||||
use crate::entities::tasks::events::{LogsSpawned, TaskFailed};
|
||||
use crate::world::chunks::ChunkMap;
|
||||
use crate::world::generation::forestry::TreePart;
|
||||
use crate::world::tiles::TileMap;
|
||||
@@ -84,6 +84,7 @@ pub fn demo_system(
|
||||
haul_slot_query: Query<&HaulSlot>,
|
||||
mut dorf_query: Query<(Entity, &mut TaskQueue, &mut TaskState, &Transform)>,
|
||||
mut task_failed: MessageReader<TaskFailed>,
|
||||
mut logs_spawned: MessageReader<LogsSpawned>,
|
||||
) {
|
||||
// Handle task failures that should reset the demo state for retry
|
||||
for event in task_failed.read() {
|
||||
@@ -98,6 +99,35 @@ pub fn demo_system(
|
||||
}
|
||||
}
|
||||
|
||||
// Handle logs spawned from felling — transition to Hauling
|
||||
// Collect events first to avoid double-mutable borrow conflict with demo_state
|
||||
let pending_logs: Vec<_> = logs_spawned.read().collect();
|
||||
for event in pending_logs {
|
||||
if let DemoState::Chopping {
|
||||
trunk_pos,
|
||||
chopper: _,
|
||||
} = *demo_state
|
||||
{
|
||||
// Look up cargo positions from the newly spawned entities
|
||||
let mut unassigned: VecDeque<(Entity, IVec3)> = VecDeque::new();
|
||||
for &log_entity in event.log_entities.iter() {
|
||||
if let Ok((_, cargo)) = cargo_query.get(log_entity) {
|
||||
unassigned.push_back((log_entity, cargo.tile_pos));
|
||||
}
|
||||
}
|
||||
info!(
|
||||
"[DEMO] → Hauling: {} logs spawned from tree at {:?}",
|
||||
unassigned.len(),
|
||||
trunk_pos
|
||||
);
|
||||
*demo_state = DemoState::Hauling {
|
||||
felled_trunk_pos: trunk_pos,
|
||||
unassigned,
|
||||
in_progress: Default::default(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
match &mut *demo_state {
|
||||
DemoState::Idle => {
|
||||
// Find the nearest standing tree to (0,0).
|
||||
@@ -345,7 +375,7 @@ pub fn demo_system(
|
||||
cargo_entity: log_entity,
|
||||
cargo_pos: log_pos,
|
||||
dest,
|
||||
step: HaulStep::MovingToCargo,
|
||||
step: HaulStep::MovingToCargo { approach: None },
|
||||
});
|
||||
*state = TaskState::Pending;
|
||||
in_progress.insert(dorf_entity);
|
||||
|
||||
Reference in New Issue
Block a user