-/* $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_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)
{ }
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.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;
signal_route_changed.emit(route);
}
-} // namespace Marklin
+} // namespace R2C2