import { Graphics } from 'pixi.js'; import { JlGraphic, VectorText } from 'jl-graphic'; const esbButtonConsts = { codeFontSize: 12, codeColor: 0xffffff, bodyLineColor: 0xffffff, bodyLineWidth: 4, bodyRectLineColor: 0xffffff, bodyRectLineWidth: 2, bodyRectWidth: 20, bodyRectHeight: 20, bodyCircleRadius: 5, bodyCircleColor: 0xffffff, bodyColor: 0x000000, pressedColor: 0xff0000, }; class EsbButton extends JlGraphic { static Type = 'esbButton'; codeGraph = new VectorText(''); circleBody = new Graphics(); rectBody = new Graphics(); lineBody = new Graphics(); constructor() { super(EsbButton.Type); this.addChild(this.codeGraph); this.addChild(this.rectBody); this.addChild(this.lineBody); this.addChild(this.circleBody); this.codeGraph.name = 'esb_code'; } get datas() { return this.getDatas(); } get state() { return this.getStates(); } doRepaint() { const codeGraph = this.codeGraph; codeGraph.text = this.datas.code; codeGraph.style.fill = esbButtonConsts.codeColor; codeGraph.setVectorFontSize(esbButtonConsts.codeFontSize); codeGraph.anchor.set(0.5); const codeTransform = this.datas?.childTransforms?.find((item) => item.name === 'esb_code'); if (codeTransform) { const position = codeTransform?.transform.position; const rotation = codeTransform?.transform?.rotation; codeGraph.position.set(position?.x, position?.y); codeGraph.rotation = rotation || 0; } else { codeGraph.position.set(-30, 0); } this.circleBody.clear(); this.circleBody.beginFill(this.state.down ? esbButtonConsts.pressedColor : esbButtonConsts.bodyCircleColor, 1); this.circleBody.drawCircle(0, 0, esbButtonConsts.bodyCircleRadius); this.circleBody.endFill(); this.rectBody.clear(); this.rectBody.beginFill(esbButtonConsts.bodyColor, 0); this.rectBody.lineStyle(esbButtonConsts.bodyRectLineWidth, this.state.down ? esbButtonConsts.pressedColor : esbButtonConsts.bodyRectLineColor); this.rectBody.drawRect(-esbButtonConsts.bodyRectWidth / 2, -esbButtonConsts.bodyRectHeight / 2, esbButtonConsts.bodyRectWidth, esbButtonConsts.bodyRectHeight); this.rectBody.endFill(); this.lineBody.clear(); const lineY = this.datas.flip ? esbButtonConsts.bodyRectHeight / 2 : -esbButtonConsts.bodyRectHeight / 2; this.lineBody.lineStyle(esbButtonConsts.bodyLineWidth, this.state.down ? esbButtonConsts.pressedColor : esbButtonConsts.bodyLineColor); this.lineBody.moveTo(-esbButtonConsts.bodyRectWidth / 2, lineY); this.lineBody.lineTo(esbButtonConsts.bodyRectWidth / 2, lineY); } } export { EsbButton };