UNPKG

phaser4-rex-plugins

Version:
261 lines (205 loc) 6.96 kB
import BaseShapes from '../shapes/BaseShapes.js'; import ShapesUpdateMethods from './methods/ShapesUpdateMethods.js'; import EaseDirectionMethods from './methods/EaseDirectionMethods.js'; const GetValue = Phaser.Utils.Objects.GetValue; const IsPlainObject = Phaser.Utils.Objects.IsPlainObject; const DegToRad = Phaser.Math.DegToRad; const RadToDeg = Phaser.Math.RadToDeg class Triangle extends BaseShapes { constructor(scene, x, y, width, height, fillColor, fillAlpha) { var strokeColor, strokeAlpha, strokeWidth, arrowOnly; var direction, easeDuration, padding; var radius; if (IsPlainObject(x)) { var config = x; x = config.x; y = config.y; width = config.width; height = config.height; fillColor = config.color; fillAlpha = config.alpha; strokeColor = config.strokeColor; strokeAlpha = config.strokeAlpha; strokeWidth = config.strokeWidth; arrowOnly = config.arrowOnly; direction = config.direction; easeDuration = config.easeDuration; padding = config.padding; radius = config.radius; } if (x === undefined) { x = 0; } if (y === undefined) { y = 0; } if (width === undefined) { width = 1; } if (height === undefined) { height = width; } if (arrowOnly === undefined) { arrowOnly = false; } if (direction === undefined) { direction = 0; } if (easeDuration === undefined) { easeDuration = 0; } if (padding === undefined) { padding = 0; } if (radius === undefined) { radius = undefined; } super(scene, x, y, width, height); this.type = 'rexTriangle'; this.setFillStyle(fillColor, fillAlpha); if ((strokeColor !== undefined) && (strokeWidth === undefined)) { strokeWidth = 2; } this.setStrokeStyle(strokeWidth, strokeColor, strokeAlpha); this.setArrowOnly(arrowOnly); this.setDirection(direction, easeDuration); this.setPadding(padding); this.setRadius(radius); this.buildShapes(); } get arrowOnly() { return this._arrowOnly; } set arrowOnly(value) { this.dirty = this.dirty || (this._arrowOnly != value); this._arrowOnly = value; } setArrowOnly(enable) { if (enable === undefined) { enable = true; } this.arrowOnly = enable; return this; } get direction() { return this._direction; } set direction(value) { value = ParseDirection(value); if (this._direction === value) { return; } if ((this.easeDuration > 0) && (this._direction !== undefined)) { this.previousDirection = this._direction; } else { this.previousDirection = undefined; } this._direction = value; this.verticeAngle = value * 90; this.dirty = true; if (this.previousDirection !== undefined) { this.playEaseDirectionation(); } else { this.stopEaseDirection(); } } setDirection(direction, easeDuration) { if (easeDuration !== undefined) { this.setEaseDuration(easeDuration); } this.direction = direction; return this; } toggleDirection(easeDuration) { this.setDirection((this.direction + 2), easeDuration); return this; } get easeDirectionProgress() { return this._easeDirectionProgress; } set easeDirectionProgress(value) { if (this._easeDirectionProgress === value) { return; } this._easeDirectionProgress = value; this.dirty = true; } setPadding(left, top, right, bottom) { if (typeof left === 'object') { var config = left; // If they specify x and/or y this applies to all var x = GetValue(config, 'x', null); if (x !== null) { left = x; right = x; } else { left = GetValue(config, 'left', 0); right = GetValue(config, 'right', left); } var y = GetValue(config, 'y', null); if (y !== null) { top = y; bottom = y; } else { top = GetValue(config, 'top', 0); bottom = GetValue(config, 'bottom', top); } } else { if (left === undefined) { left = 0; } if (top === undefined) { top = left; } if (right === undefined) { right = left; } if (bottom === undefined) { bottom = top; } } if (this.padding === undefined) { this.padding = {}; } this.dirty = this.dirty || (this.padding.left != left) || (this.padding.top != top) || (this.padding.right != right) || (this.padding.bottom != bottom); this.padding.left = left; this.padding.top = top; this.padding.right = right; this.padding.bottom = bottom; // Switch to fit mode this.setRadius(); return this; } get radius() { return this._radius; } set radius(value) { this.dirty = this.dirty || (this._radius != value); this._radius = value; } setRadius(radius) { this.radius = radius; // 0: fit mode // 1: circle mode this.shapeMode = (radius == null) ? 0 : 1; return this; } get verticeRotation() { return this._verticeRotation; } set verticeRotation(value) { this.dirty = this.dirty || (this._verticeRotation != value); this._verticeRotation = value; } setVerticeRotation(rotation) { this.verticeRotation = rotation; return this; } get verticeAngle() { return RadToDeg(this.verticeRotation); } set verticeAngle(value) { this.verticeRotation = DegToRad(value); } setVerticeAngle(angle) { this.verticeAngle = angle; return this; } } const DirectionNameMap = { right: 0, down: 1, left: 2, up: 3 } var ParseDirection = function (direction) { if (typeof (direction) === 'string') { direction = DirectionNameMap[direction]; } direction = direction % 4; return direction; } Object.assign( Triangle.prototype, ShapesUpdateMethods, EaseDirectionMethods, ) export default Triangle;