]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/train.cpp
Update #includes that have been renamed, and remove stray ones
[r2c2.git] / source / libr2c2 / train.cpp
index 93ebebec3c16ef66502da7045fe6df24cf429a4d..782da37cc305935ff5b5186f0151f7dd432a5cef 100644 (file)
@@ -1,13 +1,6 @@
-/* $Id$
-
-This file is part of R²C²
-Copyright © 2006-2011  Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
 #include <algorithm>
 #include <cmath>
-#include <msp/strings/formatter.h>
+#include <msp/strings/format.h>
 #include <msp/time/units.h>
 #include <msp/time/utils.h>
 #include "aicontrol.h"
@@ -588,7 +581,10 @@ void Train::tick(const Time::TimeStamp &t, const Time::TimeDelta &dt)
        if(controller->get_reverse()!=reverse)
        {
                reverse = controller->get_reverse();
-               driver.set_loco_reverse(address, reverse);
+               bool r = reverse;
+               if(loco_type.get_swap_direction())
+                       r = !r;
+               driver.set_loco_reverse(address, r);
 
                release_blocks(cur_blocks_end, blocks.end());
                reverse_blocks(blocks);
@@ -715,8 +711,11 @@ void Train::loco_speed_event(unsigned addr, unsigned speed, bool rev)
        if(addr==address)
        {
                current_speed_step = speed;
-               if(rev!=reverse)
-                       layout.get_driver().set_loco_reverse(address, reverse);
+               bool r = reverse;
+               if(loco_type.get_swap_direction())
+                       r = !r;
+               if(rev!=r)
+                       layout.get_driver().set_loco_reverse(address, r);
                speed_changing = false;
                pure_speed = false;
        }
@@ -763,7 +762,7 @@ void Train::block_state_changed(Block &block, Block::State state)
                        // Compute speed and update related state
                        float travel_time_secs = (Time::now()-last_entry_time)/Time::sec;
 
-                       if(pure_speed && speed_quantizer && current_speed_step>0)
+                       if(pure_speed && speed_quantizer && current_speed_step>0 && travel_time_secs>=2)
                                speed_quantizer->learn(current_speed_step, travel_dist/travel_time_secs, travel_time_secs);
 
                        travel_dist = 0;