/
Ntropy
/
ElevatorSaga
Обзор
Документация
Войти
/
Ntropy
/
ElevatorSaga
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
ElevatorScript.js
152 строки
6 KB
Ntropy
update ElevatorScript.js
08 апр 2025, 04:31
08 апр 2025, 04:31
14bbef8
Код
Авторство
О чём код?
{ init: (elevators, floors) => { var dbg = true; // var elCur = 0; var inStops = {}; var upStops = {}; var downStops = {}; var isUps = {}; for (var floor of floors) { floor.on('up_button_pressed', (floor => (() => { if (dbg) { dbg = false; debugger; } var floorNum = floor.floorNum(); var elCur = (Math.random() < 0.5) ? 0 : 1; // floorNum; // if (floorNum % 2 == 0) { // if (elevators[1].loadFactor() < elevators[0].loadFactor()) { // var elCur = 1; // } /*} else { var elCur = 2; if (elevators[3].loadFactor() < elevators[2].loadFactor()) { var elCur = 3; }*/ // } upStops[elCur + '_' + floorNum] = true; // elCur = (elCur + 1) % elevators.length; }))(floor)); floor.on('down_button_pressed', (floor => (() => { var floorNum = floor.floorNum(); var elCur = (Math.random() < 0.5) ? 0 : 1; // floorNum; // if (floorNum % 2 == 0) { // if (elevators[1].loadFactor() < elevators[0].loadFactor()) { // var elCur = 1; // } /*} else { var elCur = 2; if (elevators[3].loadFactor() < elevators[2].loadFactor()) { var elCur = 3; }*/ // } downStops[elCur + '_' + floorNum] = true; // elCur = (elCur + 1) % elevators.length; }))(floor)); } for (var n = 0; n < elevators.length; n += 1) { if (dbg) { dbg = false; debugger; } var elevator = elevators[n]; isUps[n] = (n % 2 == 0); // true; // ((n >> 1) % 2 == 0); elevator.goingUpIndicator(true); elevator.goingDownIndicator(true); elevator.goToFloor((n % 2 == 0) ? 0 : floors.length - 1) ; // n); // (((n >> 1) % 2 == 0)) ? 0 : floors.length - 1); elevator.on("floor_button_pressed", (elNum => (floorNum => { inStops[elNum + '_' + floorNum] = true; }))(n)); elevator.on("passing_floor", (elNum => ((floorNum, direction) => { var elevator = elevators[elNum]; var isStop = false; if (elevator.loadFactor() < 0.9) { if (isUps[elNum] ? upStops[elNum + '_' + floorNum] : downStops[elNum + '_' + floorNum]) { isStop = true; } } if (isStop) { elevator.goToFloor(floorNum, true); } }))(n)); elevator.on("stopped_at_floor", (elNum => (floorNum => { inStops[elNum + '_' + floorNum] = false; upStops[elNum + '_' + floorNum] = false; downStops[elNum + '_' + floorNum] = false; }))(n)); elevator.on("idle", (elNum => (() => { var elevator = elevators[elNum]; var currentFloor = elevator.currentFloor(); var nextFloor = currentFloor; var stopsCount = Object.entries(inStops).filter(([name, value]) => name.startsWith(elNum + '_') && value).length; var upStopsCount = Object.entries(upStops).filter(([name, value]) => name.startsWith(elNum + '_') && value).length; var downStopsCount = Object.entries(downStops).filter(([name, value]) => name.startsWith(elNum + '_') && value).length; if (stopsCount > 0 || upStopsCount > 0 || downStopsCount > 0) { while(true) { if (isUps[elNum]) { if (nextFloor + 1 < floors.length) { nextFloor += 1; } else { isUps[elNum] = false; nextFloor -= 1; } } else { if (nextFloor - 1 >= 0) { nextFloor -= 1; } else { isUps[elNum] = true; nextFloor += 1; } } var isBreak = false; if (inStops[elNum + '_' + nextFloor]) { isBreak = true; } else { if (elevator.loadFactor() < 0.9) { var nextIsLast = (nextFloor == 0) || (nextFloor == floors.length - 1); if (nextIsLast && (upStops[elNum + '_' + nextFloor] || downStops[elNum + '_' + nextFloor])) { isBreak = true; } else { if (isUps[elNum] ? upStops[elNum + '_' + nextFloor] : downStops[elNum + '_' + nextFloor]) { isBreak = true; /* } else { if (isUps[elNum] && downStops[elNum + '_' + nextFloor] && downStopsCount == 1) { isBreak = true; } if (!isUps[elNum] && upStops[elNum + '_' + nextFloor] && upStopsCount == 1) { isBreak = true; } */ } } } } if (isBreak) { break; } } if (nextFloor != currentFloor) { elevator.goToFloor(nextFloor); } } }))(n)); } }, update: (dt, elevators, floors) => { // We normally don't need to do anything here } }