]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/trainstatus.cpp
Strip Id tags and copyright notices from files
[r2c2.git] / source / libr2c2 / trainstatus.cpp
1 #include <msp/strings/formatter.h>
2 #include "catalogue.h"
3 #include "layout.h"
4 #include "train.h"
5 #include "trainstatus.h"
6 #include "vehicle.h"
7
8 using namespace Msp;
9
10 #include <msp/io/print.h>
11
12 namespace R2C2 {
13
14 TrainStatus::TrainStatus(Train &t):
15         TrainAI(t),
16         speed(-2)
17 {
18         check();
19 }
20
21 void TrainStatus::tick(const Time::TimeStamp &, const Time::TimeDelta &)
22 {
23         check();
24 }
25
26 void TrainStatus::check()
27 {
28         float scale = train.get_layout().get_catalogue().get_scale();
29         int s = static_cast<int>(train.get_quantized_speed()*3.6/scale+0.5);
30         if(s==0 && train.is_active())
31                 s = -1;
32
33         if(s!=speed)
34         {
35                 if(s>0)
36                 {
37                         status = format("Traveling %d kmh", s);
38                         if(unsigned step = train.get_speed_step())
39                                 status += format(" (%d)", step);
40                 }
41                 else if(s==-1)
42                         status = "Waiting";
43                 else if(!train.get_vehicle(0).get_track())
44                         status = "Unplaced";
45                 else
46                         status = "Stopped";
47
48                 speed = s;
49
50                 signal_changed.emit(status);
51                 signal_event.emit(Message("status-changed", status));
52         }
53 }
54
55 } // namespace R2C2