X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Faicontrol.cpp;h=553159c6a1c320d9e71d5abb1c0fbd9e042fb7b0;hb=e392d397f6b86a49a05e9738357ccbfc2a922f01;hp=eefc7f87f230d586c2a083dbc0741ae0d4b1763d;hpb=77f8c0e033b9b5e7085de5d22a62128a996a5b2a;p=r2c2.git diff --git a/source/libmarklin/aicontrol.cpp b/source/libmarklin/aicontrol.cpp index eefc7f8..553159c 100644 --- a/source/libmarklin/aicontrol.cpp +++ b/source/libmarklin/aicontrol.cpp @@ -15,22 +15,22 @@ using namespace Msp; namespace Marklin { -AIControl::AIControl(Train &t, ControlModel *n): +AIControl::AIControl(Train &t, Controller *n): train(t), - next_model(n), - target_speed(TrainControl::continuous("speed", 0, 1000)), + next_ctrl(n), + target_speed(Control::continuous("speed", 0, 1000)), blocked(false), approach(false) { target_speed.set(0); train.signal_arrived.connect(sigc::mem_fun(this, &AIControl::arrived)); - next_model->signal_control_changed.connect(sigc::mem_fun(this, &AIControl::control_changed)); + next_ctrl->signal_control_changed.connect(sigc::mem_fun(this, &AIControl::control_changed)); } AIControl::~AIControl() { - delete next_model; + delete next_ctrl; } void AIControl::set_control(const string &n, float v) @@ -45,45 +45,45 @@ void AIControl::set_control(const string &n, float v) { float approach_speed = 5*train.get_layout().get_catalogue().get_scale(); if(approach && target_speed.value>approach_speed) - next_model->set_control("speed", approach_speed); + next_ctrl->set_control("speed", approach_speed); else - next_model->set_control("speed", target_speed.value); + next_ctrl->set_control("speed", target_speed.value); } signal_control_changed.emit(target_speed); } else - next_model->set_control(n, v); + next_ctrl->set_control(n, v); } -const TrainControl &AIControl::get_control(const string &n) const +const Controller::Control &AIControl::get_control(const string &n) const { if(n=="speed") return target_speed; else - return next_model->get_control(n); + return next_ctrl->get_control(n); } float AIControl::get_speed() const { - return next_model->get_speed(); + return next_ctrl->get_speed(); } bool AIControl::get_reverse() const { - return next_model->get_reverse(); + return next_ctrl->get_reverse(); } float AIControl::get_braking_distance() const { - return next_model->get_braking_distance(); + return next_ctrl->get_braking_distance(); } void AIControl::tick(const Time::TimeDelta &dt) { float scale = train.get_layout().get_catalogue().get_scale(); float rsv_dist = train.get_reserved_distance(); - float brake_dist = next_model->get_braking_distance(); + float brake_dist = next_ctrl->get_braking_distance(); float approach_margin = 50*scale; float approach_speed = 5*scale; float margin = 10*scale; @@ -91,31 +91,31 @@ void AIControl::tick(const Time::TimeDelta &dt) if(!blocked && rsv_distset_control("speed", 0); + next_ctrl->set_control("speed", 0); } else if((!approach && rsv_distbrake_dist+margin*2)) { blocked = false; approach = true; if(target_speed.value>approach_speed) - next_model->set_control("speed", approach_speed); + next_ctrl->set_control("speed", approach_speed); else - next_model->set_control("speed", target_speed.value); + next_ctrl->set_control("speed", target_speed.value); } else if((blocked || approach) && rsv_dist>brake_dist*1.3+approach_margin*2) { blocked = false; approach = false; - next_model->set_control("speed", target_speed.value); + next_ctrl->set_control("speed", target_speed.value); } - next_model->tick(dt); + next_ctrl->tick(dt); - if(!target_speed.value && !next_model->get_speed() && train.is_active()) + if(!target_speed.value && !next_ctrl->get_speed() && train.is_active()) train.set_active(false); } -void AIControl::control_changed(const TrainControl &ctrl) +void AIControl::control_changed(const Control &ctrl) { if(ctrl.name!="speed") signal_control_changed.emit(ctrl);