task(CAD-6): background rendering fix - bgConfig was never wired to render engine (import worked but never drew), canvas area setOptions + pixi sprite implementation
This commit is contained in:
@@ -156,8 +156,48 @@ export class PixiRenderer implements RenderAdapter {
|
||||
this.root.addChild(g);
|
||||
}
|
||||
|
||||
drawBackground(_img: HTMLImageElement | null, _cfg: BackgroundDrawConfig): void {
|
||||
// Sprite-/Texturintegration folgt in Task C3.
|
||||
private bgSprite: unknown | null = null;
|
||||
private bgSpriteSrc = '';
|
||||
|
||||
drawBackground(img: HTMLImageElement | null, cfg: BackgroundDrawConfig): void {
|
||||
// Task CAD-6: Hintergrund-Grundriss als Sprite unter den Elementen.
|
||||
if (!this.root || !img || !cfg.src) {
|
||||
// Ohne Bild: vorhandenes Sprite entfernen (Hintergrund aus)
|
||||
if (this.bgSprite) {
|
||||
(this.bgSprite as { destroy: () => void }).destroy();
|
||||
this.bgSprite = null;
|
||||
this.bgSpriteSrc = '';
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Bild-Cache: Neuaufbau nur bei Quellwechsel
|
||||
if (this.bgSpriteSrc !== cfg.src) {
|
||||
if (this.bgSprite) (this.bgSprite as { destroy: () => void }).destroy();
|
||||
// Lazy-Pixi (Modul-Fehler-Isolation wie in init): Sprite dynamisch
|
||||
const PixiNS = (this as unknown as { pixiNS: unknown }).pixiNS as
|
||||
{ Sprite: new (src: string) => unknown } | undefined;
|
||||
if (!PixiNS) return;
|
||||
const sprite = new PixiNS.Sprite(cfg.src);
|
||||
(sprite as unknown as { alpha: number }).alpha = cfg.opacity ?? 0.5;
|
||||
this.bgSprite = sprite;
|
||||
this.bgSpriteSrc = cfg.src;
|
||||
this.root.addChildAt(sprite as never, 0); // ganz unten
|
||||
}
|
||||
// Transform aktualisieren (Legacy-Paritaet: Zentrum bei offset, scaled)
|
||||
const s = cfg.scale ?? 1;
|
||||
const sprite = this.bgSprite as unknown as {
|
||||
position: { set: (x: number, y: number) => void };
|
||||
width: number; height: number;
|
||||
anchor: { set: (x: number, y: number) => void };
|
||||
rotation: number; scale: { set: (x: number, y: number) => void };
|
||||
alpha: number;
|
||||
};
|
||||
sprite.anchor.set(0, 0);
|
||||
sprite.width = img.width * s;
|
||||
sprite.height = img.height * s;
|
||||
sprite.position.set(cfg.offsetX ?? 0, cfg.offsetY ?? 0);
|
||||
sprite.rotation = cfg.rotation ?? 0;
|
||||
sprite.alpha = cfg.opacity ?? 0.5;
|
||||
}
|
||||
|
||||
drawRuler(_cfg: RulerConfig): void {
|
||||
|
||||
Reference in New Issue
Block a user