public void RenderGraph(Graph <VertexInfo, EdgeInfo> graph, bool panIntoView, SimulationHistoryStep step = null) { if (!_initialized) { Initialize(); } ClearMap(); // Add markers for each vertex foreach (var vertex in graph.Vertices) { _vertices.Add(new Circle() { Position = new BlazorLeaflet.Models.LatLng((float)vertex.Info.Position.Item1, (float)vertex.Info.Position.Item2), Radius = 1f, StrokeColor = vertex.Info.Type switch { VertexType.Target => Color.Red, VertexType.Base => Color.Green, VertexType.Both => Color.Yellow },
/// <summary> /// Record the current state of the simulation for analysis purposes /// </summary> private void RecordSimulationStep() { var simHistoryStep = new SimulationHistoryStep() { SimulationStep = SimulationStep, Vehicles = new List <VehicleStepState>(), OpenOrders = new List <HistoryOrder>(), ClosedOrders = new List <HistoryCompletedOrder>() }; foreach (var vehicle in Vehicles) { if (vehicle != null) { var vehicleState = new VehicleStepState(vehicle.Vehicle) { State = vehicle.State, PathToTarget = vehicle.PathToTarget?.Select(p => p.Info.Name).ToList(), CurrentVertexPosition = vehicle.CurrentVertexPosition?.Info?.Name, CurrentTarget = vehicle.CurrentTarget?.Info?.Name, CurrentOrders = new List <HistoryCompletedOrder>(vehicle.CurrentOrders?.Select(o => new HistoryCompletedOrder(new HistoryOrder { Start = o?.Start?.Info?.Name, Target = o?.Target?.Info?.Name, PayloadWeight = o?.PayloadWeight }, o?.DeliveryTime, o?.DeliveryDistance, o?.DeliveryCost, o?.PickupTime, o?.PickupDistance, o?.PickupCost, o?.DeliveryPath?.Select(p => p.Info.Name).ToList())) ?? Array.Empty <HistoryCompletedOrder>()), DistanceToCurrentTarget = vehicle.DistanceToCurrentTarget, TimeToCurrentTarget = vehicle.TimeToCurrentTarget, DistanceTraveled = vehicle.DistanceTraveled, TotalTravelDistance = vehicle.TotalTravelDistance, TotalTravelTime = vehicle.TotalTravelTime, TotalIdleTime = vehicle.TotalIdleTime, CurrentFuelLoaded = vehicle.CurrentFuelLoaded }; simHistoryStep.Vehicles.Add(vehicleState); } } foreach (var openOrder in OpenOrders) { if (openOrder != null) { var order = new HistoryOrder() { Start = openOrder.Start?.Info.Name, Target = openOrder.Target?.Info.Name, PayloadWeight = openOrder.PayloadWeight }; simHistoryStep.OpenOrders.Add(order); } } foreach (var closedOrder in ClosedOrders) { if (closedOrder != null) { var order = new HistoryCompletedOrder(new HistoryOrder(closedOrder.Order?.Start?.Info.Name, closedOrder.Order?.Target?.Info.Name, closedOrder.Order?.PayloadWeight)) { DeliveryDistance = closedOrder.DeliveryDistance, DeliveryTime = closedOrder.DeliveryTime, DeliveryPath = closedOrder.DeliveryPath?.Select(p => p.Info.Name).ToList(), DeliveryCost = closedOrder.DeliveryCost, PickupTime = closedOrder.PickupTime, PickupDistance = closedOrder.PickupDistance, PickupCost = closedOrder.PickupCost }; simHistoryStep.ClosedOrders.Add(order); } } SimulationHistory.Steps.Add(simHistoryStep); }