Omnibus's picture
Upload 131 files
4ee4376
import calculatePathBetweenCells from '../../utils/calculatePathBetweenCells';
import * as CONST from '../../constants';
export default class roads {
scene;
direction;
active = false;
start = { x: 0, y: 0 };
end = { x: 0, y: 0 };
cells = [];
tile = {
'ns': 29,
'ew': 30,
};
constructor (options) {
this.scene = options.scene;
}
// y = 0 north
// y = 127 south
// x = 0 west
// x = 127 east
calculateDirection () {
let sx = this.start.x;
let sy = this.start.y;
let ex = this.end.x;
let ey = this.end.y;
if (sx == ex && sy != ey) this.direction = 'ns';
if (sx != ex && sy == ey) this.direction = 'ew';
}
onPointerDown (pointer, gameObject) {
this.active = true;
this.cells = [];
if (gameObject[0])
this.start = { x: gameObject[0].cell.x, y: gameObject[0].cell.y };
}
onPointerUp () {
this.active = false;
this.cells.forEach((cell) => {
cell.clearHighlight();
});
this.calculateDirection();
if (this.cells.length > 0)
this.cells.forEach((cell) => {
cell.tiles.set(CONST.T_ROAD, this.tile[this.direction]);
cell.tiles[CONST.T_ROAD].create();
});
}
onPointerMove () {
return;
}
onPointerOver (pointer, gameObject) {
if (!this.active) return;
if (gameObject[0])
this.end = { x: gameObject[0].cell.x, y: gameObject[0].cell.y };
let list = calculatePathBetweenCells(this.start, this.end);
for (let i = 0; i < list.length; i++)
this.cells.push(this.scene.city.map.cells?.[list[i].x]?.[list[i].y]);
this.cells.forEach((cell) => {
cell.highlight();
});
}
onPointerOut () {
if (!this.active) return;
this.cells.forEach((cell) => {
cell.clearHighlight();
});
this.cells = [];
return;
}
}