import { Texture } from '../../rendering/renderers/shared/texture/Texture.mjs'; import { deprecation, v8_0_0 } from '../../utils/logging/deprecation.mjs'; import { ViewContainer } from '../view/View.mjs'; import { NineSliceGeometry } from './NineSliceGeometry.mjs'; "use strict"; const _NineSliceSprite = class _NineSliceSprite extends ViewContainer { /** * @param {scene.NineSliceSpriteOptions|Texture} options - Options to use * @param options.texture - The texture to use on the NineSliceSprite. * @param options.leftWidth - Width of the left vertical bar (A) * @param options.topHeight - Height of the top horizontal bar (C) * @param options.rightWidth - Width of the right vertical bar (B) * @param options.bottomHeight - Height of the bottom horizontal bar (D) * @param options.width - Width of the NineSliceSprite, * setting this will actually modify the vertices and not the UV's of this plane. * @param options.height - Height of the NineSliceSprite, * setting this will actually modify the vertices and not UV's of this plane. */ constructor(options) { if (options instanceof Texture) { options = { texture: options }; } const { width, height, leftWidth, rightWidth, topHeight, bottomHeight, texture, roundPixels, ...rest } = options; super({ label: "NineSliceSprite", ...rest }); this.renderPipeId = "nineSliceSprite"; this.batched = true; this._didSpriteUpdate = true; this._leftWidth = leftWidth ?? texture?.defaultBorders?.left ?? NineSliceGeometry.defaultOptions.leftWidth; this._topHeight = topHeight ?? texture?.defaultBorders?.top ?? NineSliceGeometry.defaultOptions.topHeight; this._rightWidth = rightWidth ?? texture?.defaultBorders?.right ?? NineSliceGeometry.defaultOptions.rightWidth; this._bottomHeight = bottomHeight ?? texture?.defaultBorders?.bottom ?? NineSliceGeometry.defaultOptions.bottomHeight; this.bounds.maxX = this._width = width ?? texture.width ?? NineSliceGeometry.defaultOptions.width; this.bounds.maxY = this._height = height ?? texture.height ?? NineSliceGeometry.defaultOptions.height; this.allowChildren = false; this.texture = texture ?? _NineSliceSprite.defaultOptions.texture; this.roundPixels = roundPixels ?? false; } /** The local bounds of the view. */ get bounds() { return this._bounds; } /** The width of the NineSliceSprite, setting this will actually modify the vertices and UV's of this plane. */ get width() { return this._width; } set width(value) { this.bounds.maxX = this._width = value; this.onViewUpdate(); } /** The height of the NineSliceSprite, setting this will actually modify the vertices and UV's of this plane. */ get height() { return this._height; } set height(value) { this.bounds.maxY = this._height = value; this.onViewUpdate(); } /** * Sets the size of the NiceSliceSprite to the specified width and height. * setting this will actually modify the vertices and UV's of this plane * This is faster than setting the width and height separately. * @param value - This can be either a number or a [Size]{@link Size} object. * @param height - The height to set. Defaults to the value of `width` if not provided. */ setSize(value, height) { if (typeof value === "object") { height = value.height ?? value.width; value = value.width; } this.bounds.maxX = this._width = value; this.bounds.maxY = this._height = height ?? value; this.onViewUpdate(); } /** * Retrieves the size of the NineSliceSprite as a [Size]{@link Size} object. * This is faster than get the width and height separately. * @param out - Optional object to store the size in. * @returns - The size of the NineSliceSprite. */ getSize(out) { out || (out = {}); out.width = this._width; out.height = this._height; return out; } /** The width of the left column (a) of the NineSliceSprite. */ get leftWidth() { return this._leftWidth; } set leftWidth(value) { this._leftWidth = value; this.onViewUpdate(); } /** The width of the right column (b) of the NineSliceSprite. */ get topHeight() { return this._topHeight; } set topHeight(value) { this._topHeight = value; this.onViewUpdate(); } /** The width of the right column (b) of the NineSliceSprite. */ get rightWidth() { return this._rightWidth; } set rightWidth(value) { this._rightWidth = value; this.onViewUpdate(); } /** The width of the right column (b) of the NineSliceSprite. */ get bottomHeight() { return this._bottomHeight; } set bottomHeight(value) { this._bottomHeight = value; this.onViewUpdate(); } /** The texture that the NineSliceSprite is using. */ get texture() { return this._texture; } set texture(value) { value || (value = Texture.EMPTY); const currentTexture = this._texture; if (currentTexture === value) return; if (currentTexture && currentTexture.dynamic) currentTexture.off("update", this.onViewUpdate, this); if (value.dynamic) value.on("update", this.onViewUpdate, this); this._texture = value; this.onViewUpdate(); } /** The original width of the texture */ get originalWidth() { return this._texture.width; } /** The original height of the texture */ get originalHeight() { return this._texture.height; } onViewUpdate() { this._didViewChangeTick++; this._didSpriteUpdate = true; if (this.didViewUpdate) return; this.didViewUpdate = true; const renderGroup = this.renderGroup || this.parentRenderGroup; if (renderGroup) { renderGroup.onChildViewUpdate(this); } } /** * Adds the bounds of this object to the bounds object. * @param bounds - The output bounds object. */ addBounds(bounds) { const _bounds = this.bounds; bounds.addFrame(_bounds.minX, _bounds.minY, _bounds.maxX, _bounds.maxY); } /** * Destroys this sprite renderable and optionally its texture. * @param options - Options parameter. A boolean will act as if all options * have been set to that value * @param {boolean} [options.texture=false] - Should it destroy the current texture of the renderable as well * @param {boolean} [options.textureSource=false] - Should it destroy the textureSource of the renderable as well */ destroy(options) { super.destroy(options); const destroyTexture = typeof options === "boolean" ? options : options?.texture; if (destroyTexture) { const destroyTextureSource = typeof options === "boolean" ? options : options?.textureSource; this._texture.destroy(destroyTextureSource); } this._texture = null; } }; /** The default options, used to override the initial values of any options passed in the constructor. */ _NineSliceSprite.defaultOptions = { /** @default Texture.EMPTY */ texture: Texture.EMPTY }; let NineSliceSprite = _NineSliceSprite; class NineSlicePlane extends NineSliceSprite { constructor(...args) { let options = args[0]; if (options instanceof Texture) { deprecation(v8_0_0, "NineSlicePlane now uses the options object {texture, leftWidth, rightWidth, topHeight, bottomHeight}"); options = { texture: options, leftWidth: args[1], topHeight: args[2], rightWidth: args[3], bottomHeight: args[4] }; } deprecation(v8_0_0, "NineSlicePlane is deprecated. Use NineSliceSprite instead."); super(options); } } export { NineSlicePlane, NineSliceSprite }; //# sourceMappingURL=NineSliceSprite.mjs.map