use crate::grid::cell::CellID;
use crate::maneuver::LaneChangeType;
use std::fmt;
#[derive(Debug, Default, Clone, PartialEq)]
pub struct VehicleIntention {
pub intention_maneuver: LaneChangeType,
pub intention_speed: i32,
pub destination: Option<CellID>,
pub confusion: Option<bool>,
pub intention_cell_id: CellID,
pub tail_intention_cells: Vec<CellID>,
pub intermediate_cells: Vec<CellID>,
pub tail_maneuver: TailIntentionManeuver,
pub should_stop: bool,
}
impl fmt::Display for VehicleIntention {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"VehicleIntention {{ intention_maneuver: {:?}, intention_speed: {}, destination: {:?}, confusion: {:?}, intention_cell_id: {}, tail_intention_cells: {:?}, intermediate_cells: {:?}, tail_maneuver: {:?}, should_stop: {} }}",
self.intention_maneuver,
self.intention_speed,
self.destination,
self.confusion,
self.intention_cell_id,
self.tail_intention_cells,
self.intermediate_cells,
self.tail_maneuver,
self.should_stop
)
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct TailIntentionManeuver {
pub source_cell_maneuver: CellID,
pub target_cell_maneuver: CellID,
pub intention_maneuver: LaneChangeType,
}
impl Default for TailIntentionManeuver {
fn default() -> TailIntentionManeuver {
TailIntentionManeuver {
source_cell_maneuver: -1,
target_cell_maneuver: -1,
intention_maneuver: LaneChangeType::Undefined,
}
}
}