NetTrain::NetTrain(Client &c, const TrainInfoPacket &pkt):
client(c),
- loco_type(client.get_catalogue().get_vehicle(pkt.loco_type)),
+ loco_type(client.get_catalogue().get<VehicleType>(pkt.loco_type)),
address(pkt.address),
name(pkt.name),
+ target_speed(0),
+ reverse(false),
functions(0)
{ }
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;
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;