@lightningjs/renderer 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +1 -2
- package/dist/exports/core-api.js +1 -1
- package/dist/exports/main-api.js +1 -1
- package/dist/exports/utils.js +1 -1
- package/dist/src/common/CommonTypes.js +1 -1
- package/dist/src/common/EventEmitter.js +1 -1
- package/dist/src/common/IAnimationController.js +1 -1
- package/dist/src/core/CoreExtension.js +1 -1
- package/dist/src/core/CoreNode.js +1 -1
- package/dist/src/core/CoreTextNode.js +1 -1
- package/dist/src/core/CoreTextureManager.js +1 -1
- package/dist/src/core/Matrix2DContext.js +1 -1
- package/dist/src/core/Stage.js +1 -1
- package/dist/src/core/animations/AnimationManager.js +1 -1
- package/dist/src/core/animations/CoreAnimation.js +1 -1
- package/dist/src/core/animations/CoreAnimationController.js +1 -1
- package/dist/src/core/lib/glm/common.js +1 -1
- package/dist/src/core/lib/glm/index.js +1 -1
- package/dist/src/core/lib/glm/mat2.js +1 -1
- package/dist/src/core/lib/glm/mat2d.js +1 -1
- package/dist/src/core/lib/glm/mat3.js +1 -1
- package/dist/src/core/lib/glm/mat4.js +1 -1
- package/dist/src/core/lib/glm/quat.js +1 -1
- package/dist/src/core/lib/glm/quat2.js +1 -1
- package/dist/src/core/lib/glm/vec2.js +1 -1
- package/dist/src/core/lib/glm/vec3.js +1 -1
- package/dist/src/core/lib/glm/vec4.js +1 -1
- package/dist/src/core/lib/utils.js +1 -1
- package/dist/src/core/platform.js +1 -1
- package/dist/src/core/renderers/CoreContextTexture.js +1 -1
- package/dist/src/core/renderers/CoreRenderOp.js +1 -1
- package/dist/src/core/renderers/CoreRenderer.js +1 -1
- package/dist/src/core/renderers/CoreShader.js +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +2 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +4 -2
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +6 -6
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +10 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +8 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +1 -1
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +4 -2
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +6 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +38 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +1 -1
- package/dist/src/core/scene/Scene.js +1 -1
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +1 -1
- package/dist/src/core/text-rendering/TrFontManager.js +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +1 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +1 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +1 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +2 -2
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +1 -1
- package/dist/src/core/textures/ColorTexture.js +1 -1
- package/dist/src/core/textures/ImageTexture.js +1 -1
- package/dist/src/core/textures/NoiseTexture.js +1 -1
- package/dist/src/core/textures/SubTexture.js +1 -1
- package/dist/src/core/textures/Texture.js +1 -1
- package/dist/src/core/utils.js +1 -1
- package/dist/src/main-api/INode.js +1 -1
- package/dist/src/main-api/IRenderDriver.js +1 -1
- package/dist/src/main-api/RendererMain.js +1 -1
- package/dist/src/main-api/TextureRegistry.d.ts +33 -0
- package/dist/src/main-api/TextureRegistry.js +97 -0
- package/dist/src/main-api/TextureRegistry.js.map +1 -0
- package/dist/src/main-api/TextureUsageRegistry/TextureRegistry.d.ts +33 -0
- package/dist/src/main-api/TextureUsageRegistry/TextureRegistry.js +97 -0
- package/dist/src/main-api/TextureUsageRegistry/TextureRegistry.js.map +1 -0
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +9 -0
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +38 -0
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +1 -0
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +56 -0
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +101 -0
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +1 -0
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +32 -0
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +28 -0
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +1 -0
- package/dist/src/render-drivers/main/MainOnlyNode.js +1 -1
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +1 -1
- package/dist/src/render-drivers/main/MainRenderDriver.js +1 -1
- package/dist/src/render-drivers/threadx/NodeStruct.js +1 -1
- package/dist/src/render-drivers/threadx/SharedNode.js +1 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +1 -1
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +1 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +1 -1
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +1 -1
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +1 -1
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +1 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +1 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +1 -1
- package/dist/src/render-drivers/threadx/worker/renderer.js +1 -1
- package/dist/src/utils.js +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/src/common/CommonTypes.ts +70 -0
- package/src/common/EventEmitter.ts +77 -0
- package/src/common/IAnimationController.ts +29 -0
- package/src/core/CoreExtension.ts +32 -0
- package/src/core/CoreNode.ts +700 -0
- package/src/core/CoreShaderManager.ts +111 -0
- package/src/core/CoreTextNode.ts +342 -0
- package/src/core/CoreTextureManager.ts +323 -0
- package/src/core/Matrix2DContext.ts +52 -0
- package/src/core/Stage.ts +280 -0
- package/src/core/animations/AnimationManager.ts +38 -0
- package/src/core/animations/CoreAnimation.ts +139 -0
- package/src/core/animations/CoreAnimationController.ts +117 -0
- package/src/core/lib/glm/common.ts +231 -0
- package/src/core/lib/glm/index.ts +31 -0
- package/src/core/lib/glm/mat2.ts +499 -0
- package/src/core/lib/glm/mat2d.ts +547 -0
- package/src/core/lib/glm/mat3.ts +849 -0
- package/src/core/lib/glm/mat4.ts +2169 -0
- package/src/core/lib/glm/quat.ts +828 -0
- package/src/core/lib/glm/quat2.ts +951 -0
- package/src/core/lib/glm/vec2.ts +671 -0
- package/src/core/lib/glm/vec3.ts +859 -0
- package/src/core/lib/glm/vec4.ts +708 -0
- package/src/core/lib/utils.ts +144 -0
- package/src/core/platform.ts +40 -0
- package/src/core/renderers/CoreContextTexture.ts +30 -0
- package/src/core/renderers/CoreRenderOp.ts +22 -0
- package/src/core/renderers/CoreRenderer.ts +66 -0
- package/src/core/renderers/CoreShader.ts +41 -0
- package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +36 -0
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +208 -0
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +111 -0
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +567 -0
- package/src/core/renderers/webgl/WebGlCoreShader.ts +328 -0
- package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -0
- package/src/core/renderers/webgl/internal/RendererUtils.ts +134 -0
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +135 -0
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -0
- package/src/core/renderers/webgl/shaders/DefaultShader.ts +95 -0
- package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -0
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +430 -0
- package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +168 -0
- package/src/core/renderers/webgl/shaders/SdfShader.ts +165 -0
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -0
- package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +86 -0
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -0
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -0
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -0
- package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +33 -0
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +111 -0
- package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +145 -0
- package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +37 -0
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +182 -0
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +159 -0
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +106 -0
- package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +114 -0
- package/src/core/scene/Scene.ts +120 -0
- package/src/core/text-rendering/TextTextureRendererUtils.ts +189 -0
- package/src/core/text-rendering/TrFontManager.ts +96 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +128 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +159 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +164 -0
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +105 -0
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +77 -0
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +634 -0
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +705 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +647 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +76 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +381 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.test.ts +136 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.ts +64 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +41 -0
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +51 -0
- package/src/core/text-rendering/renderers/TextRenderer.ts +371 -0
- package/src/core/textures/ColorTexture.ts +85 -0
- package/src/core/textures/ImageTexture.ts +113 -0
- package/src/core/textures/NoiseTexture.ts +96 -0
- package/src/core/textures/SubTexture.ts +140 -0
- package/src/core/textures/Texture.ts +162 -0
- package/src/core/utils.ts +222 -0
- package/src/main-api/INode.ts +443 -0
- package/src/main-api/IRenderDriver.ts +58 -0
- package/src/main-api/RendererMain.ts +451 -0
- package/src/render-drivers/main/MainOnlyNode.ts +429 -0
- package/src/render-drivers/main/MainOnlyTextNode.ts +220 -0
- package/src/render-drivers/main/MainRenderDriver.ts +117 -0
- package/src/render-drivers/threadx/NodeStruct.ts +290 -0
- package/src/render-drivers/threadx/SharedNode.ts +95 -0
- package/src/render-drivers/threadx/TextNodeStruct.ts +166 -0
- package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +99 -0
- package/src/render-drivers/threadx/ThreadXMainNode.ts +151 -0
- package/src/render-drivers/threadx/ThreadXMainTextNode.ts +75 -0
- package/src/render-drivers/threadx/ThreadXRenderDriver.ts +247 -0
- package/src/render-drivers/threadx/ThreadXRendererMessage.ts +82 -0
- package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +232 -0
- package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +146 -0
- package/src/render-drivers/threadx/worker/renderer.ts +138 -0
- package/src/render-drivers/utils.ts +57 -0
- package/src/utils.ts +202 -0
|
@@ -0,0 +1,700 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
+
* following copyright and licenses apply:
|
|
4
|
+
*
|
|
5
|
+
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { assertTruthy } from '../utils.js';
|
|
21
|
+
import type { ShaderMap } from './CoreShaderManager.js';
|
|
22
|
+
import type {
|
|
23
|
+
ExtractProps,
|
|
24
|
+
TextureMap,
|
|
25
|
+
TextureOptions,
|
|
26
|
+
} from './CoreTextureManager.js';
|
|
27
|
+
import { Matrix2DContext } from './Matrix2DContext.js';
|
|
28
|
+
import type { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
29
|
+
import type { CoreShader } from './renderers/CoreShader.js';
|
|
30
|
+
import type { Stage } from './Stage.js';
|
|
31
|
+
import type { Texture } from './textures/Texture.js';
|
|
32
|
+
import type {
|
|
33
|
+
TextureFailedEventHandler,
|
|
34
|
+
TextureLoadedEventHandler,
|
|
35
|
+
} from '../common/CommonTypes.js';
|
|
36
|
+
import { EventEmitter } from '../common/EventEmitter.js';
|
|
37
|
+
import type { Rect } from './lib/utils.js';
|
|
38
|
+
|
|
39
|
+
export interface CoreNodeProps {
|
|
40
|
+
id: number;
|
|
41
|
+
// External facing properties whose defaults are determined by
|
|
42
|
+
// RendererMain's resolveNodeDefaults() method
|
|
43
|
+
x: number;
|
|
44
|
+
y: number;
|
|
45
|
+
width: number;
|
|
46
|
+
height: number;
|
|
47
|
+
alpha: number;
|
|
48
|
+
clipping: boolean;
|
|
49
|
+
color: number;
|
|
50
|
+
colorTop: number;
|
|
51
|
+
colorBottom: number;
|
|
52
|
+
colorLeft: number;
|
|
53
|
+
colorRight: number;
|
|
54
|
+
colorTl: number;
|
|
55
|
+
colorTr: number;
|
|
56
|
+
colorBl: number;
|
|
57
|
+
colorBr: number;
|
|
58
|
+
parent: CoreNode | null;
|
|
59
|
+
zIndex: number;
|
|
60
|
+
texture: Texture | null;
|
|
61
|
+
textureOptions: TextureOptions | null;
|
|
62
|
+
shader: CoreShader | null;
|
|
63
|
+
shaderProps: Record<string, unknown> | null;
|
|
64
|
+
zIndexLocked: number;
|
|
65
|
+
scale: number;
|
|
66
|
+
mount: number;
|
|
67
|
+
mountX: number;
|
|
68
|
+
mountY: number;
|
|
69
|
+
pivot: number;
|
|
70
|
+
pivotX: number;
|
|
71
|
+
pivotY: number;
|
|
72
|
+
rotation: number;
|
|
73
|
+
worldX?: number;
|
|
74
|
+
worldY?: number;
|
|
75
|
+
|
|
76
|
+
// Internal properties that are resolved in CoreNode constructor (see below)
|
|
77
|
+
ta?: number;
|
|
78
|
+
tb?: number;
|
|
79
|
+
tc?: number;
|
|
80
|
+
td?: number;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
type ICoreNode = Omit<
|
|
84
|
+
CoreNodeProps,
|
|
85
|
+
'texture' | 'textureOptions' | 'shader' | 'shaderProps'
|
|
86
|
+
>;
|
|
87
|
+
|
|
88
|
+
export class CoreNode extends EventEmitter implements ICoreNode {
|
|
89
|
+
readonly children: CoreNode[] = [];
|
|
90
|
+
protected props: Required<CoreNodeProps>;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Recalculation type
|
|
94
|
+
* 0 - no recalculation
|
|
95
|
+
* 1 - alpha recalculation
|
|
96
|
+
* 2 - translate recalculation
|
|
97
|
+
* 4 - transform recalculation
|
|
98
|
+
*/
|
|
99
|
+
public recalculationType = 6;
|
|
100
|
+
public hasUpdates = true;
|
|
101
|
+
public worldContext: Matrix2DContext = new Matrix2DContext();
|
|
102
|
+
|
|
103
|
+
// local translation / transform updates
|
|
104
|
+
// derived from x, y, w, h, scale, pivot, rotation
|
|
105
|
+
public localPx = 0;
|
|
106
|
+
public localPy = 0;
|
|
107
|
+
|
|
108
|
+
private isComplex = false;
|
|
109
|
+
|
|
110
|
+
constructor(protected stage: Stage, props: CoreNodeProps) {
|
|
111
|
+
super();
|
|
112
|
+
this.props = {
|
|
113
|
+
...props,
|
|
114
|
+
parent: null,
|
|
115
|
+
ta: props.ta ?? 1,
|
|
116
|
+
tb: props.tb ?? 0,
|
|
117
|
+
tc: props.tc ?? 0,
|
|
118
|
+
td: props.td ?? 1,
|
|
119
|
+
worldX: props.worldX ?? 0,
|
|
120
|
+
worldY: props.worldY ?? 0,
|
|
121
|
+
};
|
|
122
|
+
// Allow for parent to be processed appropriately
|
|
123
|
+
this.parent = props.parent;
|
|
124
|
+
this.updateLocalTransform();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
//#region Textures
|
|
128
|
+
loadTexture<Type extends keyof TextureMap>(
|
|
129
|
+
textureType: Type,
|
|
130
|
+
props: ExtractProps<TextureMap[Type]>,
|
|
131
|
+
options: TextureOptions | null = null,
|
|
132
|
+
): void {
|
|
133
|
+
// First unload any existing texture
|
|
134
|
+
if (this.props.texture) {
|
|
135
|
+
this.unloadTexture();
|
|
136
|
+
}
|
|
137
|
+
const { txManager } = this.stage;
|
|
138
|
+
const texture = txManager.loadTexture(textureType, props, options);
|
|
139
|
+
|
|
140
|
+
this.props.texture = texture;
|
|
141
|
+
this.props.textureOptions = options;
|
|
142
|
+
|
|
143
|
+
// If texture is already loaded / failed, trigger loaded event manually
|
|
144
|
+
// so that users get a consistent event experience.
|
|
145
|
+
// We do this in a microtask to allow listeners to be attached in the same
|
|
146
|
+
// synchronous task after calling loadTexture()
|
|
147
|
+
queueMicrotask(() => {
|
|
148
|
+
if (texture.state === 'loaded') {
|
|
149
|
+
this.onTextureLoaded(texture, texture.dimensions!);
|
|
150
|
+
} else if (texture.state === 'failed') {
|
|
151
|
+
this.onTextureFailed(texture, texture.error!);
|
|
152
|
+
}
|
|
153
|
+
texture.on('loaded', this.onTextureLoaded);
|
|
154
|
+
texture.on('failed', this.onTextureFailed);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
unloadTexture(): void {
|
|
159
|
+
if (this.props.texture) {
|
|
160
|
+
this.props.texture.off('loaded', this.onTextureLoaded);
|
|
161
|
+
this.props.texture.off('failed', this.onTextureFailed);
|
|
162
|
+
}
|
|
163
|
+
this.props.texture = null;
|
|
164
|
+
this.props.textureOptions = null;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private onTextureLoaded: TextureLoadedEventHandler = (target, dimensions) => {
|
|
168
|
+
this.emit('txLoaded', dimensions);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
private onTextureFailed: TextureFailedEventHandler = (target, error) => {
|
|
172
|
+
this.emit('txFailed', error);
|
|
173
|
+
};
|
|
174
|
+
//#endregion Textures
|
|
175
|
+
|
|
176
|
+
loadShader<Type extends keyof ShaderMap>(
|
|
177
|
+
shaderType: Type,
|
|
178
|
+
props: ExtractProps<ShaderMap[Type]>,
|
|
179
|
+
): void {
|
|
180
|
+
const shManager = this.stage.renderer.getShaderManager();
|
|
181
|
+
assertTruthy(shManager);
|
|
182
|
+
const { shader, props: p } = shManager.loadShader(shaderType, props);
|
|
183
|
+
this.props.shader = shader;
|
|
184
|
+
this.props.shaderProps = p;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
setHasUpdates(): void {
|
|
188
|
+
if (!this.props.alpha) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
this.hasUpdates = true;
|
|
192
|
+
let p = this?.props.parent;
|
|
193
|
+
|
|
194
|
+
while (p) {
|
|
195
|
+
p.hasUpdates = true;
|
|
196
|
+
p = p?.props.parent;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* 1 - alpha recalculation
|
|
202
|
+
* 2 - translate recalculation
|
|
203
|
+
* 4 - transform recalculation
|
|
204
|
+
* @param type
|
|
205
|
+
*/
|
|
206
|
+
setRecalculationType(type: number): void {
|
|
207
|
+
this.recalculationType |= type;
|
|
208
|
+
this.setHasUpdates();
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
updateLocalTransform() {
|
|
212
|
+
// if rotation is equal to previous render pass, we only need
|
|
213
|
+
// to use sin and cosine of rotation to calculate new position
|
|
214
|
+
if (this.props.rotation !== 0 && this.props.rotation % (Math.PI * 2)) {
|
|
215
|
+
const sineRotation = Math.sin(this.props.rotation);
|
|
216
|
+
const cosineRotation = Math.cos(this.props.rotation);
|
|
217
|
+
|
|
218
|
+
this.setLocalTransform(
|
|
219
|
+
cosineRotation * this.props.scale,
|
|
220
|
+
-sineRotation * this.props.scale,
|
|
221
|
+
sineRotation * this.props.scale,
|
|
222
|
+
cosineRotation * this.props.scale,
|
|
223
|
+
);
|
|
224
|
+
} else {
|
|
225
|
+
this.setLocalTransform(this.props.scale, 0, 0, this.props.scale);
|
|
226
|
+
}
|
|
227
|
+
// do transformations when matrix is implemented
|
|
228
|
+
this.updateLocalTranslate();
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// update 2x2 matrix
|
|
232
|
+
setLocalTransform(a: number, b: number, c: number, d: number) {
|
|
233
|
+
this.setRecalculationType(4);
|
|
234
|
+
this.props.ta = a;
|
|
235
|
+
this.props.tb = b;
|
|
236
|
+
this.props.tc = c;
|
|
237
|
+
this.props.td = d;
|
|
238
|
+
|
|
239
|
+
// test if there is scaling or shearing in transformation ( b !== 0 || c !== 0 )
|
|
240
|
+
// test if there is flipping or reflection in transformation ( a < 0 || d < 0 )
|
|
241
|
+
this.isComplex = b !== 0 || c !== 0 || a < 0 || d < 0;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
updateLocalTranslate() {
|
|
245
|
+
this.setRecalculationType(2);
|
|
246
|
+
const pivotXMultiplier = this.props.pivotX * this.props.width;
|
|
247
|
+
const pivotYMultiplier = this.props.pivotY * this.props.height;
|
|
248
|
+
|
|
249
|
+
let px =
|
|
250
|
+
this.props.x -
|
|
251
|
+
(pivotXMultiplier * this.props.ta + pivotYMultiplier * this.props.tb) +
|
|
252
|
+
pivotXMultiplier;
|
|
253
|
+
let py =
|
|
254
|
+
this.props.y -
|
|
255
|
+
(pivotXMultiplier * this.props.tc + pivotYMultiplier * this.props.td) +
|
|
256
|
+
pivotYMultiplier;
|
|
257
|
+
|
|
258
|
+
px -= this.props.mountX * this.props.width;
|
|
259
|
+
py -= this.props.mountY * this.props.height;
|
|
260
|
+
|
|
261
|
+
this.localPx = px;
|
|
262
|
+
this.localPy = py;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* @todo: test for correct calculation flag
|
|
267
|
+
* @param delta
|
|
268
|
+
*/
|
|
269
|
+
update(delta: number): void {
|
|
270
|
+
const parentWorldContext = this.props.parent?.worldContext;
|
|
271
|
+
const worldContext = this.worldContext;
|
|
272
|
+
|
|
273
|
+
worldContext.px =
|
|
274
|
+
(parentWorldContext?.px || 0) +
|
|
275
|
+
this.localPx * (parentWorldContext?.ta || 1);
|
|
276
|
+
worldContext.py =
|
|
277
|
+
(parentWorldContext?.py || 0) +
|
|
278
|
+
this.localPy * (parentWorldContext?.td || 1);
|
|
279
|
+
|
|
280
|
+
if (parentWorldContext?.tb !== 0) {
|
|
281
|
+
worldContext.px += this.localPy * (parentWorldContext?.tb || 0);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
if (parentWorldContext?.tc !== 0) {
|
|
285
|
+
worldContext.py += this.localPx * (parentWorldContext?.tc || 0);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
worldContext.ta = this.props.ta * (parentWorldContext?.ta || 1);
|
|
289
|
+
worldContext.tb = this.props.td * (parentWorldContext?.tb || 0);
|
|
290
|
+
worldContext.tc = this.props.ta * (parentWorldContext?.tc || 0);
|
|
291
|
+
worldContext.td = this.props.td * (parentWorldContext?.td || 1);
|
|
292
|
+
|
|
293
|
+
if (this.isComplex) {
|
|
294
|
+
worldContext.ta += this.props.tc * (parentWorldContext?.tb || 0);
|
|
295
|
+
worldContext.tb += this.props.tb * (parentWorldContext?.ta || 1);
|
|
296
|
+
worldContext.tc += this.props.tc * (parentWorldContext?.td || 1);
|
|
297
|
+
worldContext.td += this.props.tb * (parentWorldContext?.tc || 0);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
this.worldX = worldContext.px;
|
|
301
|
+
this.worldY = worldContext.py;
|
|
302
|
+
|
|
303
|
+
if (this.children.length) {
|
|
304
|
+
this.children.forEach((child) => {
|
|
305
|
+
child.update(delta);
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// reset update flag
|
|
310
|
+
this.hasUpdates = false;
|
|
311
|
+
|
|
312
|
+
// reset recalculation type
|
|
313
|
+
this.recalculationType = 0;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
renderQuads(renderer: CoreRenderer, clippingRect: Rect | null): void {
|
|
317
|
+
const {
|
|
318
|
+
width,
|
|
319
|
+
height,
|
|
320
|
+
colorTl,
|
|
321
|
+
colorTr,
|
|
322
|
+
colorBl,
|
|
323
|
+
colorBr,
|
|
324
|
+
texture,
|
|
325
|
+
textureOptions,
|
|
326
|
+
shader,
|
|
327
|
+
shaderProps,
|
|
328
|
+
scale,
|
|
329
|
+
} = this.props;
|
|
330
|
+
const { zIndex, alpha, worldScale } = this;
|
|
331
|
+
|
|
332
|
+
// add to list of renderables to be sorted before rendering
|
|
333
|
+
renderer.addRenderable({
|
|
334
|
+
width,
|
|
335
|
+
height,
|
|
336
|
+
colorTl,
|
|
337
|
+
colorTr,
|
|
338
|
+
colorBl,
|
|
339
|
+
colorBr,
|
|
340
|
+
texture,
|
|
341
|
+
textureOptions,
|
|
342
|
+
zIndex,
|
|
343
|
+
shader,
|
|
344
|
+
shaderProps,
|
|
345
|
+
alpha,
|
|
346
|
+
scale,
|
|
347
|
+
clippingRect,
|
|
348
|
+
wpx: this.worldContext.px,
|
|
349
|
+
wpy: this.worldContext.py,
|
|
350
|
+
worldScale,
|
|
351
|
+
ta: this.worldContext.ta,
|
|
352
|
+
tb: this.worldContext.tb,
|
|
353
|
+
tc: this.worldContext.tc,
|
|
354
|
+
td: this.worldContext.td,
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
// Calculate absolute X and Y based on all ancestors
|
|
358
|
+
// renderer.addQuad(absX, absY, w, h, color, texture, textureOptions, zIndex);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
//#region Properties
|
|
362
|
+
get id(): number {
|
|
363
|
+
return this.props.id;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
get x(): number {
|
|
367
|
+
return this.props.x;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
set x(value: number) {
|
|
371
|
+
if (this.props.x !== value) {
|
|
372
|
+
this.props.x = value;
|
|
373
|
+
this.updateLocalTranslate();
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
get worldX(): number {
|
|
378
|
+
return this.props.worldX || 0;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
set worldX(value: number) {
|
|
382
|
+
this.props.worldX = value;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
get worldY(): number {
|
|
386
|
+
return this.props.worldY || 0;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
set worldY(value: number) {
|
|
390
|
+
this.props.worldY = value;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
get absX(): number {
|
|
394
|
+
return (
|
|
395
|
+
this.props.x +
|
|
396
|
+
(this.props.parent?.absX || this.props.parent?.worldContext.px || 0)
|
|
397
|
+
);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
get absY(): number {
|
|
401
|
+
return this.props.y + (this.props.parent?.absY ?? 0);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
get y(): number {
|
|
405
|
+
return this.props.y;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
set y(value: number) {
|
|
409
|
+
if (this.props.y !== value) {
|
|
410
|
+
this.props.y = value;
|
|
411
|
+
this.updateLocalTranslate();
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
get width(): number {
|
|
416
|
+
return this.props.width;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
set width(value: number) {
|
|
420
|
+
if (this.props.width !== value) {
|
|
421
|
+
this.props.width = value;
|
|
422
|
+
this.updateLocalTransform();
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
get height(): number {
|
|
427
|
+
return this.props.height;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
set height(value: number) {
|
|
431
|
+
if (this.props.height !== value) {
|
|
432
|
+
this.props.height = value;
|
|
433
|
+
this.updateLocalTransform();
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
get scale(): number {
|
|
438
|
+
return this.props.scale;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// @todo: implement scaleX and scaleY
|
|
442
|
+
set scale(value: number) {
|
|
443
|
+
if (this.props.scale !== value) {
|
|
444
|
+
this.props.scale = value;
|
|
445
|
+
this.updateLocalTransform();
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
get worldScale(): number {
|
|
450
|
+
return (
|
|
451
|
+
this.props.scale * (this.props.parent?.worldScale ?? 1) ||
|
|
452
|
+
this.props.scale
|
|
453
|
+
);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
get mount(): number {
|
|
457
|
+
return this.props.mount;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
set mount(value: number) {
|
|
461
|
+
// if (this.props.mountX !== value || this.props.mountY !== value) {
|
|
462
|
+
this.props.mountX = value;
|
|
463
|
+
this.props.mountY = value;
|
|
464
|
+
this.props.mount = value;
|
|
465
|
+
this.updateLocalTranslate();
|
|
466
|
+
// }
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
get mountX(): number {
|
|
470
|
+
return this.props.mountX;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
set mountX(value: number) {
|
|
474
|
+
this.props.mountX = value;
|
|
475
|
+
this.updateLocalTranslate();
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
get mountY(): number {
|
|
479
|
+
return this.props.mountY;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
set mountY(value: number) {
|
|
483
|
+
this.props.mountY = value;
|
|
484
|
+
this.updateLocalTranslate();
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
get pivot(): number {
|
|
488
|
+
return this.props.pivot;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
set pivot(value: number) {
|
|
492
|
+
if (this.props.pivotX !== value || this.props.pivotY !== value) {
|
|
493
|
+
this.props.pivotX = value;
|
|
494
|
+
this.props.pivotY = value;
|
|
495
|
+
this.updateLocalTranslate();
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
get pivotX(): number {
|
|
500
|
+
return this.props.pivotX;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
set pivotX(value: number) {
|
|
504
|
+
this.props.pivotX = value;
|
|
505
|
+
this.updateLocalTranslate();
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
get pivotY(): number {
|
|
509
|
+
return this.props.pivotY;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
set pivotY(value: number) {
|
|
513
|
+
this.props.pivotY = value;
|
|
514
|
+
this.updateLocalTranslate();
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
get rotation(): number {
|
|
518
|
+
return this.props.rotation;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
set rotation(value: number) {
|
|
522
|
+
if (this.props.rotation !== value) {
|
|
523
|
+
this.props.rotation = value;
|
|
524
|
+
this.updateLocalTransform();
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
get alpha(): number {
|
|
529
|
+
const props = this.props;
|
|
530
|
+
const parent = props.parent;
|
|
531
|
+
|
|
532
|
+
// root always visible
|
|
533
|
+
if (!parent) {
|
|
534
|
+
return 1;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
return props.alpha * parent.alpha;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
set alpha(value: number) {
|
|
541
|
+
this.props.alpha = value;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
get clipping(): boolean {
|
|
545
|
+
return this.props.clipping;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
set clipping(value: boolean) {
|
|
549
|
+
this.props.clipping = value;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
get color(): number {
|
|
553
|
+
return this.props.color;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
set color(value: number) {
|
|
557
|
+
if (
|
|
558
|
+
this.props.colorTl !== value ||
|
|
559
|
+
this.props.colorTr !== value ||
|
|
560
|
+
this.props.colorBl !== value ||
|
|
561
|
+
this.props.colorBr !== value
|
|
562
|
+
) {
|
|
563
|
+
this.colorTl = value;
|
|
564
|
+
this.colorTr = value;
|
|
565
|
+
this.colorBl = value;
|
|
566
|
+
this.colorBr = value;
|
|
567
|
+
}
|
|
568
|
+
this.props.color = value;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
get colorTop(): number {
|
|
572
|
+
return this.props.colorTop;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
set colorTop(value: number) {
|
|
576
|
+
if (this.props.colorTl !== value || this.props.colorTr !== value) {
|
|
577
|
+
this.colorTl = value;
|
|
578
|
+
this.colorTr = value;
|
|
579
|
+
}
|
|
580
|
+
this.props.colorTop = value;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
get colorBottom(): number {
|
|
584
|
+
return this.props.colorBottom;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
set colorBottom(value: number) {
|
|
588
|
+
if (this.props.colorBl !== value || this.props.colorBr !== value) {
|
|
589
|
+
this.colorBl = value;
|
|
590
|
+
this.colorBr = value;
|
|
591
|
+
}
|
|
592
|
+
this.props.colorBottom = value;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
get colorLeft(): number {
|
|
596
|
+
return this.props.colorLeft;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
set colorLeft(value: number) {
|
|
600
|
+
if (this.props.colorTl !== value || this.props.colorBl !== value) {
|
|
601
|
+
this.colorTl = value;
|
|
602
|
+
this.colorBl = value;
|
|
603
|
+
}
|
|
604
|
+
this.props.colorLeft = value;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
get colorRight(): number {
|
|
608
|
+
return this.props.colorRight;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
set colorRight(value: number) {
|
|
612
|
+
if (this.props.colorTr !== value || this.props.colorBr !== value) {
|
|
613
|
+
this.colorTr = value;
|
|
614
|
+
this.colorBr = value;
|
|
615
|
+
}
|
|
616
|
+
this.props.colorRight = value;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
get colorTl(): number {
|
|
620
|
+
return this.props.colorTl;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
set colorTl(value: number) {
|
|
624
|
+
this.props.colorTl = value;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
get colorTr(): number {
|
|
628
|
+
return this.props.colorTr;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
set colorTr(value: number) {
|
|
632
|
+
this.props.colorTr = value;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
get colorBl(): number {
|
|
636
|
+
return this.props.colorBl;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
set colorBl(value: number) {
|
|
640
|
+
this.props.colorBl = value;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
get colorBr(): number {
|
|
644
|
+
return this.props.colorBr;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
set colorBr(value: number) {
|
|
648
|
+
this.props.colorBr = value;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
// we're only interested in parent zIndex to test
|
|
652
|
+
// if we should use node zIndex is higher then parent zIndex
|
|
653
|
+
get zIndexLocked(): number {
|
|
654
|
+
return this.props.zIndexLocked || 0;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
set zIndexLocked(value: number) {
|
|
658
|
+
this.props.zIndexLocked = value;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
get zIndex(): number {
|
|
662
|
+
const props = this.props;
|
|
663
|
+
const z = props.zIndex || 0;
|
|
664
|
+
const p = props.parent?.zIndex || 0;
|
|
665
|
+
|
|
666
|
+
if (props.parent?.zIndexLocked) {
|
|
667
|
+
return z < p ? z : p;
|
|
668
|
+
}
|
|
669
|
+
return z;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
set zIndex(value: number) {
|
|
673
|
+
this.props.zIndex = value;
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
get parent(): CoreNode | null {
|
|
677
|
+
return this.props.parent;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
set parent(newParent: CoreNode | null) {
|
|
681
|
+
const oldParent = this.props.parent;
|
|
682
|
+
if (oldParent === newParent) {
|
|
683
|
+
return;
|
|
684
|
+
}
|
|
685
|
+
this.props.parent = newParent;
|
|
686
|
+
if (oldParent) {
|
|
687
|
+
const index = oldParent.children.indexOf(this);
|
|
688
|
+
assertTruthy(
|
|
689
|
+
index !== -1,
|
|
690
|
+
"CoreNode.parent: Node not found in old parent's children!",
|
|
691
|
+
);
|
|
692
|
+
oldParent.children.splice(index, 1);
|
|
693
|
+
}
|
|
694
|
+
if (newParent) {
|
|
695
|
+
newParent.children.push(this);
|
|
696
|
+
}
|
|
697
|
+
this.updateLocalTransform();
|
|
698
|
+
}
|
|
699
|
+
//#endregion Properties
|
|
700
|
+
}
|