47 lines
1.4 KiB
Dart
47 lines
1.4 KiB
Dart
import '../../vehicle_workspace/domain/vehicle_definition.dart';
|
|
|
|
/// An operator-created fleet unit in the local planning workspace.
|
|
///
|
|
/// It deliberately contains no received identity, platform, authority, or
|
|
/// physical pose. Those must arrive through separate reviewed bindings later.
|
|
class FleetUnit {
|
|
const FleetUnit({
|
|
required this.localUnitId,
|
|
required this.displayName,
|
|
required this.definition,
|
|
required this.localPlacement,
|
|
});
|
|
|
|
final String localUnitId;
|
|
final String displayName;
|
|
final VehicleDefinition definition;
|
|
final LocalScenePoint localPlacement;
|
|
|
|
FleetUnit copyWith({String? displayName}) => FleetUnit(
|
|
localUnitId: localUnitId,
|
|
displayName: displayName ?? this.displayName,
|
|
definition: definition,
|
|
localPlacement: localPlacement,
|
|
);
|
|
}
|
|
|
|
/// A normalized placement in the operator's local tactical scene.
|
|
///
|
|
/// This is deliberately not a geographic position, vehicle pose, or received
|
|
/// location. A future map binding will keep reported coordinates separate.
|
|
class LocalScenePoint {
|
|
const LocalScenePoint({required this.x, required this.y})
|
|
: assert(x >= 0 && x <= 1),
|
|
assert(y >= 0 && y <= 1);
|
|
|
|
final double x;
|
|
final double y;
|
|
|
|
@override
|
|
bool operator ==(Object other) =>
|
|
other is LocalScenePoint && other.x == x && other.y == y;
|
|
|
|
@override
|
|
int get hashCode => Object.hash(x, y);
|
|
}
|