58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
|
|
import {Vector, VectorInteger} from "../../shared_js/class/Vector.js";
|
|
import {Component, Moving} from "../../shared_js/class/interface.js";
|
|
|
|
// conflict with Text
|
|
class TextElem implements Component {
|
|
ctx: CanvasRenderingContext2D;
|
|
pos: VectorInteger;
|
|
color: string;
|
|
size: number;
|
|
font: string;
|
|
text: string = "";
|
|
constructor(pos: VectorInteger, size: number,
|
|
ctx: CanvasRenderingContext2D, color: string, font: string = "Bit5x3")
|
|
{
|
|
this.pos = Object.assign({}, pos);
|
|
this.size = size;
|
|
this.ctx = ctx;
|
|
this.color = color;
|
|
this.font = font;
|
|
}
|
|
update() {
|
|
this.ctx.font = this.size + "px" + " " + this.font;
|
|
this.ctx.fillStyle = this.color;
|
|
this.ctx.fillText(this.text, this.pos.x, this.pos.y);
|
|
}
|
|
clear() {
|
|
// clear no very accurate for Text
|
|
// https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics
|
|
let textMetric = this.ctx.measureText(this.text);
|
|
// console.log("textMetric.width = "+textMetric.width);
|
|
// console.log("size = "+this.size);
|
|
// console.log("x = "+this.pos.x);
|
|
// console.log("y = "+this.pos.y);
|
|
this.ctx.clearRect(this.pos.x - 1, this.pos.y-this.size + 1, textMetric.width, this.size);
|
|
// +1 and -1 because float imprecision (and Math.floor() with VectorInteger dont work for the moment)
|
|
// (or maybe its textMetric imprecision ?)
|
|
}
|
|
}
|
|
|
|
class TextNumericValue extends TextElem {
|
|
private _value: number = 0;
|
|
constructor(pos: VectorInteger, size: number,
|
|
ctx: CanvasRenderingContext2D, color: string, font?: string)
|
|
{
|
|
super(pos, size, ctx, color, font);
|
|
}
|
|
get value() {
|
|
return this._value;
|
|
}
|
|
set value(v: number) {
|
|
this._value = v;
|
|
this.text = v.toString();
|
|
}
|
|
}
|
|
|
|
export {TextElem, TextNumericValue}
|