Added the maps-module to the iwmlib.
Migrated a ot of the content from the tuesch to the iwmlib. This is before the decoupeling of the layers.
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
import { Points } from '../../utils.js'
|
||||
|
||||
/* globals PIXI */
|
||||
|
||||
export class FlagType {
|
||||
static get bottomLeft() {
|
||||
return { x: 1, y: -1 }
|
||||
}
|
||||
static get bottomRight() {
|
||||
return { x: -1, y: -1 }
|
||||
}
|
||||
static get topLeft() {
|
||||
return { x: -1, y: 1 }
|
||||
}
|
||||
static get topRight() {
|
||||
return { x: 1, y: 1 }
|
||||
}
|
||||
|
||||
static toString(flagType) {
|
||||
let str = ''
|
||||
if (flagType.x && flagType.y) {
|
||||
if (flagType.y == 1) str += 'bottom'
|
||||
else if (flagType.y == -1) str += 'top'
|
||||
else str += '_INVALID_Y_'
|
||||
|
||||
if (flagType.x == 1) str += 'Right'
|
||||
else if (flagType.x == -1) str += 'Left'
|
||||
else str += '_INVALID_X_'
|
||||
} else str = 'Invalid FlagType: ' + flagType.toString()
|
||||
|
||||
return str
|
||||
}
|
||||
}
|
||||
|
||||
export class FlagPolygon extends PIXI.Polygon {
|
||||
constructor({
|
||||
type = FlagType.bottomLeft,
|
||||
width = 100,
|
||||
height = 30,
|
||||
notchSize = 10,
|
||||
notchWidth = null,
|
||||
notchHeight = null,
|
||||
originOffset = { x: 0, y: 0 }
|
||||
} = {}) {
|
||||
let points = []
|
||||
|
||||
let dimensions = { x: width, y: height }
|
||||
dimensions = Points.multiply(dimensions, type)
|
||||
|
||||
notchWidth = notchWidth == null ? notchSize : notchWidth
|
||||
notchHeight = notchHeight == null ? notchSize : notchHeight
|
||||
|
||||
notchSize = { x: notchWidth, y: notchHeight }
|
||||
notchSize = Points.multiply(notchSize, type)
|
||||
|
||||
originOffset = Points.multiply(originOffset, type)
|
||||
|
||||
let point = new PIXI.Point(originOffset.x, originOffset.y)
|
||||
points.push(point.clone())
|
||||
|
||||
point.y += notchSize.y
|
||||
points.push(point.clone())
|
||||
|
||||
point.y += dimensions.y
|
||||
points.push(point.clone())
|
||||
|
||||
point.x += dimensions.x
|
||||
points.push(point.clone())
|
||||
|
||||
point.y -= dimensions.y
|
||||
points.push(point.clone())
|
||||
|
||||
point.x -= dimensions.x - notchSize.x
|
||||
points.push(point.clone())
|
||||
|
||||
// close polygon
|
||||
points.push(points[0].clone())
|
||||
|
||||
super(points)
|
||||
|
||||
this.type = type
|
||||
this.dimensions = dimensions
|
||||
this.notchSize = notchSize
|
||||
this.originOffset = originOffset
|
||||
}
|
||||
|
||||
getPoint(i) {
|
||||
if (i >= 0) {
|
||||
let idx = i * 2
|
||||
return [this.points[idx], this.points[idx + 1]]
|
||||
} else {
|
||||
let idx = (Math.floor(this.points.length / 2) + i) * 2
|
||||
return [this.points[idx], this.points[idx + 1]]
|
||||
}
|
||||
}
|
||||
|
||||
get notch() {
|
||||
let points = [this.getPoint(0), this.getPoint(1), this.getPoint(-2), this.getPoint(0)]
|
||||
let notchPolygon = []
|
||||
|
||||
points.forEach(point => {
|
||||
notchPolygon = notchPolygon.concat(point)
|
||||
})
|
||||
|
||||
return notchPolygon
|
||||
}
|
||||
get rect() {
|
||||
let points = [this.getPoint(1), this.getPoint(2), this.getPoint(3), this.getPoint(4), this.getPoint(1)]
|
||||
|
||||
let rectPolygon = []
|
||||
points.forEach(point => {
|
||||
rectPolygon = rectPolygon.concat(point)
|
||||
})
|
||||
return rectPolygon
|
||||
}
|
||||
|
||||
placeText(text, padding) {
|
||||
text.position = Points.add(this.originOffset, { x: 0, y: this.notchSize.y })
|
||||
padding = Points.multiply(padding, this.type)
|
||||
text.position = Points.add(text.position, padding)
|
||||
|
||||
if (this.type.y == -1) text.position.y -= text.height
|
||||
|
||||
if (this.type.x == -1) text.position.x -= text.width
|
||||
}
|
||||
}
|
||||
|
||||
export class Flag extends PIXI.Graphics {
|
||||
constructor(
|
||||
{
|
||||
type = FlagType.bottomLeft,
|
||||
width = 100,
|
||||
height = 30,
|
||||
notchSize = 10,
|
||||
notchWidth = null,
|
||||
notchHeight = null,
|
||||
originOffset = { x: 0, y: 0 }
|
||||
} = {},
|
||||
nativeLines = false
|
||||
) {
|
||||
super(nativeLines)
|
||||
|
||||
this.flagPolygon = new FlagPolygon({
|
||||
type,
|
||||
width,
|
||||
height,
|
||||
notchSize,
|
||||
notchWidth,
|
||||
notchHeight,
|
||||
originOffset
|
||||
})
|
||||
|
||||
this.draw()
|
||||
}
|
||||
|
||||
draw() {
|
||||
this.drawPolygon(this.flagPolygon)
|
||||
}
|
||||
|
||||
get typeName() {
|
||||
return FlagType.toString(this.type)
|
||||
}
|
||||
}
|
||||
|
||||
export class Label extends PIXI.Graphics {
|
||||
constructor(text, textStyle = new PIXI.TextStyle(), nativeLines = false) {
|
||||
super(nativeLines)
|
||||
this._text = new PIXI.Text(text, textStyle)
|
||||
this.addChild(this._text)
|
||||
}
|
||||
|
||||
get text() {
|
||||
return this._text
|
||||
}
|
||||
}
|
||||
|
||||
export class FlagLabel extends Label {
|
||||
constructor(text, textStyle, flagStyle, nativeLines = false) {
|
||||
super(text, textStyle, nativeLines)
|
||||
this.flagPolygon = new FlagPolygon(flagStyle)
|
||||
this.draw()
|
||||
}
|
||||
|
||||
draw() {
|
||||
this.drawPolygon(this.flagPolygon)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user