#include "route.h"
#include "simplecontroller.h"
#include "speedquantizer.h"
+#include "timetable.h"
#include "trackcircuit.h"
#include "trackiter.h"
#include "tracktype.h"
return controller->get_speed();
}
+float Train::get_maximum_speed() const
+{
+ float ms = 0;
+ for(vector<Vehicle *>::const_iterator i=vehicles.begin(); i!=vehicles.end(); ++i)
+ {
+ float vms = (*i)->get_type().get_maximum_speed();
+ if(ms<=0 || (vms>0 && vms<ms))
+ ms = vms;
+ }
+ return ms;
+}
+
bool Train::get_function(unsigned func) const
{
return (functions>>func)&1;
Vehicle &vehicle = *(reverse ? vehicles.back() : vehicles.front());
float d = speed*(dt/Time::sec);
- if(allocator.is_block_current(vehicle.get_placement().get_position(reverse ? VehiclePlacement::BACK_AXLE : VehiclePlacement::FRONT_AXLE)->get_block()))
+ Block &block = vehicle.get_placement().get_position(reverse ? VehiclePlacement::BACK_AXLE : VehiclePlacement::FRONT_AXLE)->get_block();
+ if(allocator.is_block_current(block))
{
SetFlag setf(advancing);
vehicle.advance(reverse ? -d : d);
overshoot_dist += d;
if(overshoot_dist>40*layout.get_catalogue().get_scale())
{
- layout.emergency(name+" has not arrived at sensor");
+ layout.emergency(&block, name+" has not arrived at sensor");
accurate_position = false;
}
}
router->save(ss.sub);
st.push_back(ss);
}
+ else if(Timetable *timetable = dynamic_cast<Timetable *>(*i))
+ {
+ DataFile::Statement ss("timetable");
+ timetable->save(ss.sub);
+ st.push_back(ss);
+ }
}
}
last_entry_block = allocator.iter_for(*block);
travel_time = Time::zero;
- pure_speed = true;
- accurate_position = true;
+ if(!layout.get_driver().is_halted())
+ {
+ pure_speed = true;
+ accurate_position = true;
+ }
overshoot_dist = 0;
if(!advancing && vehicles.front()->is_placed())
add("name", &Loader::name);
add("quantized_speed", &Loader::quantized_speed);
add("router", &Loader::router);
+ add("timetable", &Loader::timetable);
add("vehicle", &Loader::vehicle);
}
load_sub(*rtr);
}
+void Train::Loader::timetable()
+{
+ Timetable *ttbl = new Timetable(obj);
+ load_sub(*ttbl, obj.layout);
+}
+
void Train::Loader::vehicle(ArticleNumber art_nr)
{
const VehicleType &vtype = obj.layout.get_catalogue().get<VehicleType>(art_nr);