From: Mikko Rasa Date: Mon, 21 Jan 2013 19:16:00 +0000 (+0200) Subject: Detect curved turnouts and assign appropriate symbols to them X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=a76a60a5eb20f6e7c5bfc2a7250529b2510df987;p=r2c2.git Detect curved turnouts and assign appropriate symbols to them --- diff --git a/source/libr2c2/centralstation.cpp b/source/libr2c2/centralstation.cpp index 979749e..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) diff --git a/source/libr2c2/centralstation.h b/source/libr2c2/centralstation.h index 4554d14..4539e0b 100644 --- a/source/libr2c2/centralstation.h +++ b/source/libr2c2/centralstation.h @@ -72,10 +72,12 @@ private: { enum Symbol { - LEFT, - RIGHT, - THREEWAY, - DOUBLESLIP + LEFT = 0, + RIGHT = 1, + THREEWAY = 2, + DOUBLESLIP = 3, + CURVED_LEFT = 21, + CURVED_RIGHT = 22 }; unsigned address;