X-Git-Url: https://irasnyder.com/gitweb/?a=blobdiff_plain;f=elevator.cpp;h=cbf9775e860babd1d5530d5eac8d4bf9032b427e;hb=637a3859106f650f9acfff7209efef3a73a3980a;hp=4a5eb37561ba85c667635aea5c0bd826ce012e95;hpb=a897a1cb95028e3dbfa370ddafcc9a27110f96a7;p=cs356-p1-elevator.git diff --git a/elevator.cpp b/elevator.cpp index 4a5eb37..cbf9775 100644 --- a/elevator.cpp +++ b/elevator.cpp @@ -1,4 +1,5 @@ #include "elevator.hpp" +#include "main.hpp" Elevator::Elevator (int elevator_number) : state_(STATE_IDLE) @@ -61,6 +62,14 @@ bool Elevator::currently_at_stop () const if (*it == current) return true; + /* Check if we are IDLE. If so, only the position needs to match */ + if (direction_ == IDLE) + { + for (it = stops_.begin (); it != stops_.end (); it++) + if (it->getPosition() == position_) + return true; + } + /* No match */ return false; } @@ -117,6 +126,7 @@ void Elevator::transition_move_up () position_ += ELEVATOR_STEP; // TODO: Call into the GUI to update the position + gui_update_position_label (number_, (float)position_, direction_); std::cout << "Updating the GUI with our position: " << position_ << std::endl; } @@ -126,12 +136,15 @@ void Elevator::transition_move_down () position_ -= ELEVATOR_STEP; // TODO: Call into the GUI to update the position + gui_update_position_label (number_, (float)position_, direction_); std::cout << "Updating the GUI with our position: " << position_ << std::endl; } void Elevator::transition_move_idle () { direction_ = IDLE; + // TODO: Call into the GUI to update the position + gui_update_position_label (number_, (float)position_, direction_); // do not change position while IDLE } @@ -158,19 +171,42 @@ void Elevator::transition_open_door () * * Otherwise, just clear this stop */ if (direction_ == UP && stops_above == 0) + { stops_.remove (Stop(position_, ALL)); + gui_unpress_request_button (number_, (int)position_); + gui_unpress_call_button ((int)position_, UP); + gui_unpress_call_button ((int)position_, DOWN); + } else if (direction_ == DOWN && stops_below == 0) + { + stops_.remove (Stop(position_, ALL)); + gui_unpress_request_button (number_, (int)position_); + gui_unpress_call_button ((int)position_, UP); + gui_unpress_call_button ((int)position_, DOWN); + } + else if (direction_ == IDLE) + { stops_.remove (Stop(position_, ALL)); + gui_unpress_request_button (number_, (int)position_); + gui_unpress_call_button ((int)position_, UP); + gui_unpress_call_button ((int)position_, DOWN); + } else + { stops_.remove (Stop(position_, direction_)); + gui_unpress_call_button ((int)position_, direction_); + gui_unpress_request_button (number_, (int)position_); + } // TODO: Call into the GUI to open the door + gui_open_door (number_, (int)position_); std::cout << "Opening Door" << std::endl; } void Elevator::transition_close_door () { // TODO: Call into the GUI to close the door + gui_close_door (number_, (int)position_); std::cout << "Closing Door" << std::endl; } @@ -483,6 +519,9 @@ void Elevator::move () bool Elevator::is_idle () const { + if (stops_.size() != 0) + return false; + return direction_ == IDLE; }