]> git.tdb.fi Git - r2c2.git/blobdiff - source/network/train.cpp
Remove the GTK-based remote control program
[r2c2.git] / source / network / train.cpp
index 468b2200a0aa7d97dfd9e9724169a89e1b348da6..52eca849b30421c79591f6296ef6a266f125b6a0 100644 (file)
@@ -1,47 +1,52 @@
-/* $Id$
-
-This file is part of the MSP Märklin suite
-Copyright © 2009  Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
 #include "client.h"
 #include "train.h"
 
 using namespace std;
 
-namespace Marklin {
+namespace R2C2 {
 
 NetTrain::NetTrain(Client &c, const TrainInfoPacket &pkt):
        client(c),
-       loco_type(client.get_catalogue().get_locomotive(pkt.loco_type)),
+       loco_type(client.get_catalogue().get<VehicleType>(pkt.loco_type)),
        address(pkt.address),
        name(pkt.name),
-       speed(0),
-       reverse(0),
+       target_speed(0),
+       reverse(false),
        functions(0)
 { }
 
-void NetTrain::set_speed(unsigned s)
+void NetTrain::set_control(const string &c, float v)
 {
-       if(s==speed)
+       if(v==controls[c])
                return;
 
-       TrainSpeedPacket pkt;
+       TrainControlPacket pkt;
+       pkt.address = address;
+       pkt.control = c;
+       pkt.value = v;
+       client.send(pkt);
+}
+
+float NetTrain::get_control(const string &c) const
+{
+       map<string, float>::const_iterator i = controls.find(c);
+       return i!=controls.end() ? i->second : 0;
+}
+
+void NetTrain::set_target_speed(float s)
+{
+       TrainAIControlPacket pkt;
        pkt.address = address;
-       pkt.speed = s;
+       pkt.target_speed = s;
        pkt.reverse = reverse;
        client.send(pkt);
 }
 
 void NetTrain::set_reverse(bool r)
 {
-       if(r==reverse)
-               return;
-
-       TrainSpeedPacket pkt;
+       TrainAIControlPacket pkt;
        pkt.address = address;
-       pkt.speed = speed;
+       pkt.target_speed = target_speed;
        pkt.reverse = r;
        client.send(pkt);
 }
@@ -58,18 +63,21 @@ void NetTrain::set_function(unsigned i, bool set)
        client.send(pkt);
 }
 
-void NetTrain::process_packet(const TrainSpeedPacket &pkt)
+void NetTrain::set_route(const string &r)
 {
-       if(pkt.speed!=speed)
-       {
-               speed = pkt.speed;
-               signal_speed_changed.emit(speed);
-       }
-       if(pkt.reverse!=reverse)
-       {
-               reverse = pkt.reverse;
-               signal_reverse_changed.emit(reverse);
-       }
+       if(r==route)
+               return;
+
+       TrainRoutePacket pkt;
+       pkt.address = address;
+       pkt.route = r;
+       client.send(pkt);
+}
+
+void NetTrain::process_packet(const TrainControlPacket &pkt)
+{
+       controls[pkt.control] = pkt.value;
+       signal_control_changed.emit(pkt.control, pkt.value);
 }
 
 void NetTrain::process_packet(const TrainFunctionPacket &pkt)
@@ -81,10 +89,31 @@ void NetTrain::process_packet(const TrainFunctionPacket &pkt)
                        signal_function_changed.emit(i, (functions>>i)&1);
 }
 
+void NetTrain::process_packet(const TrainAIControlPacket &pkt)
+{
+       if(pkt.target_speed!=target_speed)
+       {
+               target_speed = pkt.target_speed;
+               signal_target_speed_changed.emit(target_speed);
+       }
+
+       if(pkt.reverse!=reverse)
+       {
+               reverse = pkt.reverse;
+               signal_reverse_changed.emit(reverse);
+       }
+}
+
 void NetTrain::process_packet(const TrainStatusPacket &pkt)
 {
        status = pkt.status;
        signal_status_changed.emit(status);
 }
 
-} // namespace Marklin
+void NetTrain::process_packet(const TrainRoutePacket &pkt)
+{
+       route = pkt.route;
+       signal_route_changed.emit(route);
+}
+
+} // namespace R2C2