X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fcentralstation.cpp;h=3a9624af1ba17b0049b17a832e317ecb055bb4dc;hb=a76a60a5eb20f6e7c5bfc2a7250529b2510df987;hp=a41a494c440243c266d10379bd40236ea06fb03c;hpb=d15ac13f2e170f155b4bbd124df48400c339b644;p=r2c2.git diff --git a/source/libr2c2/centralstation.cpp b/source/libr2c2/centralstation.cpp index a41a494..3a9624a 100644 --- a/source/libr2c2/centralstation.cpp +++ b/source/libr2c2/centralstation.cpp @@ -142,6 +142,7 @@ void CentralStation::set_loco_function(unsigned addr, unsigned func, bool state) void CentralStation::add_turnout(unsigned addr, const TrackType &type) { + unsigned straight = type.get_paths(); bool left = false; bool right = false; bool cross = false; @@ -151,10 +152,11 @@ void CentralStation::add_turnout(unsigned addr, const TrackType &type) { TrackPoint start = i->get_point(0); TrackPoint end = i->get_point(i->get_length()); - if(end.dir>start.dir+0.01) - left = true; - else if(end.dirstart.dir+0.01 || end.dirstart.dir ? left : right) = true; + straight &= ~(1<get_path()); + } else if(start.dir<-0.01 || start.dir>0.01) cross = true; } @@ -165,9 +167,9 @@ void CentralStation::add_turnout(unsigned addr, const TrackType &type) else if(left && right) symbol = Turnout::THREEWAY; else if(left) - symbol = Turnout::LEFT; + symbol = (straight ? Turnout::LEFT : Turnout::CURVED_LEFT); else if(right) - symbol = Turnout::RIGHT; + symbol = (straight ? Turnout::RIGHT : Turnout::CURVED_RIGHT); unsigned id = map_address(turnouts, turnout_addr, addr); if(!id) @@ -613,7 +615,7 @@ CentralStation::Protocol CentralStation::map_protocol(const string &name) const else if(name=="MFX") return MFX; else - throw InvalidParameterValue("Unknown protocol"); + throw invalid_argument("CentralStation::map_protocol"); } template