]> git.tdb.fi Git - r2c2.git/blobdiff - source/network/train.cpp
Export AI control parameters over the network
[r2c2.git] / source / network / train.cpp
index 4ba4df08870891e354c10c86489bc3c82a0290ac..52eca849b30421c79591f6296ef6a266f125b6a0 100644 (file)
@@ -10,6 +10,8 @@ NetTrain::NetTrain(Client &c, const TrainInfoPacket &pkt):
        loco_type(client.get_catalogue().get<VehicleType>(pkt.loco_type)),
        address(pkt.address),
        name(pkt.name),
+       target_speed(0),
+       reverse(false),
        functions(0)
 { }
 
@@ -31,6 +33,24 @@ float NetTrain::get_control(const string &c) const
        return i!=controls.end() ? i->second : 0;
 }
 
+void NetTrain::set_target_speed(float s)
+{
+       TrainAIControlPacket pkt;
+       pkt.address = address;
+       pkt.target_speed = s;
+       pkt.reverse = reverse;
+       client.send(pkt);
+}
+
+void NetTrain::set_reverse(bool r)
+{
+       TrainAIControlPacket pkt;
+       pkt.address = address;
+       pkt.target_speed = target_speed;
+       pkt.reverse = r;
+       client.send(pkt);
+}
+
 void NetTrain::set_function(unsigned i, bool set)
 {
        TrainFunctionPacket pkt;
@@ -69,6 +89,21 @@ 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;