Line data Source code
1 : #include "Dynamic/Env/Event/EventMoveVehicle.hpp" 2 : 3 : #include <spdlog/spdlog.h> 4 : 5 : #include "Dynamic/Env/Env.hpp" 6 : #include "Dynamic/Env/Lane.hpp" 7 : 8 : using namespace std; 9 : using namespace Dynamic; 10 : using namespace Dynamic::Env; 11 : 12 0 : EventMoveVehicle::EventMoveVehicle(Time t_, Vehicle &vehicle_): 13 0 : Event(t_), vehicle(vehicle_) {} 14 : 15 0 : void EventMoveVehicle::process(Env &env) { 16 0 : if(vehicle.state == Vehicle::State::STOPPED) { 17 0 : size_t i = vehicle.position.lane.stopped.order_of({vehicle, nullptr}); 18 : 19 0 : vehicle.position.offset = vehicle.position.lane.edge.length - Vehicle::LENGTH * (Length)i; 20 0 : vehicle.lastUpdateTime = env.getTime(); 21 0 : return; 22 : } 23 : 24 0 : Time Dt = env.getTime() - vehicle.lastUpdateTime; 25 0 : Length x = vehicle.speed * Dt; 26 0 : vehicle.lastUpdateTime = env.getTime(); 27 0 : if(x > 0.0) { 28 0 : vehicle.position.offset += x; 29 0 : vehicle.lastMoveTime = env.getTime(); 30 : } 31 : 32 0 : if(vehicle.position.offset > vehicle.position.lane.edge.length + 0.001) { 33 0 : spdlog::warn("Vehicle {} has gone past the end of lane {} after update", vehicle.id, vehicle.position.lane.idAsString()); 34 : } 35 : }