Spaces:
Build error
Build error
| import Base from '../base/Base.js'; | |
| import { Circle, Line } from '../utils/Geoms.js' | |
| const RadToDeg = Phaser.Math.RadToDeg; | |
| const WrapDegrees = Phaser.Math.Angle.WrapDegrees; | |
| const WrapRad = Phaser.Math.Angle.Wrap; | |
| const ShortestBetween = Phaser.Math.Angle.ShortestBetween; | |
| const DegToRad = Phaser.Math.DegToRad; | |
| const Rad270 = Phaser.Math.DegToRad(270); | |
| class Clock extends Base { | |
| constructor(scene, config) { | |
| super(scene, config); | |
| this.type = 'rexSpinnerClock'; | |
| this.minuteHandAngle = 0; | |
| this.hourHandAngle = 0; | |
| } | |
| buildShapes() { | |
| this.addShape((new Circle()).setName('border')); | |
| this.addShape((new Line()).setName('minuteHand')); | |
| this.addShape((new Line()).setName('hourHand')); | |
| } | |
| updateShapes() { | |
| var centerX = this.centerX; | |
| var centerY = this.centerY; | |
| var radius = this.radius; | |
| var lineWidth = Math.ceil(radius / 25); | |
| var borderRadius = radius - (lineWidth / 2); | |
| var minuteHandLength = radius * 0.8; | |
| var hourHandLength = radius * 0.5; | |
| var prevMinuteHandAngle = this.minuteHandAngle; | |
| this.minuteHandAngle = Math.PI * 2 * this.value; | |
| var angle0 = WrapDegrees(RadToDeg(prevMinuteHandAngle)); | |
| var angle1 = WrapDegrees(RadToDeg(this.minuteHandAngle)); | |
| var deltaAngle = ShortestBetween(angle0, angle1); | |
| this.hourHandAngle = WrapRad(this.hourHandAngle + (DegToRad(deltaAngle) / 12)) | |
| this.getShape('border') | |
| .lineStyle(lineWidth, this.color) | |
| .setRadius(borderRadius) | |
| .setCenterPosition(centerX, centerY); | |
| var angle = this.minuteHandAngle + Rad270; | |
| this.getShape('minuteHand') | |
| .lineStyle(lineWidth, this.color) | |
| .setP0(centerX, centerY) | |
| .setP1( | |
| centerX + (Math.cos(angle) * minuteHandLength), | |
| centerY + (Math.sin(angle) * minuteHandLength) | |
| ) | |
| var angle = this.hourHandAngle + Rad270; | |
| this.getShape('hourHand') | |
| .lineStyle(lineWidth, this.color) | |
| .setP0(centerX, centerY) | |
| .setP1( | |
| centerX + (Math.cos(angle) * hourHandLength), | |
| centerY + (Math.sin(angle) * hourHandLength) | |
| ) | |
| } | |
| } | |
| export default Clock; |