]> git.tdb.fi Git - r2c2.git/blob - source/libmarklin/train.h
Add Id tags and copyright notices to files
[r2c2.git] / source / libmarklin / train.h
1 /* $Id$
2
3 This file is part of the MSP Märklin suite
4 Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
6 */
7
8 #ifndef LIBMARKLIN_TRAIN_H_
9 #define LIBMARKLIN_TRAIN_H_
10
11 #include <sigc++/signal.h>
12 #include <sigc++/trackable.h>
13 #include <msp/time/timestamp.h>
14 #include "block.h"
15
16 namespace Marklin {
17
18 class Locomotive;
19 class Sensor;
20 class TrafficManager;
21
22 class Train: public sigc::trackable
23 {
24 private:
25         struct BlockRef
26         {
27                 Block *block;
28                 unsigned entry;
29
30                 BlockRef(Block *s, unsigned e): block(s), entry(e) { }
31         };
32
33         TrafficManager &trfc_mgr;
34         std::string name;
35         Locomotive &loco;
36         std::list<BlockRef> cur_blocks;
37         std::list<BlockRef> rsv_blocks;
38         unsigned target_speed;
39         Msp::Time::TimeStamp try_reserve;
40         std::string status;
41         Msp::Time::TimeStamp last_entry_time;
42         float travel_dist;
43         unsigned real_speed;
44
45 public:
46         sigc::signal<void, const std::string &> signal_name_changed;
47         sigc::signal<void, const std::string &> signal_status_changed;
48
49         Train(TrafficManager &, Locomotive &);
50
51         void set_name(const std::string &);
52         void set_speed(unsigned);
53         const std::string &get_name() const { return name; }
54         Locomotive &get_locomotive() const { return loco; }
55         const std::string &get_status() const { return status; }
56         void place(Block *, unsigned);
57         bool free_block(Block *);
58         void tick(const Msp::Time::TimeStamp &);
59 private:
60         void sensor_event(bool, Sensor *);
61         bool reserve_more();
62         void set_status(const std::string &);
63 };
64
65 } // namespace Marklin
66
67 #endif