loco.protocol = proto;
loco.address = addr;
+ const VehicleType::FunctionMap &type_funcs = type.get_functions();
+ for(VehicleType::FunctionMap::const_iterator i=type_funcs.begin(); i!=type_funcs.end(); ++i)
+ loco.func_mask |= 1<<i->first;
+
if(locos_synced && proto!=MFX)
command("create(10)");
}
if(j!=locos.end())
{
command(format("request(%d, view, control, force)", i->first));
- command(format("get(%d, dir, func[0])", i->first));
+ string cmd = format("get(%d, dir", i->first);
+ for(unsigned l=0; j->second.func_mask>>l; ++l)
+ if((j->second.func_mask>>l)&1)
+ cmd += format(", func[%d]", l);
+ cmd += ')';
+ command(cmd);
locos.insert(LocoMap::value_type(i->first, j->second));
locos.erase(j);
{
s88.push_back(i->first);
command(format("request(%d, view)", i->first));
+ command(format("get(%d, state)", i->first));
}
sensors_synced = true;
if(open_bracket!=string::npos)
{
string::size_type close_bracket = attr.rfind(']');
- attribs[attr.substr(0, open_bracket)] = attr.substr(open_bracket+1, close_bracket-open_bracket-1);
+ string attr_name = attr.substr(0, open_bracket);
+ string attr_value = attr.substr(open_bracket+1, close_bracket-open_bracket-1);
+ attribs.insert(Message::AttribMap::value_type(attr_name, attr_value));
}
else
- attribs[attr];
+ attribs.insert(Message::AttribMap::value_type(attr, string()));
}
}
address(0),
speed(0),
reverse(false),
+ func_mask(0),
funcs(0),
control(false)
{ }