69 lines
2.3 KiB
JavaScript
69 lines
2.3 KiB
JavaScript
"use strict";
|
|
|
|
const ElevatorModel = (function(){
|
|
|
|
const DIRECTIONS = {
|
|
north : {x : 0, z : -1},
|
|
south : {x : 0, z : 1},
|
|
east : {x : 1, z : 0},
|
|
west : {x : -1, z : 0}
|
|
};
|
|
|
|
const ElevatorModel = function(hollow_bond, inputs = {}){
|
|
|
|
const self = this;
|
|
|
|
this.id = ElevatorModel.get_id(inputs.x, inputs.y, inputs.z);
|
|
this.group_id = Common.get_value("group_id", inputs, "");
|
|
|
|
this.x = Common.get_value("x", inputs, 0) | 0;
|
|
this.y = Common.get_value("y", inputs, 0) | 0;
|
|
this.z = Common.get_value("z", inputs, 0) | 0;
|
|
this.floor = Common.get_value("floor", inputs, 0) | 0;
|
|
|
|
this.width = hollow_bond.elevator_size;
|
|
this.height = hollow_bond.elevator_height;
|
|
this.depth = hollow_bond.elevator_size;
|
|
this.padding = hollow_bond.elevator_padding;
|
|
|
|
// Orientación de la puerta: "north", "south", "east", "west"
|
|
this.facing = Common.get_value("facing", inputs, "north");
|
|
|
|
// Rango de pisos y habitaciones asociadas
|
|
this.floors_from = Common.get_value("floors_from", inputs, 0) | 0;
|
|
this.floors_count = Common.get_value("floors_count", inputs, 1) | 0;
|
|
this.rooms = Common.get_value("rooms", inputs, []);
|
|
this.room = null;
|
|
|
|
/**
|
|
* Obtiene la habitación asociada al piso destino mediante indexado relativo.
|
|
* @param {number} floor_number
|
|
* @returns {RoomModel|null}
|
|
*/
|
|
this.get_room_at_floor = floor_number => {
|
|
|
|
const index = floor_number - self.floors_from;
|
|
|
|
return (index >= 0 && index < self.rooms.length) ? self.rooms[index] : null;
|
|
};
|
|
|
|
/**
|
|
* Devuelve las coordenadas de la casilla frente a la puerta del ascensor.
|
|
*/
|
|
this.get_door_threshold = () => {
|
|
|
|
const direction = DIRECTIONS[self.facing] || DIRECTIONS.north;
|
|
|
|
return {
|
|
x : self.x + (direction.x > 0 ? self.width : (direction.x < 0 ? -1 : 0)),
|
|
z : self.z + (direction.z > 0 ? self.depth : (direction.z < 0 ? -1 : 0)),
|
|
facing : self.facing
|
|
};
|
|
};
|
|
|
|
};
|
|
|
|
ElevatorModel.get_id = (x, y, z) => `elevator_${x}_${y}_${z}`;
|
|
|
|
return ElevatorModel;
|
|
})(); |