Spaces:
Running
Running
import tile from './tile'; | |
import Phaser from 'phaser'; | |
import * as CONST from '../../constants'; | |
export default class heightmap extends tile { | |
constructor (options) { | |
options.type = CONST.T_HEIGHTMAP; | |
options.layerDepth = CONST.DEPTH_HEIGHTMAP; | |
super(options); | |
this.polygon = []; | |
} | |
get (id) { | |
let tile = super.get(id); | |
if (tile.heightmap && tile.heightmap.reference) { | |
tile = super.get(tile.heightmap.reference); | |
this.id = tile.id; | |
} | |
return tile; | |
} | |
check () { | |
if (!super.check()) | |
return false; | |
if (![256,257,258,259,260,261,262,263,264,265,266,267,268,269].includes(this.id)) return false; | |
return true; | |
} | |
position () { | |
this.x = this.cell.position.bottom.x - (this.tile.width / 2); | |
this.y = this.cell.position.bottom.y - (this.tile.height) - CONST.TILE_HEIGHT; | |
} | |
hide () { | |
this.polygon.forEach((face) => { | |
face.setVisible(false); | |
}); | |
} | |
show () { | |
this.polygon.forEach((face) => { | |
face.setVisible(true); | |
}); | |
} | |
create () { | |
if (!this.props.draw || !this.cell.scene.tiles[this.id].heightmap) return; | |
let heightmap = this.cell.scene.tiles[this.id].heightmap; | |
this.position(); | |
// colors | |
let baseColor = Phaser.Display.Color.ObjectToColor(this.color(this.cell.z)); | |
let baseColorUpper = Phaser.Display.Color.ObjectToColor(this.color(this.cell.z + 1)); | |
let alpha = 1; | |
let strokeColor = baseColor.clone().darken(60).color; | |
let lower = baseColor.clone().color; | |
let upper = baseColorUpper.clone().color; | |
let south = baseColor.clone().darken(10).color; | |
let east = baseColor.clone().darken(20).color; | |
let west = baseColor.clone().darken(30).color; | |
let southEast = baseColor.clone().lighten(10).color; | |
let southWest = baseColor.clone().darken(25).color; | |
let northEast = baseColor.clone().darken(40).color; | |
let northWest = baseColor.clone().darken(40).color; | |
// rock faces | |
let rockTop = baseColor.clone().color; | |
let rockSouthWest = baseColor.clone().darken(50).color; | |
let rockSouthEast = baseColor.clone().darken(50).color; | |
// polygons | |
if (heightmap.upper) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.upper, upper, alpha)); | |
if (heightmap.lower) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.lower, lower, alpha)); | |
if (heightmap.south) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.south, south, alpha)); | |
if (heightmap.east) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.east, east, alpha)); | |
if (heightmap.west) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.west, west, alpha)); | |
if (heightmap.southEast) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.southEast, southEast, alpha)); | |
if (heightmap.southWest) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.southWest, southWest, alpha)); | |
if (heightmap.northEast) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.northEast, northEast, alpha)); | |
if (heightmap.northWest) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.northWest, northWest, alpha)); | |
if (heightmap.rockTop) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.rockTop, rockTop, alpha)); | |
if (heightmap.rockSouthWest) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.rockSouthWest, rockSouthWest, alpha)); | |
if (heightmap.rockSouthEast) this.polygon.push(this.cell.scene.add.polygon(this.x, this.y, heightmap.rockSouthEast, rockSouthEast, alpha)); | |
// polygon attributes | |
this.polygon.forEach((face) => { | |
face.setStrokeStyle(1, strokeColor, alpha); | |
face.setScale(CONST.SCALE); | |
face.setOrigin(0,0); | |
face.setDepth(this.depth); | |
face.setVisible(false); | |
}); | |
} | |
color (height) { | |
if (height > 31) | |
height = 31; | |
if (height < 0) | |
height = 0; | |
let terrain = []; | |
terrain[0] = { r: 0, g: 4, b: 255, a: 1 }; | |
terrain[1] = { r: 0, g: 37, b: 255, a: 1 }; | |
terrain[2] = { r: 0, g: 68, b: 255, a: 1 }; | |
terrain[3] = { r: 0, g: 99, b: 255, a: 1 }; | |
terrain[4] = { r: 0, g: 131, b: 255, a: 1 }; | |
terrain[5] = { r: 0, g: 163, b: 255, a: 1 }; | |
terrain[6] = { r: 0, g: 195, b: 255, a: 1 }; | |
terrain[7] = { r: 3, g: 227, b: 255, a: 1 }; | |
terrain[8] = { r: 0, g: 255, b: 251, a: 1 }; | |
terrain[9] = { r: 9, g: 255, b: 219, a: 1 }; | |
terrain[10] = { r: 11, g: 255, b: 187, a: 1 }; | |
terrain[11] = { r: 12, g: 255, b: 155, a: 1 }; | |
terrain[12] = { r: 14, g: 255, b: 123, a: 1 }; | |
terrain[13] = { r: 14, g: 255, b: 91, a: 1 }; | |
terrain[14] = { r: 16, g: 255, b: 58, a: 1 }; | |
terrain[15] = { r: 16, g: 255, b: 25, a: 1 }; | |
terrain[16] = { r: 19, g: 255, b: 0, a: 1 }; | |
terrain[17] = { r: 41, g: 255, b: 0, a: 1 }; | |
terrain[18] = { r: 70, g: 255, b: 0, a: 1 }; | |
terrain[19] = { r: 101, g: 255, b: 0, a: 1 }; | |
terrain[20] = { r: 132, g: 255, b: 0, a: 1 }; | |
terrain[21] = { r: 164, g: 255, b: 0, a: 1 }; | |
terrain[22] = { r: 195, g: 255, b: 0, a: 1 }; | |
terrain[23] = { r: 227, g: 255, b: 0, a: 1 }; | |
terrain[24] = { r: 255, g: 251, b: 0, a: 1 }; | |
terrain[25] = { r: 255, g: 219, b: 0, a: 1 }; | |
terrain[26] = { r: 255, g: 187, b: 0, a: 1 }; | |
terrain[27] = { r: 255, g: 155, b: 0, a: 1 }; | |
terrain[28] = { r: 255, g: 123, b: 0, a: 1 }; | |
terrain[29] = { r: 255, g: 91, b: 0, a: 1 }; | |
terrain[30] = { r: 255, g: 59, b: 0, a: 1 }; | |
terrain[31] = { r: 255, g: 26, b: 0, a: 1 }; | |
return terrain[height]; | |
} | |
} |