Spaces:
Running
Running
import Phaser from 'phaser'; | |
import location from './location'; | |
import corners from './corners'; | |
import * as CONST from '../constants'; | |
export default class position { | |
#depth = 0; | |
#depthAdjustment = 0; | |
#rotate = false; | |
#location; | |
#cell; | |
#offset; | |
#seaLevel; | |
#corners; | |
constructor (options) { | |
this.#cell = options.cell; | |
this.#location = new location(options.data.x, options.data.y, options.data.z); | |
this.#rotate = options.data.rotate; | |
this.#corners = new corners({ cell: this.#cell, corners: options.data.corners }); | |
this.updateOffset(); | |
} | |
get depth () { | |
return (this.#location.x + this.#location.y) * 64; | |
} | |
set depth (depth) { | |
this.#depthAdjustment = depth; | |
} | |
get rotate () { | |
return this.#rotate; | |
} | |
set rotate (rotate) { | |
this.#rotate = rotate; | |
} | |
get corners () { | |
return this.#corners; | |
} | |
set corners (corners) { | |
this.#corners = new corners(corners); | |
} | |
get underwater () { | |
if (this.z < this.#cell.scene.city.waterLevel && [CONST.TERRAIN_SUBMERGED, CONST.TERRAIN_SHORE].includes(this.#cell.water.type)) | |
return true; | |
else | |
return false; | |
} | |
get seaLevel () { | |
let offset = (this.#cell.scene.city.waterLevel - this.z) * CONST.LAYER_OFFSET; | |
if (offset < 0) | |
offset = 0; | |
return offset; | |
} | |
get offset () { | |
return this.#offset; | |
} | |
updateOffset () { | |
this.#offset = new location( | |
(this.x - this.y) * (CONST.TILE_WIDTH / 2), | |
(this.y + this.x) * (CONST.TILE_HEIGHT / 2), | |
(CONST.LAYER_OFFSET * this.z) + CONST.LAYER_OFFSET | |
); | |
} | |
get location () { | |
return this.#location; | |
} | |
set x (x) { | |
this.#location.x = x; | |
this.updateOffset(); | |
} | |
set y (y) { | |
this.#location.y = y; | |
this.updateOffset(); | |
} | |
set z (z) { | |
this.#location.z = z; | |
this.updateOffset(); | |
} | |
get x () { | |
return this.#location.x; | |
} | |
get y () { | |
return this.#location.y; | |
} | |
get z () { | |
return this.#location.z; | |
} | |
get top () { | |
return new Phaser.Math.Vector2( | |
this.#offset.x + (CONST.TILE_WIDTH / 2), | |
this.#offset.y - this.#offset.z - CONST.TILE_HEIGHT | |
); | |
} | |
get topLeft () { | |
return new Phaser.Math.Vector2( | |
this.#offset.x, | |
this.#offset.y - this.#offset.z - CONST.TILE_HEIGHT | |
); | |
} | |
get topRight () { | |
return new Phaser.Math.Vector2( | |
this.#offset.x + CONST.TILE_WIDTH, | |
this.#offset.y - this.#offset.z - CONST.TILE_HEIGHT | |
); | |
} | |
get center () { | |
return new Phaser.Math.Vector2( | |
this.#offset.x + (CONST.TILE_WIDTH / 2), | |
(this.#offset.y - this.#offset.z) - (CONST.TILE_WIDTH / 2) | |
); | |
} | |
get centerLeft () { | |
return new Phaser.Math.Vector2( | |
this.#offset.x, | |
(this.#offset.y - this.#offset.z) - (CONST.TILE_WIDTH / 2) | |
); | |
} | |
get centerRight () { | |
return new Phaser.Math.Vector2( | |
this.#offset.x + CONST.TILE_WIDTH, | |
(this.#offset.y - this.#offset.z) - (CONST.TILE_WIDTH / 2) | |
); | |
} | |
get bottom () { | |
return new Phaser.Math.Vector2( | |
this.#offset.x + (CONST.TILE_WIDTH / 2), | |
this.#offset.y - this.#offset.z | |
); | |
} | |
get bottomLeft () { | |
return new Phaser.Math.Vector2( | |
this.#offset.x, | |
this.#offset.y - this.#offset.z | |
); | |
} | |
get bottomRight () { | |
return new Phaser.Math.Vector2( | |
this.#offset.x + CONST.TILE_WIDTH, | |
this.#offset.y - this.#offset.z | |
); | |
} | |
} |