Skip to content

Commit c134ad5

Browse files
committed
define getSpriteScale on drawable, use in _calculateSpriteMatrix
1 parent d72becf commit c134ad5

File tree

2 files changed

+31
-34
lines changed

2 files changed

+31
-34
lines changed

src/Renderer.ts

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ export default class Renderer {
5959
private _drawables: WeakMap<Sprite | Stage, Drawable>;
6060
private _skins: WeakMap<object, Skin>;
6161

62-
private _warnedBadSize: WeakSet<Sprite | Stage>;
63-
6462
private _currentShader: Shader | null;
6563
private _currentFramebuffer: WebGLFramebuffer | null;
6664
private _screenSpaceScale: number;
@@ -89,8 +87,6 @@ export default class Renderer {
8987
this._drawables = new WeakMap();
9088
this._skins = new WeakMap();
9189

92-
this._warnedBadSize = new WeakSet();
93-
9490
this._currentShader = null;
9591
this._currentFramebuffer = null;
9692
this._screenSpaceScale = 1;
@@ -504,34 +500,6 @@ export default class Renderer {
504500
this.gl.drawArrays(this.gl.TRIANGLES, 0, 6);
505501
}
506502

507-
private _getSpriteScale(sprite: Sprite | Stage): number {
508-
if ("size" in sprite) {
509-
if (typeof sprite.size !== "number") {
510-
if (!this._warnedBadSize.has(sprite)) {
511-
console.warn(
512-
`Expected a number, sprite ${
513-
sprite.constructor.name
514-
} size is ${typeof sprite.size}. Treating as 100%.`
515-
);
516-
this._warnedBadSize.add(sprite);
517-
}
518-
return 1;
519-
} else if (isNaN(sprite.size)) {
520-
if (!this._warnedBadSize.has(sprite)) {
521-
console.warn(
522-
`Expected a number, sprite ${sprite.constructor.name} size is NaN. Treating as 100%.`
523-
);
524-
this._warnedBadSize.add(sprite);
525-
}
526-
return 1;
527-
} else {
528-
return sprite.size / 100;
529-
}
530-
} else {
531-
return 1;
532-
}
533-
}
534-
535503
private renderSprite(
536504
sprite: Sprite | Stage,
537505
options: RenderSpriteOptions
@@ -540,7 +508,7 @@ export default class Renderer {
540508
this._getSkin(sprite.costume),
541509
options.drawMode,
542510
this._getDrawable(sprite).getMatrix(),
543-
this._getSpriteScale(sprite),
511+
this._getDrawable(sprite).getSpriteScale(),
544512
sprite.effects,
545513
options.effectMask,
546514
options.colorMask,

src/renderer/Drawable.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,14 @@ export default class Drawable {
8888
private _tightBoundingBox: Rectangle;
8989
private _convexHullMatrixDiff: SpriteTransformDiff;
9090

91+
private _warnedBadSize: boolean;
92+
9193
public constructor(renderer: Renderer, sprite: Sprite | Stage) {
9294
this._renderer = renderer;
9395
this._sprite = sprite;
9496

97+
this._warnedBadSize = false;
98+
9599
// Transformation matrix for the sprite.
96100
this._matrix = Matrix.create();
97101
// Track when the sprite's transform changes so we can recalculate the
@@ -345,7 +349,7 @@ export default class Drawable {
345349
}
346350
}
347351

348-
const spriteScale = spr.size / 100;
352+
const spriteScale = this.getSpriteScale();
349353
Matrix.scale(m, m, spriteScale, spriteScale);
350354
}
351355

@@ -379,4 +383,29 @@ export default class Drawable {
379383

380384
return this._matrix;
381385
}
386+
387+
public getSpriteScale(): number {
388+
if ("size" in this._sprite) {
389+
const { size } = this._sprite;
390+
if (typeof size !== "number") {
391+
this._warnBadSize(typeof size);
392+
return 1;
393+
} else if (isNaN(size)) {
394+
this._warnBadSize("NaN");
395+
return 1;
396+
} else {
397+
return size / 100;
398+
}
399+
} else {
400+
return 1;
401+
}
402+
}
403+
404+
private _warnBadSize(description: string): void {
405+
if (!this._warnedBadSize) {
406+
const { name } = this._sprite.constructor;
407+
console.warn(`Expected a number, sprite ${name} size is ${description}. Treating as 100%.`);
408+
this._warnedBadSize = true;
409+
}
410+
}
382411
}

0 commit comments

Comments
 (0)