]> git.tdb.fi Git - r2c2.git/blob - source/network/train.h
Add a new remote control program with GLtk-based UI
[r2c2.git] / source / network / train.h
1 #ifndef R2C2_NET_TRAIN_H_
2 #define R2C2_NET_TRAIN_H_
3
4 #include <sigc++/signal.h>
5 #include "libr2c2/vehicletype.h"
6 #include "packets.h"
7
8 namespace R2C2 {
9
10 class Client;
11
12 class NetTrain
13 {
14 public:
15         sigc::signal<void, const std::string &> signal_name_changed;
16         sigc::signal<void, const std::string &, float> signal_control_changed;
17         sigc::signal<void, unsigned, bool> signal_function_changed;
18         sigc::signal<void, float> signal_target_speed_changed;
19         sigc::signal<void, bool> signal_reverse_changed;
20         sigc::signal<void, const std::string &> signal_route_changed;
21         sigc::signal<void, const std::string &> signal_status_changed;
22
23 private:
24         Client &client;
25         const VehicleType &loco_type;
26         unsigned address;
27         std::string name;
28         std::map<std::string, float> controls;
29         float target_speed;
30         bool reverse;
31         unsigned functions;
32         std::string route;
33         std::string status;
34
35 public:
36         NetTrain(Client &, const TrainInfoPacket &);
37
38         Client &get_client() const { return client; }
39         const VehicleType &get_loco_type() const { return loco_type; }
40         unsigned get_address() const { return address; }
41         const std::string &get_name() const { return name; }
42         void set_control(const std::string &, float);
43         float get_control(const std::string &) const;
44         void set_target_speed(float);
45         void set_reverse(bool);
46         float get_target_speed() const { return target_speed; }
47         bool get_reverse() const { return reverse; }
48         void set_function(unsigned, bool);
49         bool get_function(unsigned i) const { return (functions>>i)&1; }
50         void set_route(const std::string &);
51         const std::string &get_route() const { return route; }
52         const std::string &get_status() const { return status; }
53
54         void process_packet(const TrainControlPacket &);
55         void process_packet(const TrainFunctionPacket &);
56         void process_packet(const TrainAIControlPacket &);
57         void process_packet(const TrainRoutePacket &);
58         void process_packet(const TrainStatusPacket &);
59 };
60
61 } // namespace R2C2
62
63 #endif