Omnibus's picture
Upload 131 files
4ee4376
import tiles from './tiles';
import * as CONST from '../constants';
import position from './position';
import surrounding from './surrounding';
import related from './related';
export default class cell {
#data;
#debug = {};
surrounding;
city;
scene;
position;
water;
tiles;
related;
parent;
index;
constructor (options) {
this.#data = options.data;
this.scene = options.scene;
this.city = options.scene.city;
this.water = options.data.water;
this.index = options.index;
this.position = new position({ cell: this, data: this.#data });
this.tiles = new tiles({ cell: this, list: options.data.tiles._list });
this.surrounding = new surrounding({ cell: this });
return this;
}
create () {
this.tiles.create();
this.related = new related({ cell: this });
}
onPointerUp () {
}
onPointerDown () {
console.log(this);
}
onPointerMove () {
this.scene.city.map.selectedCell.x = this.x;
this.scene.city.map.selectedCell.y = this.y;
}
onPointerOver () {
this.scene.city.map.selectedCell.x = this.x;
this.scene.city.map.selectedCell.y = this.y;
this.tiles.sprites.forEach((sprite) => {
if (sprite.visible) sprite.setTint(0xaa0000);
});
this.related.forEach((cell) => {
cell.tiles.sprites.forEach((sprite) => {
if (sprite.visible) sprite.setTint(0xaa0000);
});
});
if (this.tiles.heightmap) {
if (this.tiles.heightmap.polygon.top){
this.tiles.heightmap.polygon.top.fillAlpha = 0.5;
}
if (this.tiles.heightmap.polygon.slope){
this.tiles.heightmap.polygon.slope.fillAlpha = 0.5;
}
}
}
onPointerOut () {
this.tiles.sprites.forEach((sprite) => {
if (sprite.visible) sprite.clearTint();
});
this.related.forEach((cell) => {
cell.tiles.sprites.forEach((sprite) => {
if (sprite.visible) sprite.clearTint();
});
});
if (this.tiles.heightmap) {
if (this.tiles.heightmap.polygon.top){
this.tiles.heightmap.polygon.top.fillAlpha = 1;
}
if (this.tiles.heightmap.polygon.slope){
this.tiles.heightmap.polygon.slope.fillAlpha = 1;
}
}
}
highlight (color = 0x00aa00) {
this.tiles.sprites.forEach((sprite) => {
if (sprite.visible) sprite.setTint(color);
});
}
clearHighlight () {
this.tiles.sprites.forEach((sprite) => {
if (sprite.visible) sprite.clearTint();
});
}
get depth () {
return this.position.depth;
}
set depth (depth) {
this.position.depth = depth;
}
get x () {
return this.position.x;
}
set x (x) {
this.position.x = x;
}
get y () {
return this.position.y;
}
set y (y) {
this.position.y = y;
}
get z () {
return this.position.z;
}
set z (z) {
this.position.z = z;
}
hide () {
this.tiles.hide();
}
show () {
this.tiles.show();
}
//
// draw a 1px box bounding box around the calculated cell position
//
debugBox () {
let bounds = {
x: this.position.topLeft.x,
y: this.position.topLeft.y,
w: this.position.right.x - this.position.left.x,
h: this.position.top.y - this.position.bottom.y,
};
this.#debug.box = this.scene.add.rectangle(bounds.x, bounds.y, bounds.w, bounds.h, 0x00ff00, 0.10);
this.#debug.box.setOrigin(CONST.ORIGIN_X, CONST.ORIGIN_Y);
this.#debug.box.setDepth(this.depth + 1024);
this.#debug.box.setStrokeStyle(1, 0x00ff00, 0.60);
//this.debugPoint();
}
debugPoint () {
//top left
this.#debug.topLeft = this.scene.add.circle(this.position.topLeft.x, this.position.topLeft.y, 3, 0xffffff, 1);
this.#debug.topLeft.setOrigin(CONST.ORIGIN_X, CONST.ORIGIN_Y);
this.#debug.topLeft.setDepth(this.depth + 1024);
// top middle
this.#debug.topMiddle = this.scene.add.circle(this.position.center.x, this.position.top.y, 3, 0xffff00, 1);
this.#debug.topMiddle.setOrigin(CONST.ORIGIN_X, CONST.ORIGIN_Y);
this.#debug.topMiddle.setDepth(this.depth + 1024);
// top right
this.#debug.topRight = this.scene.add.circle(this.position.topRight.x, this.position.topRight.y, 3, 0xff00ff, 1);
this.#debug.topRight.setOrigin(CONST.ORIGIN_X, CONST.ORIGIN_Y);
this.#debug.topRight.setDepth(this.depth + 1024);
// center left
this.#debug.centerLeft = this.scene.add.circle(this.position.left.x, this.position.center.y, 3, 0x00ffff, 1);
this.#debug.centerLeft.setOrigin(CONST.ORIGIN_X, CONST.ORIGIN_Y);
this.#debug.centerLeft.setDepth(this.depth + 1024);
// center middle
this.#debug.centerMiddle = this.scene.add.circle(this.position.center.x, this.position.center.y, 3, 0x0000ff, 1);
this.#debug.centerMiddle.setOrigin(CONST.ORIGIN_X, CONST.ORIGIN_Y);
this.#debug.centerMiddle.setDepth(this.depth + 1024);
// center right
this.#debug.centerRight = this.scene.add.circle(this.position.right.x, this.position.center.y, 3, 0x00ff00, 1);
this.#debug.centerRight.setOrigin(CONST.ORIGIN_X, CONST.ORIGIN_Y);
this.#debug.centerRight.setDepth(this.depth + 1024);
// bottom left
this.#debug.bottomLeft = this.scene.add.circle(this.position.bottomLeft.x, this.position.bottomLeft.y, 3, 0xff0000, 1);
this.#debug.bottomLeft.setOrigin(CONST.ORIGIN_X, CONST.ORIGIN_Y);
this.#debug.bottomLeft.setDepth(this.depth + 1024);
// bottom middle
this.#debug.bottomMiddle = this.scene.add.circle(this.position.center.x, this.position.bottom.y, 3, 0x666666, 1);
this.#debug.bottomMiddle.setOrigin(CONST.ORIGIN_X, CONST.ORIGIN_Y);
this.#debug.bottomMiddle.setDepth(this.depth + 1024);
// bottom right
this.#debug.bottomRight = this.scene.add.circle(this.position.bottomRight.x, this.position.bottomRight.y, 3, 0x000000, 1);
this.#debug.bottomRight.setOrigin(CONST.ORIGIN_X, CONST.ORIGIN_Y);
this.#debug.bottomRight.setDepth(this.depth + 1024);
}
//
// draw a text label with the cell location above all other objects
//
debugLabels () {
this.#debug.label = this.scene.add.text(this.position.center.x, this.position.center.y, this.x+','+this.y+','+this.z, { fontFamily: 'Verdana', fontSize: 8, color: '#ffffff' });
this.#debug.label.setDepth(this.depth + 128);
this.#debug.label.setOrigin(0.5, 0.5);
}
}