Изначально все лифты находятся в состоянии покоя. Система спроектирована так, что количество этажей и число лифтовых шахт можно поменять, при этом раз��ер лифтов и этажей пересчитается.
Кнопки находятся в неактивном состоянии.
При нажатии на неактивную кнопку вызова программа ищет ближайший свободный лифт, расположенный к вызванному этажу. Поиск свободных лифтов происходит слева направа(как на картинке)
Данные лифтовой системы обновляются.
Вызов нескольких этажей также обрабатывается:

Лифт движется со скоростью 1 этаж за секунду.
При остановке на этаже лифт стоит 3 секунды и мигает:
Представляет собой массив объектов со свойствами уровня и состояния вызова:
При вызове обновляется состояние вызова.
Очередь реализована по принципу FIFO(First In First Out) - первый этаж в очереди будет обработан первым.
Очередь реализована через массив levelsQueue:
Кнопки при добавлении этажа в очередь подсвечиваются активным цветом.
Повторное нажатие активной кнопки не добавляет ее в очередь и не изменяет её активного цвета.
По прибытии лифта на этаж кнопка "отпускается".
Логика функции поиска ближайшего лифта findFreeClosestShaft вынесена в отдельный файл,т.к. довольно большая:
С помощью функции Array.prototype.reduce выбирается наиболее близкий свободный лифт. Обязательные условия - лифт должен быть свободен и расстояние между этажом и лифтом должно быть минимальным.
Если на этаже уже есть лифт - вызов пропускается.
Если свободный лифт не найден, возвращается объект со свойствами gap со значением макисмального этажа и allBusy со значение true, если все лифты заняты. В таком случае вызов помещается в очередь levelsQueue.
Реализовано частично
Система запоминает позицию лифта при beforeunload событии страницы, если лифт приехал на этаж и находится либо в состоянии покоя, либо мигает:
При перезагрузке/закрытие и открытии страницы система лифтов не возобновляет движение:no_entry:
Также имеется костыль недочет при изменении параметров системы(если отключить localStorage, число лифтов и кнопок можно менять в файле state.js):
Как уже упоминалось ранее, система расширяема: параметры shafts и levels меняются в файлах state.js и App.vue`.
Покажу еще несколько примеров:

git init
git clone https://github.com/wouldRewind/TrueConfTest.git
npm install
npm run start
npm run build









