]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/train.cpp
Remove status from Train and turn it into a TrainAI
[r2c2.git] / source / libr2c2 / train.cpp
index 38765cee7fde73517df49f546c5205bdd95caefa..78c16c072809ce74f2df57edac7b313d22826342 100644 (file)
@@ -63,7 +63,6 @@ Train::Train(Layout &l, const VehicleType &t, unsigned a, const string &p):
        reverse(false),
        functions(0),
        end_of_route(false),
-       status("Unplaced"),
        travel_dist(0),
        pure_speed(false),
        speed_quantizer(0),
@@ -180,10 +179,7 @@ void Train::set_active(bool a)
                reserve_more();
        }
        else
-       {
                stop_timeout = Time::now()+2*Time::sec;
-               set_status("Stopped");
-       }
 }
 
 void Train::set_function(unsigned func, bool state)
@@ -203,6 +199,14 @@ float Train::get_speed() const
        return controller->get_speed();
 }
 
+float Train::get_quantized_speed() const
+{
+       if(speed_quantizer)
+               return speed_quantizer->quantize_speed(controller->get_speed());
+       else
+               return controller->get_speed();
+}
+
 bool Train::get_function(unsigned func) const
 {
        return (functions>>func)&1;
@@ -221,9 +225,9 @@ void Train::remove_ai(TrainAI &ai)
                ais.erase(i);
 }
 
-TrainAI *Train::get_tagged_ai(const string &tag)
+TrainAI *Train::get_tagged_ai(const string &tag) const
 {
-       for(list<TrainAI *>::iterator i=ais.begin(); i!=ais.end(); ++i)
+       for(list<TrainAI *>::const_iterator i=ais.begin(); i!=ais.end(); ++i)
                if((*i)->get_tag()==tag)
                        return *i;
 
@@ -433,10 +437,7 @@ void Train::place(Block &block, unsigned entry)
        accurate_position = false;
 
        if(!block.reserve(this))
-       {
-               set_status("Unplaced");
                return;
-       }
 
        blocks.push_back(BlockIter(&block, entry));
        if(reverse)
@@ -463,8 +464,6 @@ void Train::unplace()
 
        for(vector<Vehicle *>::iterator i=vehicles.begin(); i!=vehicles.end(); ++i)
                (*i)->unplace();
-
-       set_status("Unplaced");
 }
 
 bool Train::free_block(Block &block)
@@ -605,11 +604,6 @@ void Train::tick(const Time::TimeStamp &t, const Time::TimeDelta &dt)
                        driver.set_loco_speed(address, speed_step);
 
                        pure_speed = false;
-
-                       if(speed_step)
-                               set_status(format("Traveling %d kmh", get_travel_speed()));
-                       else
-                               set_status("Waiting");
                }
 
                speed = speed_quantizer->get_speed(current_speed_step);
@@ -768,12 +762,8 @@ void Train::sensor_event(unsigned addr, bool state)
                        // Compute speed and update related state
                        float travel_time_secs = (Time::now()-last_entry_time)/Time::sec;
 
-                       if(pure_speed)
-                       {
-                               if(speed_quantizer && current_speed_step>0)
-                                       speed_quantizer->learn(current_speed_step, travel_dist/travel_time_secs, travel_time_secs);
-                               set_status(format("Traveling %d kmh", get_travel_speed()));
-                       }
+                       if(pure_speed && speed_quantizer && current_speed_step>0)
+                               speed_quantizer->learn(current_speed_step, travel_dist/travel_time_secs, travel_time_secs);
 
                        travel_dist = 0;
                        for(BlockList::iterator j=cur_blocks_end; j!=end; ++j)
@@ -1173,23 +1163,6 @@ float Train::get_reserved_distance_until(const Block *until_block, bool back) co
        return result;
 }
 
-float Train::get_travel_speed() const
-{
-       float speed = 0;
-       if(speed_quantizer)
-               speed = speed_quantizer->get_speed(current_speed_step);
-       else
-               speed = controller->get_speed();
-       float scale = layout.get_catalogue().get_scale();
-       return static_cast<int>(round(speed/scale*3.6/5))*5;
-}
-
-void Train::set_status(const string &s)
-{
-       status = s;
-       signal_status_changed.emit(s);
-}
-
 void Train::release_blocks()
 {
        release_blocks(blocks.begin(), blocks.end());
@@ -1336,8 +1309,6 @@ void Train::Loader::finish()
                TrackIter track = obj.blocks.front().track_iter();
                float offset = 2*obj.layout.get_catalogue().get_scale();
                obj.vehicles.back()->place(*track, track.entry(), offset, Vehicle::BACK_BUFFER);
-
-               obj.set_status("Stopped");
        }
 }