1 line
64 KiB
Plaintext
1 line
64 KiB
Plaintext
{"version":3,"file":"Container.mjs","sources":["../../../src/scene/container/Container.ts"],"sourcesContent":["import EventEmitter from 'eventemitter3';\nimport { Color, type ColorSource } from '../../color/Color';\nimport { cullingMixin } from '../../culling/cullingMixin';\nimport { Matrix } from '../../maths/matrix/Matrix';\nimport { DEG_TO_RAD, RAD_TO_DEG } from '../../maths/misc/const';\nimport { ObservablePoint } from '../../maths/point/ObservablePoint';\nimport { uid } from '../../utils/data/uid';\nimport { deprecation, v8_0_0 } from '../../utils/logging/deprecation';\nimport { BigPool } from '../../utils/pool/PoolGroup';\nimport { childrenHelperMixin } from './container-mixins/childrenHelperMixin';\nimport { effectsMixin } from './container-mixins/effectsMixin';\nimport { findMixin } from './container-mixins/findMixin';\nimport { measureMixin } from './container-mixins/measureMixin';\nimport { onRenderMixin } from './container-mixins/onRenderMixin';\nimport { sortMixin } from './container-mixins/sortMixin';\nimport { toLocalGlobalMixin } from './container-mixins/toLocalGlobalMixin';\nimport { RenderGroup } from './RenderGroup';\nimport { assignWithIgnore } from './utils/assignWithIgnore';\n\nimport type { Size } from '../../maths/misc/Size';\nimport type { PointData } from '../../maths/point/PointData';\nimport type { Rectangle } from '../../maths/shapes/Rectangle';\nimport type { BLEND_MODES } from '../../rendering/renderers/shared/state/const';\nimport type { Dict } from '../../utils/types';\nimport type { Optional } from './container-mixins/measureMixin';\nimport type { DestroyOptions } from './destroyTypes';\n\nexport type ContainerChild = Container;\n\n/**\n * This is where you'll find all the display objects available in Pixi.\n *\n * All display objects inherit from the {@link scene.Container} class. You can use a `Container` for simple grouping of\n * other display objects. Here's all the available display object classes.\n *\n * - {@link scene.Container} is the base class for all display objects that act as a container for other objects.\n * - {@link scene.Sprite} is a display object that uses a texture\n * - {@link scene.AnimatedSprite} is a sprite that can play animations\n * - {@link scene.TilingSprite} a fast way of rendering a tiling image\n * - {@link scene.NineSliceSprite} allows you to stretch a texture using 9-slice scaling\n * - {@link scene.Graphics} is a graphic object that can be drawn to the screen.\n * - {@link scene.Mesh} empowers you to have maximum flexibility to render any kind of visuals you can think of\n * - {@link scene.MeshSimple} mimics Mesh, providing easy-to-use constructor arguments\n * - {@link scene.MeshPlane} allows you to draw a texture across several points and then manipulate these points\n * - {@link scene.MeshRope} allows you to draw a texture across several points and then manipulate these points\n * - {@link scene.Text} render text using custom fonts\n * - {@link scene.BitmapText} render text using a bitmap font\n * - {@link scene.HTMLText} render text using HTML and CSS\n * @namespace scene\n */\n\n// as pivot and skew are the least used properties of a container, we can use this optimisation\n// to avoid allocating lots of unnecessary objects for them.\nconst defaultSkew = new ObservablePoint(null);\nconst defaultPivot = new ObservablePoint(null);\nconst defaultScale = new ObservablePoint(null, 1, 1);\n\nexport interface ContainerEvents<C extends ContainerChild> extends PixiMixins.ContainerEvents\n{\n added: [container: Container];\n childAdded: [child: C, container: Container, index: number];\n removed: [container: Container];\n childRemoved: [child: C, container: Container, index: number];\n destroyed: [container: Container];\n}\n\ntype AnyEvent = {\n // The following is a hack to allow any custom event while maintaining type safety.\n // For some reason, the tsc compiler gets angry about error TS1023\n // \"An index signature parameter type must be either 'string' or 'number'.\"\n // This is really odd since ({}&string) should interpret as string, but then again\n // there is some black magic behind why this works in the first place.\n // Closest thing to an explanation:\n // https://stackoverflow.com/questions/70144348/why-does-a-union-of-type-literals-and-string-cause-ide-code-completion-wh\n //\n // Side note, we disable @typescript-eslint/ban-types since {}&string is the only syntax that works.\n // Nor of the Record/unknown/never alternatives work.\n // eslint-disable-next-line @typescript-eslint/ban-types\n [K: ({} & string) | ({} & symbol)]: any;\n};\n\nexport const UPDATE_COLOR = 0b0001;\nexport const UPDATE_BLEND = 0b0010;\nexport const UPDATE_VISIBLE = 0b0100;\nexport const UPDATE_TRANSFORM = 0b1000;\n\nexport interface UpdateTransformOptions\n{\n x: number;\n y: number;\n scaleX: number;\n scaleY: number;\n rotation: number;\n skewX: number;\n skewY: number;\n pivotX: number;\n pivotY: number;\n}\n\n/**\n * Constructor options used for `Container` instances.\n * ```js\n * const container = new Container({\n * position: new Point(100, 200),\n * scale: new Point(2, 2),\n * rotation: Math.PI / 2,\n * });\n * ```\n * @memberof scene\n * @see scene.Container\n */\nexport interface ContainerOptions<C extends ContainerChild = ContainerChild> extends PixiMixins.ContainerOptions\n{\n /** @see scene.Container#isRenderGroup */\n isRenderGroup?: boolean;\n\n /** @see scene.Container#blendMode */\n blendMode?: BLEND_MODES;\n /** @see scene.Container#tint */\n tint?: ColorSource;\n\n /** @see scene.Container#alpha */\n alpha?: number;\n /** @see scene.Container#angle */\n angle?: number;\n /** @see scene.Container#children */\n children?: C[];\n /** @see scene.Container#parent */\n parent?: Container;\n /** @see scene.Container#renderable */\n renderable?: boolean;\n /** @see scene.Container#rotation */\n rotation?: number;\n /** @see scene.Container#scale */\n scale?: PointData | number;\n /** @see scene.Container#pivot */\n pivot?: PointData | number;\n /** @see scene.Container#position */\n position?: PointData;\n /** @see scene.Container#skew */\n skew?: PointData;\n /** @see scene.Container#visible */\n visible?: boolean;\n /** @see scene.Container#x */\n x?: number;\n /** @see scene.Container#y */\n y?: number;\n /** @see scene.Container#boundArea */\n boundsArea?: Rectangle;\n}\n\nexport interface Container<C extends ContainerChild>\n extends PixiMixins.Container<C>, EventEmitter<ContainerEvents<C> & AnyEvent> {}\n\n/**\n * Container is a general-purpose display object that holds children. It also adds built-in support for advanced\n * rendering features like masking and filtering.\n *\n * It is the base class of all display objects that act as a container for other objects, including Graphics\n * and Sprite.\n *\n * <details id=\"transforms\">\n *\n * <summary>Transforms</summary>\n *\n * The [transform]{@link scene.Container#transform} of a display object describes the projection from its\n * local coordinate space to its parent's local coordinate space. The following properties are derived\n * from the transform:\n *\n * <table>\n * <thead>\n * <tr>\n * <th>Property</th>\n * <th>Description</th>\n * </tr>\n * </thead>\n * <tbody>\n * <tr>\n * <td>[pivot]{@link scene.Container#pivot}</td>\n * <td>\n * Invariant under rotation, scaling, and skewing. The projection of into the parent's space of the pivot\n * is equal to position, regardless of the other three transformations. In other words, It is the center of\n * rotation, scaling, and skewing.\n * </td>\n * </tr>\n * <tr>\n * <td>[position]{@link scene.Container#position}</td>\n * <td>\n * Translation. This is the position of the [pivot]{@link scene.Container#pivot} in the parent's local\n * space. The default value of the pivot is the origin (0,0). If the top-left corner of your display object\n * is (0,0) in its local space, then the position will be its top-left corner in the parent's local space.\n * </td>\n * </tr>\n * <tr>\n * <td>[scale]{@link scene.Container#scale}</td>\n * <td>\n * Scaling. This will stretch (or compress) the display object's projection. The scale factors are along the\n * local coordinate axes. In other words, the display object is scaled before rotated or skewed. The center\n * of scaling is the [pivot]{@link scene.Container#pivot}.\n * </td>\n * </tr>\n * <tr>\n * <td>[rotation]{@link scene.Container#rotation}</td>\n * <td>\n * Rotation. This will rotate the display object's projection by this angle (in radians).\n * </td>\n * </tr>\n * <tr>\n * <td>[skew]{@link scene.Container#skew}</td>\n * <td>\n * <p>Skewing. This can be used to deform a rectangular display object into a parallelogram.</p>\n * <p>\n * In PixiJS, skew has a slightly different behaviour than the conventional meaning. It can be\n * thought of the net rotation applied to the coordinate axes (separately). For example, if \"skew.x\" is\n * ⍺ and \"skew.y\" is β, then the line x = 0 will be rotated by ⍺ (y = -x*cot⍺) and the line y = 0 will be\n * rotated by β (y = x*tanβ). A line y = x*tanϴ (i.e. a line at angle ϴ to the x-axis in local-space) will\n * be rotated by an angle between ⍺ and β.\n * </p>\n * <p>\n * It can be observed that if skew is applied equally to both axes, then it will be equivalent to applying\n * a rotation. Indeed, if \"skew.x\" = -ϴ and \"skew.y\" = ϴ, it will produce an equivalent of \"rotation\" = ϴ.\n * </p>\n * <p>\n * Another quite interesting observation is that \"skew.x\", \"skew.y\", rotation are commutative operations. Indeed,\n * because rotation is essentially a careful combination of the two.\n * </p>\n * </td>\n * </tr>\n * <tr>\n * <td>[angle]{@link scene.Container#angle}</td>\n * <td>Rotation. This is an alias for [rotation]{@link scene.Container#rotation}, but in degrees.</td>\n * </tr>\n * <tr>\n * <td>[x]{@link scene.Container#x}</td>\n * <td>Translation. This is an alias for position.x!</td>\n * </tr>\n * <tr>\n * <td>[y]{@link scene.Container#y}</td>\n * <td>Translation. This is an alias for position.y!</td>\n * </tr>\n * <tr>\n * <td>[width]{@link scene.Container#width}</td>\n * <td>\n * Implemented in [Container]{@link scene.Container}. Scaling. The width property calculates scale.x by dividing\n * the \"requested\" width by the local bounding box width. It is indirectly an abstraction over scale.x, and there\n * is no concept of user-defined width.\n * </td>\n * </tr>\n * <tr>\n * <td>[height]{@link scene.Container#height}</td>\n * <td>\n * Implemented in [Container]{@link scene.Container}. Scaling. The height property calculates scale.y by dividing\n * the \"requested\" height by the local bounding box height. It is indirectly an abstraction over scale.y, and there\n * is no concept of user-defined height.\n * </td>\n * </tr>\n * </tbody>\n * </table>\n * </details>\n *\n * <details id=\"alpha\">\n * <summary>Alpha</summary>\n *\n * This alpha sets a display object's **relative opacity** w.r.t its parent. For example, if the alpha of a display\n * object is 0.5 and its parent's alpha is 0.5, then it will be rendered with 25% opacity (assuming alpha is not\n * applied on any ancestor further up the chain).\n * </details>\n *\n * <details id=\"visible\">\n * <summary>Renderable vs Visible</summary>\n *\n * The `renderable` and `visible` properties can be used to prevent a display object from being rendered to the\n * screen. However, there is a subtle difference between the two. When using `renderable`, the transforms of the display\n * object (and its children subtree) will continue to be calculated. When using `visible`, the transforms will not\n * be calculated.\n * ```ts\n * import { BlurFilter, Container, Graphics, Sprite } from 'pixi.js';\n *\n * const container = new Container();\n * const sprite = Sprite.from('https://s3-us-west-2.amazonaws.com/s.cdpn.io/693612/IaUrttj.png');\n *\n * sprite.width = 512;\n * sprite.height = 512;\n *\n * // Adds a sprite as a child to this container. As a result, the sprite will be rendered whenever the container\n * // is rendered.\n * container.addChild(sprite);\n *\n * // Blurs whatever is rendered by the container\n * container.filters = [new BlurFilter()];\n *\n * // Only the contents within a circle at the center should be rendered onto the screen.\n * container.mask = new Graphics()\n * .beginFill(0xffffff)\n * .drawCircle(sprite.width / 2, sprite.height / 2, Math.min(sprite.width, sprite.height) / 2)\n * .endFill();\n * ```\n *\n * </details>\n *\n * <details id=\"renderGroup\">\n * <summary>RenderGroup</summary>\n *\n * In PixiJS v8, containers can be set to operate in 'render group mode',\n * transforming them into entities akin to a stage in traditional rendering paradigms.\n * A render group is a root renderable entity, similar to a container,\n * but it's rendered in a separate pass with its own unique set of rendering instructions.\n * This approach enhances rendering efficiency and organization, particularly in complex scenes.\n *\n * You can enable render group mode on any container using container.enableRenderGroup()\n * or by initializing a new container with the render group property set to true (new Container({isRenderGroup: true})).\n * The method you choose depends on your specific use case and setup requirements.\n *\n * An important aspect of PixiJS’s rendering process is the automatic treatment of rendered scenes as render groups.\n * This conversion streamlines the rendering process, but understanding when and how this happens is crucial\n * to fully leverage its benefits.\n *\n * One of the key advantages of using render groups is the performance efficiency in moving them. Since transformations\n * are applied at the GPU level, moving a render group, even one with complex and numerous children,\n * doesn't require recalculating the rendering instructions or performing transformations on each child.\n * This makes operations like panning a large game world incredibly efficient.\n *\n * However, it's crucial to note that render groups do not batch together.\n * This means that turning every container into a render group could actually slow things down,\n * as each render group is processed separately. It's best to use render groups judiciously, at a broader level,\n * rather than on a per-child basis.\n * This approach ensures you get the performance benefits without overburdening the rendering process.\n *\n * RenderGroups maintain their own set of rendering instructions,\n * ensuring that changes or updates within a render group don't affect the rendering\n * instructions of its parent or other render groups.\n * This isolation ensures more stable and predictable rendering behavior.\n *\n * Additionally, renderGroups can be nested, allowing for powerful options in organizing different aspects of your scene.\n * This feature is particularly beneficial for separating complex game graphics from UI elements,\n * enabling intricate and efficient scene management in complex applications.\n *\n * This means that Containers have 3 levels of matrix to be mindful of:\n *\n * 1. localTransform, this is the transform of the container based on its own properties\n * 2. groupTransform, this it the transform of the container relative to the renderGroup it belongs too\n * 3. worldTransform, this is the transform of the container relative to the Scene being rendered\n * </details>\n * @memberof scene\n */\nexport class Container<C extends ContainerChild = ContainerChild> extends EventEmitter<ContainerEvents<C> & AnyEvent>\n{\n /**\n * Mixes all enumerable properties and methods from a source object to Container.\n * @param source - The source of properties and methods to mix in.\n */\n public static mixin(source: Dict<any>): void\n {\n Object.defineProperties(Container.prototype, Object.getOwnPropertyDescriptors(source));\n }\n\n /** unique id for this container */\n public readonly uid: number = uid('renderable');\n\n /** @private */\n public _updateFlags = 0b1111;\n\n // the render group this container owns\n /** @private */\n public renderGroup: RenderGroup = null;\n // the render group this container belongs to\n /** @private */\n public parentRenderGroup: RenderGroup = null;\n // the index of the container in the render group\n /** @private */\n public parentRenderGroupIndex: number = 0;\n\n // set to true if the container has changed. It is reset once the changes have been applied\n // by the transform system\n // its here to stop ensure that when things change, only one update gets registers with the transform system\n /** @private */\n public didChange = false;\n // same as above, but for the renderable\n /** @private */\n public didViewUpdate = false;\n\n // how deep is the container relative to its render group..\n // unless the element is the root render group - it will be relative to its parent\n /** @private */\n public relativeRenderGroupDepth = 0;\n\n /**\n * The array of children of this container.\n * @readonly\n */\n public children: C[] = [];\n /** The display object container that contains this display object. */\n public parent: Container = null;\n\n // used internally for changing up the render order.. mainly for masks and filters\n // TODO setting this should cause a rebuild??\n /** @private */\n public includeInBuild = true;\n /** @private */\n public measurable = true;\n /** @private */\n public isSimple = true;\n\n // / /////////////Transform related props//////////////\n\n // used by the transform system to check if a container needs to be updated that frame\n // if the tick matches the current transform system tick, it is not updated again\n /**\n * @internal\n * @ignore\n */\n public updateTick = -1;\n\n /**\n * Current transform of the object based on local factors: position, scale, other stuff.\n * @readonly\n */\n public localTransform: Matrix = new Matrix();\n /**\n * The relative group transform is a transform relative to the render group it belongs too. It will include all parent\n * transforms and up to the render group (think of it as kind of like a stage - but the stage can be nested).\n * If this container is is self a render group matrix will be relative to its parent render group\n * @readonly\n */\n public relativeGroupTransform: Matrix = new Matrix();\n /**\n * The group transform is a transform relative to the render group it belongs too.\n * If this container is render group then this will be an identity matrix. other wise it\n * will be the same as the relativeGroupTransform.\n * Use this value when actually rendering things to the screen\n * @readonly\n */\n public groupTransform: Matrix = this.relativeGroupTransform;\n\n // the global transform taking into account the render group and all parents\n private _worldTransform: Matrix;\n\n /** If the object has been destroyed via destroy(). If true, it should not be used. */\n public destroyed = false;\n\n // transform data..\n /**\n * The coordinate of the object relative to the local coordinates of the parent.\n * @internal\n * @ignore\n */\n public _position: ObservablePoint = new ObservablePoint(this, 0, 0);\n\n /**\n * The scale factor of the object.\n * @internal\n * @ignore\n */\n public _scale: ObservablePoint = defaultScale;\n\n /**\n * The pivot point of the container that it rotates around.\n * @internal\n * @ignore\n */\n public _pivot: ObservablePoint = defaultPivot;\n\n /**\n * The skew amount, on the x and y axis.\n * @internal\n * @ignore\n */\n public _skew: ObservablePoint = defaultSkew;\n\n /**\n * The X-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n * @internal\n * @ignore\n */\n public _cx = 1;\n\n /**\n * The Y-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n * @internal\n * @ignore\n */\n public _sx = 0;\n\n /**\n * The X-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n * @internal\n * @ignore\n */\n public _cy = 0;\n\n /**\n * The Y-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n * @internal\n * @ignore\n */\n public _sy = 1;\n\n /**\n * The rotation amount.\n * @internal\n * @ignore\n */\n private _rotation = 0;\n\n // / COLOR related props //////////////\n\n // color stored as ABGR\n public localColor = 0xFFFFFF;\n public localAlpha = 1;\n\n public groupAlpha = 1; // A\n public groupColor = 0xFFFFFF; // BGR\n public groupColorAlpha = 0xFFFFFFFF; // ABGR\n\n // / BLEND related props //////////////\n\n /**\n * @internal\n * @ignore\n */\n public localBlendMode: BLEND_MODES = 'inherit';\n /**\n * @internal\n * @ignore\n */\n public groupBlendMode: BLEND_MODES = 'normal';\n\n // / VISIBILITY related props //////////////\n\n // visibility\n // 0b11\n // first bit is visible, second bit is renderable\n /**\n * This property holds three bits: culled, visible, renderable\n * the third bit represents culling (0 = culled, 1 = not culled) 0b100\n * the second bit represents visibility (0 = not visible, 1 = visible) 0b010\n * the first bit represents renderable (0 = not renderable, 1 = renderable) 0b001\n * @internal\n * @ignore\n */\n public localDisplayStatus = 0b111; // 0b11 | 0b10 | 0b01 | 0b00\n /**\n * @internal\n * @ignore\n */\n public globalDisplayStatus = 0b111; // 0b11 | 0b10 | 0b01 | 0b00\n\n public readonly renderPipeId: string;\n\n /**\n * An optional bounds area for this container. Setting this rectangle will stop the renderer\n * from recursively measuring the bounds of each children and instead use this single boundArea.\n * This is great for optimisation! If for example you have a 1000 spinning particles and you know they all sit\n * within a specific bounds, then setting it will mean the renderer will not need to measure the\n * 1000 children to find the bounds. Instead it will just use the bounds you set.\n */\n public boundsArea: Rectangle;\n\n /**\n * A value that increments each time the containe is modified\n * eg children added, removed etc\n * @ignore\n */\n public _didContainerChangeTick = 0;\n /**\n * A value that increments each time the container view is modified\n * eg texture swap, geometry change etc\n * @ignore\n */\n public _didViewChangeTick = 0;\n\n /**\n * We now use the _didContainerChangeTick and _didViewChangeTick to track changes\n * @deprecated since 8.2.6\n * @ignore\n */\n set _didChangeId(value: number)\n {\n this._didViewChangeTick = (value >> 12) & 0xFFF; // Extract the upper 12 bits\n this._didContainerChangeTick = value & 0xFFF; // Extract the lower 12 bits\n }\n\n get _didChangeId(): number\n {\n return (this._didContainerChangeTick & 0xfff) | ((this._didViewChangeTick & 0xfff) << 12);\n }\n\n /**\n * property that tracks if the container transform has changed\n * @ignore\n */\n private _didLocalTransformChangeId = -1;\n\n constructor(options: ContainerOptions<C> = {})\n {\n super();\n\n this.effects = [];\n assignWithIgnore(this, options, {\n children: true,\n parent: true,\n effects: true,\n });\n\n options.children?.forEach((child) => this.addChild(child));\n options.parent?.addChild(this);\n }\n\n /**\n * Adds one or more children to the container.\n *\n * Multiple items can be added like so: `myContainer.addChild(thingOne, thingTwo, thingThree)`\n * @param {...Container} children - The Container(s) to add to the container\n * @returns {Container} - The first child that was added.\n */\n public addChild<U extends C[]>(...children: U): U[0]\n {\n // #if _DEBUG\n if (!this.allowChildren)\n {\n deprecation(v8_0_0, 'addChild: Only Containers will be allowed to add children in v8.0.0');\n }\n // #endif\n\n if (children.length > 1)\n {\n // loop through the array and add all children\n for (let i = 0; i < children.length; i++)\n {\n this.addChild(children[i]);\n }\n\n return children[0];\n }\n\n const child = children[0];\n\n if (child.parent === this)\n {\n this.children.splice(this.children.indexOf(child), 1);\n this.children.push(child);\n\n if (this.parentRenderGroup)\n {\n this.parentRenderGroup.structureDidChange = true;\n }\n\n return child;\n }\n\n if (child.parent)\n {\n // TODO Optimisation...if the parent has the same render group, this does not need to change!\n child.parent.removeChild(child);\n }\n\n this.children.push(child);\n\n if (this.sortableChildren) this.sortDirty = true;\n\n child.parent = this;\n\n child.didChange = true;\n child.didViewUpdate = false;\n\n // TODO - OPtimise this? could check what the parent has set?\n child._updateFlags = 0b1111;\n\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n\n if (renderGroup)\n {\n renderGroup.addChild(child);\n }\n\n this.emit('childAdded', child, this, this.children.length - 1);\n child.emit('added', this);\n\n this._didViewChangeTick++;\n\n if (child._zIndex !== 0)\n {\n child.depthOfChildModified();\n }\n\n return child;\n }\n\n /**\n * Removes one or more children from the container.\n * @param {...Container} children - The Container(s) to remove\n * @returns {Container} The first child that was removed.\n */\n public removeChild<U extends C[]>(...children: U): U[0]\n {\n // if there is only one argument we can bypass looping through the them\n if (children.length > 1)\n {\n // loop through the arguments property and remove all children\n for (let i = 0; i < children.length; i++)\n {\n this.removeChild(children[i]);\n }\n\n return children[0];\n }\n\n const child = children[0];\n\n const index = this.children.indexOf(child);\n\n if (index > -1)\n {\n this._didViewChangeTick++;\n\n this.children.splice(index, 1);\n\n if (this.renderGroup)\n {\n this.renderGroup.removeChild(child);\n }\n else if (this.parentRenderGroup)\n {\n this.parentRenderGroup.removeChild(child);\n }\n\n child.parent = null;\n this.emit('childRemoved', child, this, index);\n child.emit('removed', this);\n }\n\n return child;\n }\n\n /** @ignore */\n public _onUpdate(point?: ObservablePoint)\n {\n if (point)\n {\n // this.updateFlags |= UPDATE_TRANSFORM;\n\n if (point === this._skew)\n {\n this._updateSkew();\n }\n }\n\n this._didContainerChangeTick++;\n\n if (this.didChange) return;\n this.didChange = true;\n\n if (this.parentRenderGroup)\n {\n this.parentRenderGroup.onChildUpdate(this);\n }\n }\n\n set isRenderGroup(value: boolean)\n {\n if (!!this.renderGroup === value) return;\n\n if (value)\n {\n this.enableRenderGroup();\n }\n else\n {\n this.disableRenderGroup();\n }\n }\n\n /**\n * Returns true if this container is a render group.\n * This means that it will be rendered as a separate pass, with its own set of instructions\n */\n get isRenderGroup(): boolean\n {\n return !!this.renderGroup;\n }\n\n /**\n * Calling this enables a render group for this container.\n * This means it will be rendered as a separate set of instructions.\n * The transform of the container will also be handled on the GPU rather than the CPU.\n */\n public enableRenderGroup(): void\n {\n if (this.renderGroup) return;\n\n const parentRenderGroup = this.parentRenderGroup;\n\n parentRenderGroup?.removeChild(this);\n\n this.renderGroup = BigPool.get(RenderGroup, this);\n\n // this group matrix will now be an identity matrix,\n // as its own transform will be passed to the GPU\n this.groupTransform = Matrix.IDENTITY;\n\n parentRenderGroup?.addChild(this);\n\n this._updateIsSimple();\n }\n\n /** This will disable the render group for this container. */\n public disableRenderGroup(): void\n {\n if (!this.renderGroup) return;\n\n const parentRenderGroup = this.parentRenderGroup;\n\n parentRenderGroup?.removeChild(this);\n\n BigPool.return(this.renderGroup);\n\n this.renderGroup = null;\n this.groupTransform = this.relativeGroupTransform;\n\n parentRenderGroup?.addChild(this);\n\n this._updateIsSimple();\n }\n\n /** @ignore */\n public _updateIsSimple()\n {\n this.isSimple = !(this.renderGroup) && (this.effects.length === 0);\n }\n\n /**\n * Current transform of the object based on world (parent) factors.\n * @readonly\n */\n get worldTransform()\n {\n this._worldTransform ||= new Matrix();\n\n if (this.renderGroup)\n {\n this._worldTransform.copyFrom(this.renderGroup.worldTransform);\n }\n else if (this.parentRenderGroup)\n {\n this._worldTransform.appendFrom(this.relativeGroupTransform, this.parentRenderGroup.worldTransform);\n }\n\n return this._worldTransform;\n }\n\n // / ////// transform related stuff\n\n /**\n * The position of the container on the x axis relative to the local coordinates of the parent.\n * An alias to position.x\n */\n get x(): number\n {\n return this._position.x;\n }\n\n set x(value: number)\n {\n this._position.x = value;\n }\n\n /**\n * The position of the container on the y axis relative to the local coordinates of the parent.\n * An alias to position.y\n */\n get y(): number\n {\n return this._position.y;\n }\n\n set y(value: number)\n {\n this._position.y = value;\n }\n\n /**\n * The coordinate of the object relative to the local coordinates of the parent.\n * @since 4.0.0\n */\n get position(): ObservablePoint\n {\n return this._position;\n }\n\n set position(value: PointData)\n {\n this._position.copyFrom(value);\n }\n\n /**\n * The rotation of the object in radians.\n * 'rotation' and 'angle' have the same effect on a display object; rotation is in radians, angle is in degrees.\n */\n get rotation(): number\n {\n return this._rotation;\n }\n\n set rotation(value: number)\n {\n if (this._rotation !== value)\n {\n this._rotation = value;\n this._onUpdate(this._skew);\n }\n }\n\n /**\n * The angle of the object in degrees.\n * 'rotation' and 'angle' have the same effect on a display object; rotation is in radians, angle is in degrees.\n */\n get angle(): number\n {\n return this.rotation * RAD_TO_DEG;\n }\n\n set angle(value: number)\n {\n this.rotation = value * DEG_TO_RAD;\n }\n\n /**\n * The center of rotation, scaling, and skewing for this display object in its local space. The `position`\n * is the projection of `pivot` in the parent's local space.\n *\n * By default, the pivot is the origin (0, 0).\n * @since 4.0.0\n */\n get pivot(): ObservablePoint\n {\n if (this._pivot === defaultPivot)\n {\n this._pivot = new ObservablePoint(this, 0, 0);\n }\n\n return this._pivot;\n }\n\n set pivot(value: PointData | number)\n {\n if (this._pivot === defaultPivot)\n {\n this._pivot = new ObservablePoint(this, 0, 0);\n }\n\n typeof value === 'number' ? this._pivot.set(value) : this._pivot.copyFrom(value);\n }\n\n /**\n * The skew factor for the object in radians.\n * @since 4.0.0\n */\n get skew(): ObservablePoint\n {\n if (this._skew === defaultSkew)\n {\n this._skew = new ObservablePoint(this, 0, 0);\n }\n\n return this._skew;\n }\n\n set skew(value: PointData)\n {\n if (this._skew === defaultSkew)\n {\n this._skew = new ObservablePoint(this, 0, 0);\n }\n\n this._skew.copyFrom(value);\n }\n\n /**\n * The scale factors of this object along the local coordinate axes.\n *\n * The default scale is (1, 1).\n * @since 4.0.0\n */\n get scale(): ObservablePoint\n {\n if (this._scale === defaultScale)\n {\n this._scale = new ObservablePoint(this, 1, 1);\n }\n\n return this._scale;\n }\n\n set scale(value: PointData | number)\n {\n if (this._scale === defaultScale)\n {\n this._scale = new ObservablePoint(this, 0, 0);\n }\n\n typeof value === 'number' ? this._scale.set(value) : this._scale.copyFrom(value);\n }\n\n /**\n * The width of the Container, setting this will actually modify the scale to achieve the value set.\n * @memberof scene.Container#\n */\n get width(): number\n {\n return Math.abs(this.scale.x * this.getLocalBounds().width);\n }\n\n set width(value: number)\n {\n const localWidth = this.getLocalBounds().width;\n\n this._setWidth(value, localWidth);\n }\n\n /**\n * The height of the Container, setting this will actually modify the scale to achieve the value set.\n * @memberof scene.Container#\n */\n get height(): number\n {\n return Math.abs(this.scale.y * this.getLocalBounds().height);\n }\n\n set height(value: number)\n {\n const localHeight = this.getLocalBounds().height;\n\n this._setHeight(value, localHeight);\n }\n\n /**\n * Retrieves the size of the container as a [Size]{@link Size} object.\n * This is faster than get the width and height separately.\n * @param out - Optional object to store the size in.\n * @returns - The size of the container.\n * @memberof scene.Container#\n */\n public getSize(out?: Size): Size\n {\n if (!out)\n {\n out = {} as Size;\n }\n\n const bounds = this.getLocalBounds();\n\n out.width = Math.abs(this.scale.x * bounds.width);\n out.height = Math.abs(this.scale.y * bounds.height);\n\n return out;\n }\n\n /**\n * Sets the size of the container to the specified width and height.\n * This is faster than setting the width and height separately.\n * @param value - This can be either a number or a [Size]{@link Size} object.\n * @param height - The height to set. Defaults to the value of `width` if not provided.\n * @memberof scene.Container#\n */\n public setSize(value: number | Optional<Size, 'height'>, height?: number)\n {\n const size = this.getLocalBounds();\n\n if (typeof value === 'object')\n {\n height = value.height ?? value.width;\n value = value.width;\n }\n else\n {\n height ??= value;\n }\n\n value !== undefined && this._setWidth(value, size.width);\n height !== undefined && this._setHeight(height, size.height);\n }\n\n /** Called when the skew or the rotation changes. */\n private _updateSkew(): void\n {\n const rotation = this._rotation;\n const skew = this._skew;\n\n this._cx = Math.cos(rotation + skew._y);\n this._sx = Math.sin(rotation + skew._y);\n this._cy = -Math.sin(rotation - skew._x); // cos, added PI/2\n this._sy = Math.cos(rotation - skew._x); // sin, added PI/2\n }\n\n /**\n * Updates the transform properties of the container (accepts partial values).\n * @param {object} opts - The options for updating the transform.\n * @param {number} opts.x - The x position of the container.\n * @param {number} opts.y - The y position of the container.\n * @param {number} opts.scaleX - The scale factor on the x-axis.\n * @param {number} opts.scaleY - The scale factor on the y-axis.\n * @param {number} opts.rotation - The rotation of the container, in radians.\n * @param {number} opts.skewX - The skew factor on the x-axis.\n * @param {number} opts.skewY - The skew factor on the y-axis.\n * @param {number} opts.pivotX - The x coordinate of the pivot point.\n * @param {number} opts.pivotY - The y coordinate of the pivot point.\n */\n public updateTransform(opts: Partial<UpdateTransformOptions>): this\n {\n this.position.set(\n typeof opts.x === 'number' ? opts.x : this.position.x,\n typeof opts.y === 'number' ? opts.y : this.position.y\n );\n this.scale.set(\n typeof opts.scaleX === 'number' ? opts.scaleX || 1 : this.scale.x,\n typeof opts.scaleY === 'number' ? opts.scaleY || 1 : this.scale.y\n );\n this.rotation = typeof opts.rotation === 'number' ? opts.rotation : this.rotation;\n this.skew.set(\n typeof opts.skewX === 'number' ? opts.skewX : this.skew.x,\n typeof opts.skewY === 'number' ? opts.skewY : this.skew.y\n );\n this.pivot.set(\n typeof opts.pivotX === 'number' ? opts.pivotX : this.pivot.x,\n typeof opts.pivotY === 'number' ? opts.pivotY : this.pivot.y\n );\n\n return this;\n }\n\n /**\n * Updates the local transform using the given matrix.\n * @param matrix - The matrix to use for updating the transform.\n */\n public setFromMatrix(matrix: Matrix): void\n {\n matrix.decompose(this);\n }\n\n /** Updates the local transform. */\n public updateLocalTransform(): void\n {\n const localTransformChangeId = this._didContainerChangeTick;\n\n if (this._didLocalTransformChangeId === localTransformChangeId) return;\n\n this._didLocalTransformChangeId = localTransformChangeId;\n // this.didChange = false;\n\n const lt = this.localTransform;\n const scale = this._scale;\n const pivot = this._pivot;\n const position = this._position;\n\n const sx = scale._x;\n const sy = scale._y;\n\n const px = pivot._x;\n const py = pivot._y;\n\n // get the matrix values of the container based on its this properties..\n lt.a = this._cx * sx;\n lt.b = this._sx * sx;\n lt.c = this._cy * sy;\n lt.d = this._sy * sy;\n\n lt.tx = position._x - ((px * lt.a) + (py * lt.c));\n lt.ty = position._y - ((px * lt.b) + (py * lt.d));\n }\n\n // / ///// color related stuff\n\n set alpha(value: number)\n {\n if (value === this.localAlpha) return;\n\n this.localAlpha = value;\n\n this._updateFlags |= UPDATE_COLOR;\n\n this._onUpdate();\n }\n\n /** The opacity of the object. */\n get alpha(): number\n {\n return this.localAlpha;\n }\n\n set tint(value: ColorSource)\n {\n const tempColor = Color.shared.setValue(value ?? 0xFFFFFF);\n const bgr = tempColor.toBgrNumber();\n\n if (bgr === this.localColor) return;\n\n this.localColor = bgr;\n\n this._updateFlags |= UPDATE_COLOR;\n\n this._onUpdate();\n }\n\n /**\n * The tint applied to the sprite. This is a hex value.\n *\n * A value of 0xFFFFFF will remove any tint effect.\n * @default 0xFFFFFF\n */\n get tint(): number\n {\n const bgr = this.localColor;\n // convert bgr to rgb..\n\n return ((bgr & 0xFF) << 16) + (bgr & 0xFF00) + ((bgr >> 16) & 0xFF);\n }\n\n // / //////////////// blend related stuff\n\n set blendMode(value: BLEND_MODES)\n {\n if (this.localBlendMode === value) return;\n if (this.parentRenderGroup)\n {\n this.parentRenderGroup.structureDidChange = true;\n }\n\n this._updateFlags |= UPDATE_BLEND;\n\n this.localBlendMode = value;\n\n this._onUpdate();\n }\n\n /**\n * The blend mode to be applied to the sprite. Apply a value of `'normal'` to reset the blend mode.\n * @default 'normal'\n */\n get blendMode(): BLEND_MODES\n {\n return this.localBlendMode;\n }\n\n // / ///////// VISIBILITY / RENDERABLE /////////////////\n\n /** The visibility of the object. If false the object will not be drawn, and the transform will not be updated. */\n get visible()\n {\n return !!(this.localDisplayStatus & 0b010);\n }\n\n set visible(value: boolean)\n {\n const valueNumber = value ? 0b010 : 0;\n\n if ((this.localDisplayStatus & 0b010) === valueNumber) return;\n\n if (this.parentRenderGroup)\n {\n this.parentRenderGroup.structureDidChange = true;\n }\n\n this._updateFlags |= UPDATE_VISIBLE;\n\n this.localDisplayStatus ^= 0b010;\n\n this._onUpdate();\n }\n\n /** @ignore */\n get culled()\n {\n return !(this.localDisplayStatus & 0b100);\n }\n\n /** @ignore */\n set culled(value: boolean)\n {\n const valueNumber = value ? 0 : 0b100;\n\n if ((this.localDisplayStatus & 0b100) === valueNumber) return;\n\n if (this.parentRenderGroup)\n {\n this.parentRenderGroup.structureDidChange = true;\n }\n\n this._updateFlags |= UPDATE_VISIBLE;\n this.localDisplayStatus ^= 0b100;\n\n this._onUpdate();\n }\n\n /** Can this object be rendered, if false the object will not be drawn but the transform will still be updated. */\n get renderable()\n {\n return !!(this.localDisplayStatus & 0b001);\n }\n\n set renderable(value: boolean)\n {\n const valueNumber = value ? 0b001 : 0;\n\n if ((this.localDisplayStatus & 0b001) === valueNumber) return;\n\n this._updateFlags |= UPDATE_VISIBLE;\n this.localDisplayStatus ^= 0b001;\n\n if (this.parentRenderGroup)\n {\n this.parentRenderGroup.structureDidChange = true;\n }\n\n this._onUpdate();\n }\n\n /** Whether or not the object should be rendered. */\n get isRenderable(): boolean\n {\n return (this.localDisplayStatus === 0b111 && this.groupAlpha > 0);\n }\n\n /**\n * Removes all internal references and listeners as well as removes children from the display list.\n * Do not use a Container after calling `destroy`.\n * @param options - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @param {boolean} [options.children=false] - if set to true, all the children will have their destroy\n * method called as well. 'options' will be passed on to those calls.\n * @param {boolean} [options.texture=false] - Only used for children with textures e.g. Sprites. If options.children\n * is set to true it should destroy the texture of the child sprite\n * @param {boolean} [options.textureSource=false] - Only used for children with textures e.g. Sprites.\n * If options.children is set to true it should destroy the texture source of the child sprite\n * @param {boolean} [options.context=false] - Only used for children with graphicsContexts e.g. Graphics.\n * If options.children is set to true it should destroy the context of the child graphics\n */\n public destroy(options: DestroyOptions = false): void\n {\n if (this.destroyed) return;\n this.destroyed = true;\n\n // remove children is faster than removeChild..\n const oldChildren = this.removeChildren(0, this.children.length);\n\n this.removeFromParent();\n this.parent = null;\n this._maskEffect = null;\n this._filterEffect = null;\n this.effects = null;\n this._position = null;\n this._scale = null;\n this._pivot = null;\n this._skew = null;\n\n this.emit('destroyed', this);\n\n this.removeAllListeners();\n\n const destroyChildren = typeof options === 'boolean' ? options : options?.children;\n\n if (destroyChildren)\n {\n for (let i = 0; i < oldChildren.length; ++i)\n {\n oldChildren[i].destroy(options);\n }\n }\n\n this.renderGroup?.destroy();\n this.renderGroup = null;\n }\n}\n\nContainer.mixin(childrenHelperMixin);\nContainer.mixin(toLocalGlobalMixin);\nContainer.mixin(onRenderMixin);\nContainer.mixin(measureMixin);\nContainer.mixin(effectsMixin);\nContainer.mixin(findMixin);\nContainer.mixin(sortMixin);\nContainer.mixin(cullingMixin);\n"],"names":[],"mappings":"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"} |