multimodalsim-viewer 0.0.2__py3-none-any.whl → 0.1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. multimodalsim_viewer/common/environments/.env +2 -0
  2. multimodalsim_viewer/common/utils.py +11 -48
  3. multimodalsim_viewer/models/__init__.py +0 -0
  4. multimodalsim_viewer/models/environment.py +70 -0
  5. multimodalsim_viewer/models/leg.py +194 -0
  6. multimodalsim_viewer/models/passenger.py +148 -0
  7. multimodalsim_viewer/models/serializable.py +43 -0
  8. multimodalsim_viewer/models/simulation_information.py +84 -0
  9. multimodalsim_viewer/models/state.py +44 -0
  10. multimodalsim_viewer/models/stop.py +114 -0
  11. multimodalsim_viewer/models/update.py +616 -0
  12. multimodalsim_viewer/models/vehicle.py +151 -0
  13. multimodalsim_viewer/server/{simulation_visualization_data_collector.py → data_collector.py} +185 -198
  14. multimodalsim_viewer/server/data_manager.py +567 -0
  15. multimodalsim_viewer/server/http_routes.py +4 -7
  16. multimodalsim_viewer/server/log_manager.py +2 -2
  17. multimodalsim_viewer/server/server.py +8 -10
  18. multimodalsim_viewer/server/simulation.py +4 -5
  19. multimodalsim_viewer/server/simulation_manager.py +22 -23
  20. multimodalsim_viewer/ui/static/chunk-BQ2VC5TN.js +7 -0
  21. multimodalsim_viewer/ui/static/{chunk-IGIP6IOU.js → chunk-RHGMGEGM.js} +1 -1
  22. multimodalsim_viewer/ui/static/environment.json +2 -0
  23. multimodalsim_viewer/ui/static/images/undefined-texture.png +0 -0
  24. multimodalsim_viewer/ui/static/images/zoomed-out-stop.png +0 -0
  25. multimodalsim_viewer/ui/static/index.html +2 -2
  26. multimodalsim_viewer/ui/static/main-EAYQBWLP.js +3648 -0
  27. multimodalsim_viewer/ui/static/scripts/load-environment.script.js +1 -1
  28. multimodalsim_viewer/ui/static/styles-257KETL3.css +1 -0
  29. {multimodalsim_viewer-0.0.2.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/METADATA +6 -12
  30. multimodalsim_viewer-0.1.0.0.dist-info/RECORD +53 -0
  31. multimodalsim_viewer/server/simulation_visualization_data_model.py +0 -1552
  32. multimodalsim_viewer/ui/static/chunk-6VAXIXEZ.js +0 -7
  33. multimodalsim_viewer/ui/static/main-FGMGJ32M.js +0 -3648
  34. multimodalsim_viewer/ui/static/styles-KU7LTPET.css +0 -1
  35. multimodalsim_viewer-0.0.2.dist-info/RECORD +0 -41
  36. /multimodalsim_viewer/ui/static/images/{sample-wait.png → passenger.png} +0 -0
  37. /multimodalsim_viewer/ui/static/images/{sample-stop.png → stop.png} +0 -0
  38. /multimodalsim_viewer/ui/static/images/{sample-bus.png → vehicle.png} +0 -0
  39. /multimodalsim_viewer/ui/static/images/{zoom-out-passenger.png → zoomed-out-passenger.png} +0 -0
  40. /multimodalsim_viewer/ui/static/images/{zoom-out-vehicle.png → zoomed-out-vehicle.png} +0 -0
  41. {multimodalsim_viewer-0.0.2.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/WHEEL +0 -0
  42. {multimodalsim_viewer-0.0.2.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/entry_points.txt +0 -0
  43. {multimodalsim_viewer-0.0.2.dist-info → multimodalsim_viewer-0.1.0.0.dist-info}/top_level.txt +0 -0
@@ -35,27 +35,23 @@ from socketio import Client
35
35
 
36
36
  from multimodalsim_viewer.common.utils import (
37
37
  HOST,
38
+ NUMBER_OF_UPDATES_BETWEEN_STATES,
38
39
  SERVER_PORT,
39
- STATE_SAVE_STEP,
40
40
  SimulationStatus,
41
41
  build_simulation_id,
42
42
  )
43
- from multimodalsim_viewer.server.log_manager import register_log
44
- from multimodalsim_viewer.server.simulation_visualization_data_model import (
45
- PassengerLegsUpdate,
46
- PassengerStatusUpdate,
47
- SimulationInformation,
48
- SimulationVisualizationDataManager,
49
- StatisticUpdate,
43
+ from multimodalsim_viewer.models.environment import VisualizedEnvironment
44
+ from multimodalsim_viewer.models.passenger import VisualizedPassenger
45
+ from multimodalsim_viewer.models.simulation_information import SimulationInformation
46
+ from multimodalsim_viewer.models.stop import VisualizedStop
47
+ from multimodalsim_viewer.models.update import (
48
+ PassengerUpdate,
49
+ StatisticsUpdate,
50
50
  Update,
51
- UpdateType,
52
- VehicleStatusUpdate,
53
- VehicleStopsUpdate,
54
- VisualizedEnvironment,
55
- VisualizedPassenger,
56
- VisualizedStop,
57
- VisualizedVehicle,
51
+ VehicleUpdate,
58
52
  )
53
+ from multimodalsim_viewer.models.vehicle import VisualizedVehicle
54
+ from multimodalsim_viewer.server.data_manager import SimulationVisualizationDataManager
59
55
 
60
56
 
61
57
  # MARK: Data Collector
@@ -255,11 +251,7 @@ class SimulationVisualizationDataCollector(DataCollector): # pylint: disable=to
255
251
  if current_event is None:
256
252
  return
257
253
 
258
- message = self.process_event(current_event, env)
259
- register_log(self.simulation_id, message)
260
-
261
- if self.is_connected:
262
- self.sio.emit("log", (self.simulation_id, message))
254
+ self.process_event(current_event, env)
263
255
 
264
256
  if (
265
257
  self.last_statistics_update_time is None
@@ -267,10 +259,12 @@ class SimulationVisualizationDataCollector(DataCollector): # pylint: disable=to
267
259
  ):
268
260
  self.last_statistics_update_time = current_event.time
269
261
  self.add_update(
270
- Update(
271
- UpdateType.UPDATE_STATISTIC,
272
- StatisticUpdate(self.data_analyzer.get_statistics()),
262
+ StatisticsUpdate(
263
+ self.update_counter,
264
+ event_index if event_index is not None else -1,
265
+ current_event.name,
273
266
  current_event.time,
267
+ self.data_analyzer.get_statistics(),
274
268
  ),
275
269
  env,
276
270
  )
@@ -279,8 +273,8 @@ class SimulationVisualizationDataCollector(DataCollector): # pylint: disable=to
279
273
  def add_update( # pylint: disable=too-many-branches, too-many-statements
280
274
  self, update: Update, environment: Environment
281
275
  ) -> None:
282
- update.order = self.update_counter
283
- self.visualized_environment.order = self.update_counter
276
+ update.update_index = self.update_counter
277
+ self.visualized_environment.update_index = self.update_counter
284
278
 
285
279
  if self.update_counter == 0:
286
280
  # Add the simulation start time to the simulation information
@@ -327,41 +321,17 @@ class SimulationVisualizationDataCollector(DataCollector): # pylint: disable=to
327
321
  self.visualized_environment.estimated_end_time = estimated_end_time
328
322
 
329
323
  # Save the state of the simulation every SAVE_STATE_STEP events before applying the update
330
- if self.update_counter % STATE_SAVE_STEP == 0:
324
+ if self.update_counter % NUMBER_OF_UPDATES_BETWEEN_STATES == 0:
331
325
  self.current_save_file_path = SimulationVisualizationDataManager.save_state(
332
326
  self.simulation_id, self.visualized_environment
333
327
  )
334
328
 
335
- if update.update_type == UpdateType.CREATE_PASSENGER:
336
- self.visualized_environment.add_passenger(update.data)
337
- elif update.update_type == UpdateType.CREATE_VEHICLE:
338
- self.visualized_environment.add_vehicle(update.data)
339
- data: VisualizedVehicle = update.data
340
- if data.polylines is not None:
341
- self.update_polylines_if_needed(data)
342
- elif update.update_type == UpdateType.UPDATE_PASSENGER_STATUS:
343
- passenger = self.visualized_environment.get_passenger(update.data.passenger_id)
344
- passenger.status = update.data.status
345
- elif update.update_type == UpdateType.UPDATE_PASSENGER_LEGS:
346
- passenger = self.visualized_environment.get_passenger(update.data.passenger_id)
347
- legs_update: PassengerLegsUpdate = update.data
348
- passenger.previous_legs = legs_update.previous_legs
349
- passenger.next_legs = legs_update.next_legs
350
- passenger.current_leg = legs_update.current_leg
351
- elif update.update_type == UpdateType.UPDATE_VEHICLE_STATUS:
352
- vehicle = self.visualized_environment.get_vehicle(update.data.vehicle_id)
353
- vehicle.status = update.data.status
354
- elif update.update_type == UpdateType.UPDATE_VEHICLE_STOPS:
355
- vehicle = self.visualized_environment.get_vehicle(update.data.vehicle_id)
356
- stops_update: VehicleStopsUpdate = update.data
357
- vehicle.previous_stops = stops_update.previous_stops
358
- vehicle.next_stops = stops_update.next_stops
359
- vehicle.current_stop = stops_update.current_stop
360
- if vehicle.polylines is not None:
329
+ update.apply(self.visualized_environment)
330
+
331
+ if isinstance(update, VehicleUpdate):
332
+ vehicle = self.visualized_environment.get_vehicle(update.vehicle_id)
333
+ if vehicle is not None:
361
334
  self.update_polylines_if_needed(vehicle)
362
- elif update.update_type == UpdateType.UPDATE_STATISTIC:
363
- statistic_update: StatisticUpdate = update.data
364
- self.visualized_environment.statistic = statistic_update.statistic
365
335
 
366
336
  SimulationVisualizationDataManager.save_update(self.current_save_file_path, update)
367
337
 
@@ -372,6 +342,10 @@ class SimulationVisualizationDataCollector(DataCollector): # pylint: disable=to
372
342
  polylines = vehicle.polylines
373
343
  stops = vehicle.all_stops
374
344
 
345
+ if polylines is None:
346
+ # No polylines to update
347
+ return
348
+
375
349
  # A polyline needs to have at least 2 points
376
350
  if len(stops) < 2:
377
351
  return
@@ -410,49 +384,38 @@ class SimulationVisualizationDataCollector(DataCollector): # pylint: disable=to
410
384
  if len(polylines_to_save) > 0:
411
385
  SimulationVisualizationDataManager.set_polylines(self.simulation_id, polylines_to_save)
412
386
 
413
- if self.is_connected:
414
- self.sio.emit(
415
- "simulation-update-polylines-version",
416
- self.simulation_id,
417
- )
387
+ if self.is_connected:
388
+ self.sio.emit(
389
+ "simulation-update-polylines-version",
390
+ self.simulation_id,
391
+ )
418
392
 
419
393
  # MARK: +- Flush
420
394
  def flush(self, environment) -> None:
421
395
  for event in self.passenger_assignment_event_queue:
396
+ old_passenger = self.visualized_environment.get_passenger(event.state_machine.owner.id)
397
+ new_passenger = VisualizedPassenger.from_trip_and_environment(event.state_machine.owner, environment)
398
+
422
399
  self.add_update(
423
- Update(
424
- UpdateType.UPDATE_PASSENGER_STATUS,
425
- PassengerStatusUpdate.from_trip(
426
- event.state_machine.owner,
427
- ),
428
- event.time,
429
- ),
430
- environment,
431
- )
432
- previous_passenger = self.visualized_environment.get_passenger(event.state_machine.owner.id)
433
- self.add_update(
434
- Update(
435
- UpdateType.UPDATE_PASSENGER_LEGS,
436
- PassengerLegsUpdate.from_trip_environment_and_previous_passenger(
437
- event.state_machine.owner, environment, previous_passenger
438
- ),
439
- event.time,
440
- ),
400
+ PassengerUpdate(self.update_counter, event.index, event.name, event.time, old_passenger, new_passenger),
441
401
  environment,
442
402
  )
443
403
 
444
404
  for event in self.vehicle_notification_event_queue:
445
405
  vehicle = event._VehicleNotification__vehicle # pylint: disable=protected-access
446
406
  route = event._VehicleNotification__route # pylint: disable=protected-access
447
- existing_vehicle = self.visualized_environment.get_vehicle(vehicle.id)
448
- if vehicle.polylines != existing_vehicle.polylines:
449
- existing_vehicle.polylines = vehicle.polylines
407
+
408
+ old_vehicle = self.visualized_environment.get_vehicle(vehicle.id)
409
+ new_vehicle = VisualizedVehicle.from_vehicle_and_route(vehicle, route)
450
410
 
451
411
  self.add_update(
452
- Update(
453
- UpdateType.UPDATE_VEHICLE_STOPS,
454
- VehicleStopsUpdate.from_vehicle_and_route(vehicle, route),
412
+ VehicleUpdate(
413
+ self.update_counter,
414
+ event.index,
415
+ event.name,
455
416
  event.time,
417
+ old_vehicle,
418
+ new_vehicle,
456
419
  ),
457
420
  environment,
458
421
  )
@@ -467,252 +430,276 @@ class SimulationVisualizationDataCollector(DataCollector): # pylint: disable=to
467
430
  # MARK: +- Process Event
468
431
  def process_event( # pylint: disable=too-many-branches, too-many-statements, too-many-return-statements
469
432
  self, event: Event, environment: Environment
470
- ) -> str:
433
+ ) -> None:
471
434
  # In case that a queued event is not linked to EnvironmentIdle
472
435
  if self.has_to_flush and event.time > self.last_queued_event_time:
473
436
  self.flush(environment)
474
437
 
475
438
  # Optimize
476
439
  if isinstance(event, Optimize):
477
- # Do nothing ?
478
- return f"{event.time} TODO Optimize"
440
+ return
479
441
 
480
442
  # EnvironmentUpdate
481
443
  if isinstance(event, EnvironmentUpdate):
482
- # Do nothing ?
483
- return f"{event.time} TODO EnvironmentUpdate"
444
+ return
484
445
 
485
446
  # EnvironmentIdle
486
447
  if isinstance(event, EnvironmentIdle):
448
+ # Now that the optimisations are done, we can flush the queued events.
487
449
  self.flush(environment)
488
- return f"{event.time} TODO EnvironmentIdle"
450
+
451
+ return
489
452
 
490
453
  # PassengerRelease
491
454
  if isinstance(event, PassengerRelease):
492
- passenger = VisualizedPassenger.from_trip_and_environment(event.trip, environment)
455
+ old_passenger = self.visualized_environment.get_passenger(event.trip.id)
456
+ new_passenger = VisualizedPassenger.from_trip_and_environment(event.trip, environment)
457
+
493
458
  self.add_update(
494
- Update(
495
- UpdateType.CREATE_PASSENGER,
496
- passenger,
459
+ PassengerUpdate(
460
+ self.update_counter,
461
+ event.index,
462
+ event.name,
497
463
  event.time,
464
+ old_passenger,
465
+ new_passenger,
498
466
  ),
499
467
  environment,
500
468
  )
501
- return f"{event.time} TODO PassengerRelease"
469
+
470
+ return
502
471
 
503
472
  # PassengerAssignment
504
473
  if isinstance(event, PassengerAssignment):
505
474
  self.passenger_assignment_event_queue.append(event)
475
+
506
476
  self.last_queued_event_time = event.time
507
- return f"{event.time} TODO PassengerAssignment"
477
+
478
+ return
508
479
 
509
480
  # PassengerReady
510
481
  if isinstance(event, PassengerReady):
482
+ old_passenger = self.visualized_environment.get_passenger(event.state_machine.owner.id)
483
+ new_passenger = VisualizedPassenger.from_trip_and_environment(event.state_machine.owner, environment)
484
+
511
485
  self.add_update(
512
- Update(
513
- UpdateType.UPDATE_PASSENGER_STATUS,
514
- PassengerStatusUpdate.from_trip(
515
- event.state_machine.owner,
516
- ),
486
+ PassengerUpdate(
487
+ self.update_counter,
488
+ event.index,
489
+ event.name,
517
490
  event.time,
491
+ old_passenger,
492
+ new_passenger,
518
493
  ),
519
494
  environment,
520
495
  )
521
- return f"{event.time} TODO PassengerReady"
496
+
497
+ return
522
498
 
523
499
  # PassengerToBoard
524
500
  if isinstance(event, PassengerToBoard):
501
+ old_passenger = self.visualized_environment.get_passenger(event.state_machine.owner.id)
502
+ new_passenger = VisualizedPassenger.from_trip_and_environment(event.state_machine.owner, environment)
503
+
525
504
  self.add_update(
526
- Update(
527
- UpdateType.UPDATE_PASSENGER_STATUS,
528
- PassengerStatusUpdate.from_trip(
529
- event.state_machine.owner,
530
- ),
531
- event.time,
532
- ),
533
- environment,
534
- )
535
- previous_passenger = self.visualized_environment.get_passenger(event.state_machine.owner.id)
536
- self.add_update(
537
- Update(
538
- UpdateType.UPDATE_PASSENGER_LEGS,
539
- PassengerLegsUpdate.from_trip_environment_and_previous_passenger(
540
- event.state_machine.owner, environment, previous_passenger
541
- ),
505
+ PassengerUpdate(
506
+ self.update_counter,
507
+ event.index,
508
+ event.name,
542
509
  event.time,
510
+ old_passenger,
511
+ new_passenger,
543
512
  ),
544
513
  environment,
545
514
  )
546
- return f"{event.time} TODO PassengerToBoard"
515
+
516
+ return
547
517
 
548
518
  # PassengerAlighting
549
519
  if isinstance(event, PassengerAlighting):
520
+ old_passenger = self.visualized_environment.get_passenger(event.state_machine.owner.id)
521
+ new_passenger = VisualizedPassenger.from_trip_and_environment(event.state_machine.owner, environment)
522
+
550
523
  self.add_update(
551
- Update(
552
- UpdateType.UPDATE_PASSENGER_STATUS,
553
- PassengerStatusUpdate.from_trip(
554
- event.state_machine.owner,
555
- ),
556
- event.time,
557
- ),
558
- environment,
559
- )
560
- previous_passenger = self.visualized_environment.get_passenger(event.state_machine.owner.id)
561
- self.add_update(
562
- Update(
563
- UpdateType.UPDATE_PASSENGER_LEGS,
564
- PassengerLegsUpdate.from_trip_environment_and_previous_passenger(
565
- event.state_machine.owner, environment, previous_passenger
566
- ),
524
+ PassengerUpdate(
525
+ self.update_counter,
526
+ event.index,
527
+ event.name,
567
528
  event.time,
529
+ old_passenger,
530
+ new_passenger,
568
531
  ),
569
532
  environment,
570
533
  )
571
- return f"{event.time} TODO PassengerAlighting"
534
+
535
+ return
572
536
 
573
537
  # VehicleWaiting
574
538
  if isinstance(event, VehicleWaiting):
539
+ vehicle = event.state_machine.owner
540
+ route = event._VehicleWaiting__route # pylint: disable=protected-access
541
+
542
+ old_vehicle = self.visualized_environment.get_vehicle(event.state_machine.owner.id)
543
+ new_vehicle = VisualizedVehicle.from_vehicle_and_route(vehicle, route)
544
+
575
545
  self.add_update(
576
- Update(
577
- UpdateType.UPDATE_VEHICLE_STATUS,
578
- VehicleStatusUpdate.from_vehicle(event.state_machine.owner),
546
+ VehicleUpdate(
547
+ self.update_counter,
548
+ event.index,
549
+ event.name,
579
550
  event.time,
551
+ old_vehicle,
552
+ new_vehicle,
580
553
  ),
581
554
  environment,
582
555
  )
583
- return f"{event.time} TODO VehicleWaiting"
556
+
557
+ return
584
558
 
585
559
  # VehicleBoarding
586
560
  if isinstance(event, VehicleBoarding):
561
+ vehicle = event.state_machine.owner
562
+ route = event._VehicleBoarding__route # pylint: disable=protected-access
563
+
564
+ old_vehicle = self.visualized_environment.get_vehicle(vehicle.id)
565
+ new_vehicle = VisualizedVehicle.from_vehicle_and_route(vehicle, route)
566
+
587
567
  self.add_update(
588
- Update(
589
- UpdateType.UPDATE_VEHICLE_STATUS,
590
- VehicleStatusUpdate.from_vehicle(
591
- event.state_machine.owner,
592
- ),
568
+ VehicleUpdate(
569
+ self.update_counter,
570
+ event.index,
571
+ event.name,
593
572
  event.time,
573
+ old_vehicle,
574
+ new_vehicle,
594
575
  ),
595
576
  environment,
596
577
  )
597
- return f"{event.time} TODO VehicleBoarding"
578
+
579
+ return
598
580
 
599
581
  # VehicleDeparture
600
582
  if isinstance(event, VehicleDeparture):
601
583
  route = event._VehicleDeparture__route # pylint: disable=protected-access
602
584
  vehicle = event.state_machine.owner
603
585
 
604
- self.add_update(
605
- Update(
606
- UpdateType.UPDATE_VEHICLE_STATUS,
607
- VehicleStatusUpdate.from_vehicle(
608
- event.state_machine.owner,
609
- ),
610
- event.time,
611
- ),
612
- environment,
613
- )
586
+ old_vehicle = self.visualized_environment.get_vehicle(vehicle.id)
587
+ new_vehicle = VisualizedVehicle.from_vehicle_and_route(vehicle, route)
614
588
 
615
589
  self.add_update(
616
- Update(
617
- UpdateType.UPDATE_VEHICLE_STOPS,
618
- VehicleStopsUpdate.from_vehicle_and_route(vehicle, route),
590
+ VehicleUpdate(
591
+ self.update_counter,
592
+ event.index,
593
+ event.name,
619
594
  event.time,
595
+ old_vehicle,
596
+ new_vehicle,
620
597
  ),
621
598
  environment,
622
599
  )
623
- return f"{event.time} TODO VehicleDeparture"
600
+
601
+ return
624
602
 
625
603
  # VehicleArrival
626
604
  if isinstance(event, VehicleArrival):
627
605
  route = event._VehicleArrival__route # pylint: disable=protected-access
628
606
  vehicle = event.state_machine.owner
629
607
 
630
- self.add_update(
631
- Update(
632
- UpdateType.UPDATE_VEHICLE_STATUS,
633
- VehicleStatusUpdate.from_vehicle(
634
- event.state_machine.owner,
635
- ),
636
- event.time,
637
- ),
638
- environment,
639
- )
608
+ old_vehicle = self.visualized_environment.get_vehicle(vehicle.id)
609
+ new_vehicle = VisualizedVehicle.from_vehicle_and_route(vehicle, route)
640
610
 
641
611
  self.add_update(
642
- Update(
643
- UpdateType.UPDATE_VEHICLE_STOPS,
644
- VehicleStopsUpdate.from_vehicle_and_route(vehicle, route),
612
+ VehicleUpdate(
613
+ self.update_counter,
614
+ event.index,
615
+ event.name,
645
616
  event.time,
617
+ old_vehicle,
618
+ new_vehicle,
646
619
  ),
647
620
  environment,
648
621
  )
649
622
 
650
- return f"{event.time} TODO VehicleArrival"
623
+ return
651
624
 
652
625
  # VehicleComplete
653
626
  if isinstance(event, VehicleComplete):
627
+ vehicle = event.state_machine.owner
628
+ route = event._VehicleComplete__route # pylint: disable=protected-access
629
+
630
+ old_vehicle = self.visualized_environment.get_vehicle(vehicle.id)
631
+ new_vehicle = VisualizedVehicle.from_vehicle_and_route(vehicle, route)
632
+
654
633
  self.add_update(
655
- Update(
656
- UpdateType.UPDATE_VEHICLE_STATUS,
657
- VehicleStatusUpdate.from_vehicle(
658
- event.state_machine.owner,
659
- ),
634
+ VehicleUpdate(
635
+ self.update_counter,
636
+ event.index,
637
+ event.name,
660
638
  event.time,
639
+ old_vehicle,
640
+ new_vehicle,
661
641
  ),
662
642
  environment,
663
643
  )
664
- return f"{event.time} TODO VehicleComplete"
644
+
645
+ return
665
646
 
666
647
  # VehicleReady
667
648
  if isinstance(event, VehicleReady):
668
- vehicle = VisualizedVehicle.from_vehicle_and_route(
669
- event.vehicle, event._VehicleReady__route # pylint: disable=protected-access
670
- )
649
+ vehicle = event._VehicleReady__vehicle # pylint: disable=protected-access
650
+ route = event._VehicleReady__route # pylint: disable=protected-access
651
+
652
+ old_vehicle = self.visualized_environment.get_vehicle(vehicle.id)
653
+ new_vehicle = VisualizedVehicle.from_vehicle_and_route(vehicle, route)
654
+
671
655
  self.add_update(
672
- Update(
673
- UpdateType.CREATE_VEHICLE,
674
- vehicle,
656
+ VehicleUpdate(
657
+ self.update_counter,
658
+ event.index,
659
+ event.name,
675
660
  event.time,
661
+ old_vehicle,
662
+ new_vehicle,
676
663
  ),
677
664
  environment,
678
665
  )
679
- return f"{event.time} TODO VehicleReady"
666
+
667
+ return
680
668
 
681
669
  # VehicleNotification
682
670
  if isinstance(event, VehicleNotification):
683
671
  self.vehicle_notification_event_queue.append(event)
672
+
684
673
  self.last_queued_event_time = event.time
685
- return f"{event.time} TODO VehicleNotification"
674
+
675
+ return
686
676
 
687
677
  # VehicleBoarded
688
678
  if isinstance(event, VehicleBoarded):
689
- return f"{event.time} TODO VehicleBoarded"
679
+ return
690
680
 
691
681
  # VehicleAlighted
692
682
  if isinstance(event, VehicleAlighted):
693
- return f"{event.time} TODO VehicleAlighted"
683
+ return
694
684
 
695
685
  # VehicleUpdatePositionEvent
696
686
  if isinstance(event, VehicleUpdatePositionEvent):
697
- # Do nothing ?
698
- return f"{event.time} TODO VehicleUpdatePositionEvent"
687
+ return
699
688
 
700
689
  # RecurrentTimeSyncEvent
701
690
  if isinstance(event, RecurrentTimeSyncEvent):
702
- # Do nothing ?
703
- return f"{event.time} TODO RecurrentTimeSyncEvent"
691
+ return
704
692
 
705
693
  # Hold
706
694
  if isinstance(event, Hold):
707
- # Do nothing ?
708
- return f"{event.time} TODO Hold"
695
+ return
709
696
 
710
- raise NotImplementedError(f"Event {event} not implemented")
697
+ raise NotImplementedError(f"Event {event.name} not handled by the data collector")
711
698
 
712
699
  # MARK: +- Clean Up
713
700
  def clean_up(self, env):
714
701
  self.simulation_information.simulation_end_time = self.visualized_environment.timestamp
715
- self.simulation_information.last_update_order = self.visualized_environment.order
702
+ self.simulation_information.last_update_index = self.visualized_environment.update_index
716
703
 
717
704
  SimulationVisualizationDataManager.set_simulation_information(self.simulation_id, self.simulation_information)
718
705