X-Git-Url: https://irasnyder.com/gitweb/?a=blobdiff_plain;f=elevator.cpp;h=b8cdb5000afcbcec43649c1d2a3aaa8af0e19499;hb=7a701939aeed1d48e00c4d557a81835b0c4a0de7;hp=4a5eb37561ba85c667635aea5c0bd826ce012e95;hpb=a897a1cb95028e3dbfa370ddafcc9a27110f96a7;p=cs356-p1-elevator.git diff --git a/elevator.cpp b/elevator.cpp index 4a5eb37..b8cdb50 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_); std::cout << "Updating the GUI with our position: " << position_ << std::endl; } @@ -126,6 +136,7 @@ void Elevator::transition_move_down () position_ -= ELEVATOR_STEP; // TODO: Call into the GUI to update the position + gui_update_position_label (number_, (float)position_); std::cout << "Updating the GUI with our position: " << position_ << std::endl; } @@ -158,19 +169,41 @@ 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_); + } // 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; }