UNPKG

@petkoneo/phaser3-rex-plugins

Version:
206 lines (175 loc) 5.05 kB
import PathBase from '../PathBase.js'; import ArcTo from '../../../../../../geom/pathdata/ArcTo.js'; import FillStyleCanvas from '../../../../utils/render/FillStyleCanvas.js'; import LineStyleCanvas from '../../../../utils/render/LineStyleCanvas.js'; const DegToRad = Phaser.Math.DegToRad; class Arc extends PathBase { constructor(x, y, radiusX, radiusY, startAngle, endAngle, anticlockwise, pie) { if (x === undefined) { x = 0; } if (y === undefined) { y = 0; } if (radiusX === undefined) { radiusX = 0; } if (radiusY === undefined) { radiusY = 0; } if (startAngle === undefined) { startAngle = 0; } if (endAngle === undefined) { endAngle = 360; } if (anticlockwise === undefined) { anticlockwise = false; } if (pie === undefined) { pie = false; } super(); this.setCenterPosition(x, y); this.setRadius(radiusX, radiusY); this.setAngle(startAngle, endAngle, anticlockwise); this.setPie(pie); this.setIterations(32); } get x() { return this._x; } set x(value) { this.dirty = this.dirty || (this._x !== value); this._x = value; } get y() { return this._y; } set y(value) { this.dirty = this.dirty || (this._y !== value); this._y = value; } setCenterPosition(x, y) { if (y === undefined) { y = x; } this.x = x; this.y = y; return this; } get radiusX() { return this._radiusX; } set radiusX(value) { this.dirty = this.dirty || (this._radiusX !== value); this._radiusX = value; } get radiusY() { return this._radiusY; } set radiusY(value) { this.dirty = this.dirty || (this._radiusY !== value); this._radiusY = value; } setRadius(radiusX, radiusY) { if (radiusY === undefined) { radiusY = radiusX; } this.radiusX = radiusX; this.radiusY = radiusY; return this; } get startAngle() { return this._startAngle; } set startAngle(value) { this.dirty = this.dirty || (this._startAngle !== value); this._startAngle = value; } get endAngle() { return this._endAngle; } set endAngle(value) { this.dirty = this.dirty || (this._endAngle !== value); this._endAngle = value; } get anticlockwise() { return this._anticlockwise; } set anticlockwise(value) { this.dirty = this.dirty || (this._anticlockwise !== value); this._anticlockwise = value; } setAngle(startAngle, endAngle, anticlockwise) { // startAngle, endAngle in degrees if (anticlockwise === undefined) { anticlockwise = false; } this.startAngle = startAngle; this.endAngle = endAngle; this.anticlockwise = anticlockwise; return this; } get pie() { return this._pie; } set pie(value) { this.dirty = this.dirty || (this._pie !== value); this._pie = value; } setPie(pie) { if (pie === undefined) { pie = true; } this.pie = pie; return this; } get iterations() { return this._iterations; } set iterations(value) { this.dirty = this.dirty || (this._iterations !== value); this._iterations = value; } setIterations(iterations) { this.iterations = iterations; return this; } updateData() { this.pathData.length = 0; if (this.pie) { this.pathData.push(this.x, this.y); } ArcTo( this.x, this.y, this.radiusX, this.radiusY, this.startAngle, this.endAngle, this.anticlockwise, this.iterations, this.pathData ); if (this.pie) { this.pathData.push(this.x, this.y); } // Close this.pathData.push(this.pathData[0], this.pathData[1]); super.updateData(); return this; } canvasRender(ctx, dx, dy) { ctx.beginPath(); var x = this.x - dx, y = this.y - dy, startAngle = DegToRad(this.startAngle), endAngle = DegToRad(this.endAngle); if (this.pie) { ctx.moveTo(x, y); ctx.lineTo( x + Math.cos(startAngle) * this.radiusX, y + Math.sin(startAngle) * this.radiusY ); } ctx.ellipse( x, y, this.radiusX, this.radiusY, 0, startAngle, endAngle, this.anticlockwise ); if (this.pie) { ctx.lineTo(x, y); } if (this.isFilled) { FillStyleCanvas(ctx, this); ctx.fill(); } if (this.isStroked) { LineStyleCanvas(ctx, this); ctx.stroke(); } } } export default Arc;