2 changed files with 98 additions and 0 deletions
@ -0,0 +1,59 @@ |
|||||
|
import { Container, Text, TextStyle, type TextStyleOptions } from "pixi.js"; |
||||
|
|
||||
|
export interface LabelOptions { |
||||
|
text: string; |
||||
|
style?: TextStyleOptions; |
||||
|
position?: { x: number; y: number }; |
||||
|
anchor?: { x: number; y: number }; |
||||
|
} |
||||
|
|
||||
|
export class Label { |
||||
|
private _container: Container; |
||||
|
private _text: Text; |
||||
|
|
||||
|
constructor(opts: LabelOptions) { |
||||
|
this._container = new Container(); |
||||
|
const style = new TextStyle({ |
||||
|
fontFamily: "Arial", |
||||
|
fontSize: 30, |
||||
|
fill: 0xffffff, |
||||
|
...opts.style, |
||||
|
}); |
||||
|
this._text = new Text({ |
||||
|
text: opts.text, |
||||
|
style, |
||||
|
}); |
||||
|
if (opts.anchor) { |
||||
|
this._text.anchor.set(opts.anchor.x, opts.anchor.y); |
||||
|
} |
||||
|
if (opts.position) { |
||||
|
this._container.position.set(opts.position.x, opts.position.y); |
||||
|
} |
||||
|
this._container.addChild(this._text); |
||||
|
} |
||||
|
|
||||
|
get container(): Container { |
||||
|
return this._container; |
||||
|
} |
||||
|
|
||||
|
get text(): Text { |
||||
|
return this._text; |
||||
|
} |
||||
|
|
||||
|
setText(text: string): void { |
||||
|
this._text.text = text; |
||||
|
} |
||||
|
|
||||
|
getText(): string { |
||||
|
return this._text.text; |
||||
|
} |
||||
|
|
||||
|
setStyle(style: TextStyleOptions): void { |
||||
|
this._text.style = new TextStyle({ |
||||
|
...this._text.style, |
||||
|
...style, |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export default Label; |
||||
@ -0,0 +1,39 @@ |
|||||
|
import { Container, Graphics, type ContainerOptions } from "pixi.js"; |
||||
|
|
||||
|
export interface PanelOptions extends ContainerOptions { |
||||
|
width: number; |
||||
|
height: number; |
||||
|
backgroundColor?: number; |
||||
|
padding?: number; |
||||
|
alpha?: number; |
||||
|
} |
||||
|
|
||||
|
export class Panel extends Container { |
||||
|
private bg: Graphics; |
||||
|
|
||||
|
constructor(opts: PanelOptions) { |
||||
|
super(opts); |
||||
|
this.bg = new Graphics(); |
||||
|
this.drawBackground(opts); |
||||
|
this.addChild(this.bg); |
||||
|
} |
||||
|
|
||||
|
private drawBackground(opts: PanelOptions): void { |
||||
|
this.bg.clear(); |
||||
|
this.bg.roundRect(0, 0, opts.width, opts.height, 8); |
||||
|
this.bg.fill(opts.backgroundColor ?? 0x000000); |
||||
|
this.bg.alpha = opts.alpha ?? 0.8; |
||||
|
} |
||||
|
|
||||
|
resize(width: number, height: number): void { |
||||
|
this.bg.clear(); |
||||
|
this.bg.roundRect(0, 0, width, height, 8); |
||||
|
this.bg.fill(0x000000); |
||||
|
} |
||||
|
|
||||
|
setBackgroundColor(color: number): void { |
||||
|
this.bg.tint = color; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export default Panel; |
||||
Loading…
Reference in new issue