diff --git a/assets/cc-game/TA/Scene/effect.effect b/assets/cc-game/TA/Scene/effect.effect deleted file mode 100644 index a8a3258..0000000 --- a/assets/cc-game/TA/Scene/effect.effect +++ /dev/null @@ -1,45 +0,0 @@ -// Effect Syntax Guide: https://docs.cocos.com/creator/manual/zh/shader/index.html - -CCEffect %{ - techniques: - - name: opaque - passes: - - vert: legacy/main-functions/general-vs:vert # builtin header - frag: unlit-fs:frag - properties: &props - mainTexture: { value: white } - mainColor: { value: [1, 1, 1, 1], editor: { type: color } } - - name: transparent - passes: - - vert: general-vs:vert # builtin header - frag: unlit-fs:frag - blendState: - targets: - - blend: true - blendSrc: src_alpha - blendDst: one_minus_src_alpha - blendSrcAlpha: src_alpha - blendDstAlpha: one_minus_src_alpha - properties: *props -}% - -CCProgram unlit-fs %{ - precision highp float; - #include - #include - - in vec2 v_uv; - in vec3 v_position; - - uniform sampler2D mainTexture; - - uniform Constant { - vec4 mainColor; - }; - - vec4 frag () { - vec4 col = mainColor * texture(mainTexture, v_uv); - CC_APPLY_FOG(col, v_position); - return CCFragOutput(col); - } -}% diff --git a/assets/cc-game/TA/Scene/effect.effect.meta b/assets/cc-game/TA/Scene/effect.effect.meta deleted file mode 100644 index 30c9965..0000000 --- a/assets/cc-game/TA/Scene/effect.effect.meta +++ /dev/null @@ -1,11 +0,0 @@ -{ - "ver": "1.7.1", - "importer": "effect", - "imported": true, - "uuid": "01be914e-6648-4deb-b7de-5463cd4cc483", - "files": [ - ".json" - ], - "subMetas": {}, - "userData": {} -} diff --git a/assets/cc-game/TA/Scene/mainscene-TA.scene b/assets/cc-game/TA/Scene/mainscene-TA.scene index bd88ece..dba48e2 100644 --- a/assets/cc-game/TA/Scene/mainscene-TA.scene +++ b/assets/cc-game/TA/Scene/mainscene-TA.scene @@ -11,7 +11,7 @@ }, { "__type__": "cc.Scene", - "_name": "mainscene", + "_name": "mainscene-TA", "_objFlags": 0, "__editorExtras__": {}, "_parent": null, diff --git a/assets/cc-game/TA/Shader.meta b/assets/cc-game/TA/Shader.meta new file mode 100644 index 0000000..2ec7a9f --- /dev/null +++ b/assets/cc-game/TA/Shader.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "48a5f2a6-b7c5-493f-9cb8-5fadfa788d2d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/cc-game/TA/Shader/New Shader Graph.shadergraph b/assets/cc-game/TA/Shader/New Shader Graph.shadergraph new file mode 100644 index 0000000..1b2af90 --- /dev/null +++ b/assets/cc-game/TA/Shader/New Shader Graph.shadergraph @@ -0,0 +1,132 @@ +type: Graph +name: New Shader Graph +nodes: + t_171626020706465055968: + type: UnlitMasterNode + position: + x: 347 + 'y': -280 + details: + inputPins: + - dataType: vec3 + value: + x: 0 + 'y': 0 + z: 0 + details: {} + - dataType: vec3 + value: + x: 0 + 'y': 0 + z: 0 + details: {} + - dataType: vec3 + value: + x: 0 + 'y': 0 + z: 0 + details: {} + - dataType: color + value: + x: 0.5 + 'y': 0.5 + z: 0.5 + w: 0.5 + details: {} + - dataType: float + value: 1 + details: {} + - dataType: float + value: 0 + details: {} + outputPins: [] + t_171626027742546958984: + type: PropertyNode + position: + x: -289 + 'y': -216.5 + details: + propertyID: p_1716260273865187457 + baseType: Texture2D + title: Texture2D + outputPins: + - dataType: texture2D + value: + uuid: '' + details: + connectType: texture2D + inputPins: [] + t_1716260283888778133485: + type: SampleTexture2D + position: + x: 20 + 'y': -122.5 + details: + outputPins: + - dataType: vec4 + value: + x: 0 + 'y': 0 + z: 0 + w: 0 + details: {} + - dataType: float + value: 0 + details: {} + - dataType: float + value: 0 + details: {} + - dataType: float + value: 0 + details: {} + - dataType: float + value: 0 + details: {} + inputPins: + - dataType: texture2D + value: + uuid: '' + details: {} + - dataType: vec2 + value: + x: 0 + 'y': 0 + details: {} + - dataType: enum + value: 0 + details: {} + - dataType: enum + value: 0 + details: {} +graphs: {} +lines: + t_171626028899633368342: + type: curve + details: {} + input: + node: t_171626027742546958984 + param: out_PropertyNode_any_Out + output: + node: t_1716260283888778133485 + param: input_SampleTexture2D_texture2D_Texture + t_171626029330409396527: + type: curve + details: {} + input: + node: t_1716260283888778133485 + param: out_SampleTexture2D_vec4_RGBA + output: + node: t_171626020706465055968 + param: input_UnlitMasterNode_color_BaseColor +details: + properties: + - id: p_1716260273865187457 + type: Texture2D + name: Texture2D + declareType: PropertyNode + outputPins: + - dataType: texture2D + value: + uuid: '' + details: + connectType: texture2D diff --git a/assets/cc-game/TA/Shader/New Shader Graph.shadergraph.meta b/assets/cc-game/TA/Shader/New Shader Graph.shadergraph.meta new file mode 100644 index 0000000..2c0d731 --- /dev/null +++ b/assets/cc-game/TA/Shader/New Shader Graph.shadergraph.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.0.0", + "importer": "shader-graph", + "imported": true, + "uuid": "37481e4c-2fee-4314-a771-ca99f73a8766", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/assets/cc-game/scene/mainscene.scene b/assets/cc-game/scene/mainscene.scene index 5e22fad..d9e434c 100644 --- a/assets/cc-game/scene/mainscene.scene +++ b/assets/cc-game/scene/mainscene.scene @@ -23,7 +23,7 @@ "_active": true, "_components": [], "_prefab": { - "__id__": 928 + "__id__": 754 }, "_lpos": { "__type__": "cc.Vec3", @@ -54,7 +54,7 @@ }, "autoReleaseAssets": false, "_globals": { - "__id__": 951 + "__id__": 777 }, "_id": "1271e3a3-5013-4a5b-98f3-2ac3b007353c" }, @@ -99,21 +99,18 @@ }, { "__id__": 746 - }, - { - "__id__": 751 } ], "_active": true, "_components": [ { - "__id__": 925 + "__id__": 751 }, { - "__id__": 926 + "__id__": 752 }, { - "__id__": 927 + "__id__": 753 } ], "_prefab": null, @@ -23001,2213 +22998,6 @@ }, "_id": "ddKmgAaBlBCbKajcSahEN8" }, - { - "__type__": "cc.Node", - "_name": "BarBloodHero", - "_objFlags": 0, - "__editorExtras__": {}, - "_parent": { - "__id__": 2 - }, - "_children": [ - { - "__id__": 752 - }, - { - "__id__": 812 - } - ], - "_active": true, - "_components": [ - { - "__id__": 871 - }, - { - "__id__": 923 - }, - { - "__id__": 924 - } - ], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": 34.619, - "y": -269.131, - "z": 0 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": 0, - "y": 0, - "z": 0, - "w": 1 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 1, - "y": 1, - "z": 1 - }, - "_mobility": 0, - "_layer": 33554432, - "_euler": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_id": "25MooP8qBMtaLhXl4/9Lx1" - }, - { - "__type__": "cc.Node", - "_name": "Spark", - "_objFlags": 0, - "__editorExtras__": {}, - "_parent": { - "__id__": 751 - }, - "_children": [], - "_active": true, - "_components": [ - { - "__id__": 753 - }, - { - "__id__": 810 - }, - { - "__id__": 811 - } - ], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": 8.84, - "y": 0, - "z": 0 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": 0, - "y": 0, - "z": 0, - "w": 1 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 30, - "y": 30, - "z": 30 - }, - "_mobility": 0, - "_layer": 33554432, - "_euler": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_id": "2f5aFfvDhHIrAhSc0146Yz" - }, - { - "__type__": "cc.ParticleSystem", - "_name": "", - "_objFlags": 0, - "__editorExtras__": {}, - "node": { - "__id__": 752 - }, - "_enabled": true, - "__prefab": null, - "_materials": [ - { - "__uuid__": "2904334c-3d13-4ca3-8547-9f4e7e3f6a44", - "__expectedType__": "cc.Material" - }, - null - ], - "_visFlags": 0, - "startColor": { - "__id__": 754 - }, - "scaleSpace": 1, - "startSize3D": false, - "startSizeX": { - "__id__": 755 - }, - "startSize": { - "__id__": 755 - }, - "startSizeY": { - "__id__": 756 - }, - "startSizeZ": { - "__id__": 757 - }, - "startSpeed": { - "__id__": 758 - }, - "startRotation3D": false, - "startRotationX": { - "__id__": 759 - }, - "startRotationY": { - "__id__": 760 - }, - "startRotationZ": { - "__id__": 761 - }, - "startRotation": { - "__id__": 761 - }, - "startDelay": { - "__id__": 762 - }, - "startLifetime": { - "__id__": 763 - }, - "duration": 1, - "loop": true, - "simulationSpeed": 1, - "playOnAwake": true, - "gravityModifier": { - "__id__": 764 - }, - "rateOverTime": { - "__id__": 765 - }, - "rateOverDistance": { - "__id__": 766 - }, - "bursts": [], - "_renderCulling": false, - "_cullingMode": 0, - "_aabbHalfX": 0, - "_aabbHalfY": 0, - "_aabbHalfZ": 0, - "_dataCulling": false, - "enableCulling": false, - "_colorOverLifetimeModule": { - "__id__": 767 - }, - "_shapeModule": { - "__id__": 774 - }, - "_sizeOvertimeModule": { - "__id__": 776 - }, - "_velocityOvertimeModule": { - "__id__": 781 - }, - "_forceOvertimeModule": { - "__id__": 786 - }, - "_limitVelocityOvertimeModule": { - "__id__": 790 - }, - "_rotationOvertimeModule": { - "__id__": 795 - }, - "_textureAnimationModule": { - "__id__": 799 - }, - "_noiseModule": { - "__id__": 803 - }, - "_trailModule": { - "__id__": 804 - }, - "renderer": { - "__id__": 809 - }, - "_prewarm": false, - "_capacity": 1000, - "_simulationSpace": 0, - "_id": "84M4Yds5hK+L+rrv47YnDI" - }, - { - "__type__": "cc.GradientRange", - "_mode": 0, - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 3, - "constantMin": 0.05, - "constantMax": 0.2, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 10, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0.5, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0.25, - "multiplier": 1 - }, - { - "__type__": "cc.ColorOvertimeModule", - "_enable": true, - "color": { - "__id__": 768 - } - }, - { - "__type__": "cc.GradientRange", - "_mode": 1, - "gradient": { - "__id__": 769 - } - }, - { - "__type__": "cc.Gradient", - "colorKeys": [ - { - "__id__": 770 - }, - { - "__id__": 771 - } - ], - "alphaKeys": [ - { - "__id__": 772 - }, - { - "__id__": 773 - } - ], - "mode": 0 - }, - { - "__type__": "cc.ColorKey", - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - }, - "time": 0.01643192488262911 - }, - { - "__type__": "cc.ColorKey", - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - }, - "time": 0.9812206572769953 - }, - { - "__type__": "cc.AlphaKey", - "alpha": 255, - "time": 0 - }, - { - "__type__": "cc.AlphaKey", - "alpha": 0, - "time": 1 - }, - { - "__type__": "cc.ShapeModule", - "_enable": true, - "_shapeType": 0, - "shapeType": 0, - "emitFrom": 3, - "alignToDirection": false, - "randomDirectionAmount": 0, - "sphericalDirectionAmount": 0, - "randomPositionAmount": 0, - "radius": 1, - "radiusThickness": 1, - "arcMode": 0, - "arcSpread": 0, - "arcSpeed": { - "__id__": 775 - }, - "length": 5, - "boxThickness": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_position": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_rotation": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_scale": { - "__type__": "cc.Vec3", - "x": 0.05, - "y": 0.4, - "z": 0 - }, - "_arc": 6.283185307179586, - "_angle": 0.4363323129985824 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.SizeOvertimeModule", - "_enable": false, - "separateAxes": false, - "size": { - "__id__": 777 - }, - "x": { - "__id__": 778 - }, - "y": { - "__id__": 779 - }, - "z": { - "__id__": 780 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.VelocityOvertimeModule", - "_enable": true, - "x": { - "__id__": 782 - }, - "y": { - "__id__": 783 - }, - "z": { - "__id__": 784 - }, - "speedModifier": { - "__id__": 785 - }, - "space": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.ForceOvertimeModule", - "_enable": false, - "x": { - "__id__": 787 - }, - "y": { - "__id__": 788 - }, - "z": { - "__id__": 789 - }, - "space": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.LimitVelocityOvertimeModule", - "_enable": false, - "limitX": { - "__id__": 791 - }, - "limitY": { - "__id__": 792 - }, - "limitZ": { - "__id__": 793 - }, - "limit": { - "__id__": 794 - }, - "dampen": 3, - "separateAxes": false, - "space": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.RotationOvertimeModule", - "_enable": false, - "_separateAxes": false, - "x": { - "__id__": 796 - }, - "y": { - "__id__": 797 - }, - "z": { - "__id__": 798 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.TextureAnimationModule", - "_enable": false, - "_numTilesX": 0, - "numTilesX": 0, - "_numTilesY": 0, - "numTilesY": 0, - "_mode": 0, - "animation": 0, - "frameOverTime": { - "__id__": 800 - }, - "startFrame": { - "__id__": 802 - }, - "cycleCount": 0, - "_flipU": 0, - "_flipV": 0, - "_uvChannelMask": -1, - "randomRow": false, - "rowIndex": 0 - }, - { - "__type__": "cc.CurveRange", - "mode": 1, - "spline": { - "__id__": 801 - }, - "multiplier": 1 - }, - { - "__type__": "cc.RealCurve", - "_times": [ - 0, - 1 - ], - "_values": [ - { - "__type__": "cc.RealKeyframeValue", - "interpolationMode": 2, - "tangentWeightMode": 0, - "value": 1, - "rightTangent": 0, - "rightTangentWeight": 0, - "leftTangent": 0, - "leftTangentWeight": 0, - "easingMethod": 0, - "__editorExtras__": null - }, - { - "__type__": "cc.RealKeyframeValue", - "interpolationMode": 2, - "tangentWeightMode": 0, - "value": 1, - "rightTangent": 0, - "rightTangentWeight": 0, - "leftTangent": 0, - "leftTangentWeight": 0, - "easingMethod": 0, - "__editorExtras__": null - } - ], - "preExtrapolation": 1, - "postExtrapolation": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.NoiseModule", - "_enable": false, - "_strengthX": 10, - "_strengthY": 10, - "_strengthZ": 10, - "_noiseSpeedX": 0, - "_noiseSpeedY": 0, - "_noiseSpeedZ": 0, - "_noiseFrequency": 1, - "_remapX": 0, - "_remapY": 0, - "_remapZ": 0, - "_octaves": 1, - "_octaveMultiplier": 0.5, - "_octaveScale": 2 - }, - { - "__type__": "cc.TrailModule", - "_enable": false, - "mode": 0, - "lifeTime": { - "__id__": 805 - }, - "_minParticleDistance": 0.1, - "existWithParticles": true, - "textureMode": 0, - "widthFromParticle": true, - "widthRatio": { - "__id__": 806 - }, - "colorFromParticle": false, - "colorOverTrail": { - "__id__": 807 - }, - "colorOvertime": { - "__id__": 808 - }, - "_space": 0, - "_particleSystem": { - "__id__": 753 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.GradientRange", - "_mode": 0, - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - } - }, - { - "__type__": "cc.GradientRange", - "_mode": 0, - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - } - }, - { - "__type__": "cc.ParticleSystemRenderer", - "_renderMode": 0, - "_velocityScale": 1, - "_lengthScale": 1, - "_mesh": null, - "_cpuMaterial": { - "__uuid__": "2904334c-3d13-4ca3-8547-9f4e7e3f6a44", - "__expectedType__": "cc.Material" - }, - "_gpuMaterial": null, - "_mainTexture": { - "__uuid__": "63ad5861-547d-4ad1-ae2b-15195c2400a1@6c48a", - "__expectedType__": "cc.Texture2D" - }, - "_useGPU": false, - "_alignSpace": 2 - }, - { - "__type__": "cc.UIMeshRenderer", - "_name": "", - "_objFlags": 0, - "__editorExtras__": {}, - "node": { - "__id__": 752 - }, - "_enabled": true, - "__prefab": null, - "_id": "47Qt7id9JCyIhBynDmGo9l" - }, - { - "__type__": "cc.UITransform", - "_name": "", - "_objFlags": 0, - "__editorExtras__": {}, - "node": { - "__id__": 752 - }, - "_enabled": true, - "__prefab": null, - "_contentSize": { - "__type__": "cc.Size", - "width": 100, - "height": 100 - }, - "_anchorPoint": { - "__type__": "cc.Vec2", - "x": 0.5, - "y": 0.5 - }, - "_id": "9cwnaMNQdEYpBFxMzHDUTh" - }, - { - "__type__": "cc.Node", - "_name": "Cowl", - "_objFlags": 0, - "__editorExtras__": {}, - "_parent": { - "__id__": 751 - }, - "_children": [], - "_active": true, - "_components": [ - { - "__id__": 813 - }, - { - "__id__": 869 - }, - { - "__id__": 870 - } - ], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": 0, - "y": 0, - "z": 0, - "w": 1 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 7, - "y": 13, - "z": 7 - }, - "_mobility": 0, - "_layer": 33554432, - "_euler": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_id": "e6cMXuQ0lMUIJpdsnUzzXc" - }, - { - "__type__": "cc.ParticleSystem", - "_name": "", - "_objFlags": 0, - "__editorExtras__": {}, - "node": { - "__id__": 812 - }, - "_enabled": true, - "__prefab": null, - "_materials": [ - { - "__uuid__": "b13b73f0-6f27-48e5-bfd5-cb5d0ccd2697", - "__expectedType__": "cc.Material" - }, - null - ], - "_visFlags": 0, - "startColor": { - "__id__": 814 - }, - "scaleSpace": 1, - "startSize3D": false, - "startSizeX": { - "__id__": 815 - }, - "startSize": { - "__id__": 815 - }, - "startSizeY": { - "__id__": 816 - }, - "startSizeZ": { - "__id__": 817 - }, - "startSpeed": { - "__id__": 818 - }, - "startRotation3D": false, - "startRotationX": { - "__id__": 819 - }, - "startRotationY": { - "__id__": 820 - }, - "startRotationZ": { - "__id__": 821 - }, - "startRotation": { - "__id__": 821 - }, - "startDelay": { - "__id__": 822 - }, - "startLifetime": { - "__id__": 823 - }, - "duration": 1, - "loop": true, - "simulationSpeed": 1, - "playOnAwake": false, - "gravityModifier": { - "__id__": 824 - }, - "rateOverTime": { - "__id__": 825 - }, - "rateOverDistance": { - "__id__": 826 - }, - "bursts": [], - "_renderCulling": false, - "_cullingMode": 0, - "_aabbHalfX": 0, - "_aabbHalfY": 0, - "_aabbHalfZ": 0, - "_dataCulling": false, - "enableCulling": false, - "_colorOverLifetimeModule": { - "__id__": 827 - }, - "_shapeModule": { - "__id__": 833 - }, - "_sizeOvertimeModule": { - "__id__": 835 - }, - "_velocityOvertimeModule": { - "__id__": 840 - }, - "_forceOvertimeModule": { - "__id__": 845 - }, - "_limitVelocityOvertimeModule": { - "__id__": 849 - }, - "_rotationOvertimeModule": { - "__id__": 854 - }, - "_textureAnimationModule": { - "__id__": 858 - }, - "_noiseModule": { - "__id__": 862 - }, - "_trailModule": { - "__id__": 863 - }, - "renderer": { - "__id__": 868 - }, - "_prewarm": false, - "_capacity": 1, - "_simulationSpace": 1, - "_id": "4ec+YbN2tFda3t5YLRbYHo" - }, - { - "__type__": "cc.GradientRange", - "_mode": 0, - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.ColorOvertimeModule", - "_enable": true, - "color": { - "__id__": 828 - } - }, - { - "__type__": "cc.GradientRange", - "_mode": 1, - "gradient": { - "__id__": 829 - } - }, - { - "__type__": "cc.Gradient", - "colorKeys": [], - "alphaKeys": [ - { - "__id__": 830 - }, - { - "__id__": 831 - }, - { - "__id__": 832 - } - ], - "mode": 0 - }, - { - "__type__": "cc.AlphaKey", - "alpha": 0, - "time": 0 - }, - { - "__type__": "cc.AlphaKey", - "alpha": 255, - "time": 0.5023474178403756 - }, - { - "__type__": "cc.AlphaKey", - "alpha": 0, - "time": 1 - }, - { - "__type__": "cc.ShapeModule", - "_enable": false, - "_shapeType": 2, - "shapeType": 2, - "emitFrom": 0, - "alignToDirection": false, - "randomDirectionAmount": 0, - "sphericalDirectionAmount": 0, - "randomPositionAmount": 0, - "radius": 1, - "radiusThickness": 1, - "arcMode": 0, - "arcSpread": 0, - "arcSpeed": { - "__id__": 834 - }, - "length": 5, - "boxThickness": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_position": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_rotation": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_scale": { - "__type__": "cc.Vec3", - "x": 1, - "y": 1, - "z": 1 - }, - "_arc": 6.283185307179586, - "_angle": 0.4363323129985824 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.SizeOvertimeModule", - "_enable": false, - "separateAxes": false, - "size": { - "__id__": 836 - }, - "x": { - "__id__": 837 - }, - "y": { - "__id__": 838 - }, - "z": { - "__id__": 839 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.VelocityOvertimeModule", - "_enable": false, - "x": { - "__id__": 841 - }, - "y": { - "__id__": 842 - }, - "z": { - "__id__": 843 - }, - "speedModifier": { - "__id__": 844 - }, - "space": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.ForceOvertimeModule", - "_enable": false, - "x": { - "__id__": 846 - }, - "y": { - "__id__": 847 - }, - "z": { - "__id__": 848 - }, - "space": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.LimitVelocityOvertimeModule", - "_enable": false, - "limitX": { - "__id__": 850 - }, - "limitY": { - "__id__": 851 - }, - "limitZ": { - "__id__": 852 - }, - "limit": { - "__id__": 853 - }, - "dampen": 3, - "separateAxes": false, - "space": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.RotationOvertimeModule", - "_enable": false, - "_separateAxes": false, - "x": { - "__id__": 855 - }, - "y": { - "__id__": 856 - }, - "z": { - "__id__": 857 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.TextureAnimationModule", - "_enable": false, - "_numTilesX": 0, - "numTilesX": 0, - "_numTilesY": 0, - "numTilesY": 0, - "_mode": 0, - "animation": 0, - "frameOverTime": { - "__id__": 859 - }, - "startFrame": { - "__id__": 861 - }, - "cycleCount": 0, - "_flipU": 0, - "_flipV": 0, - "_uvChannelMask": -1, - "randomRow": false, - "rowIndex": 0 - }, - { - "__type__": "cc.CurveRange", - "mode": 1, - "spline": { - "__id__": 860 - }, - "multiplier": 1 - }, - { - "__type__": "cc.RealCurve", - "_times": [ - 0, - 1 - ], - "_values": [ - { - "__type__": "cc.RealKeyframeValue", - "interpolationMode": 2, - "tangentWeightMode": 0, - "value": 1, - "rightTangent": 0, - "rightTangentWeight": 0, - "leftTangent": 0, - "leftTangentWeight": 0, - "easingMethod": 0, - "__editorExtras__": null - }, - { - "__type__": "cc.RealKeyframeValue", - "interpolationMode": 2, - "tangentWeightMode": 0, - "value": 1, - "rightTangent": 0, - "rightTangentWeight": 0, - "leftTangent": 0, - "leftTangentWeight": 0, - "easingMethod": 0, - "__editorExtras__": null - } - ], - "preExtrapolation": 1, - "postExtrapolation": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.NoiseModule", - "_enable": false, - "_strengthX": 10, - "_strengthY": 10, - "_strengthZ": 10, - "_noiseSpeedX": 0, - "_noiseSpeedY": 0, - "_noiseSpeedZ": 0, - "_noiseFrequency": 1, - "_remapX": 0, - "_remapY": 0, - "_remapZ": 0, - "_octaves": 1, - "_octaveMultiplier": 0.5, - "_octaveScale": 2 - }, - { - "__type__": "cc.TrailModule", - "_enable": false, - "mode": 0, - "lifeTime": { - "__id__": 864 - }, - "_minParticleDistance": 0.1, - "existWithParticles": true, - "textureMode": 0, - "widthFromParticle": true, - "widthRatio": { - "__id__": 865 - }, - "colorFromParticle": false, - "colorOverTrail": { - "__id__": 866 - }, - "colorOvertime": { - "__id__": 867 - }, - "_space": 0, - "_particleSystem": { - "__id__": 813 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.GradientRange", - "_mode": 0, - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - } - }, - { - "__type__": "cc.GradientRange", - "_mode": 0, - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - } - }, - { - "__type__": "cc.ParticleSystemRenderer", - "_renderMode": 0, - "_velocityScale": 1, - "_lengthScale": 1, - "_mesh": null, - "_cpuMaterial": { - "__uuid__": "b13b73f0-6f27-48e5-bfd5-cb5d0ccd2697", - "__expectedType__": "cc.Material" - }, - "_gpuMaterial": null, - "_mainTexture": { - "__uuid__": "d78e9706-3f29-4e0e-9c56-10513fa44cbb@6c48a", - "__expectedType__": "cc.Texture2D" - }, - "_useGPU": false, - "_alignSpace": 2 - }, - { - "__type__": "cc.UIMeshRenderer", - "_name": "", - "_objFlags": 0, - "__editorExtras__": {}, - "node": { - "__id__": 812 - }, - "_enabled": true, - "__prefab": null, - "_id": "beJncbTwpKCr+MqmmVl94q" - }, - { - "__type__": "cc.UITransform", - "_name": "", - "_objFlags": 0, - "__editorExtras__": {}, - "node": { - "__id__": 812 - }, - "_enabled": true, - "__prefab": null, - "_contentSize": { - "__type__": "cc.Size", - "width": 100, - "height": 100 - }, - "_anchorPoint": { - "__type__": "cc.Vec2", - "x": 0.5, - "y": 0.5 - }, - "_id": "a8z9w31r9AsIXfUdEEXcQD" - }, - { - "__type__": "cc.ParticleSystem", - "_name": "", - "_objFlags": 0, - "__editorExtras__": {}, - "node": { - "__id__": 751 - }, - "_enabled": true, - "__prefab": null, - "_materials": [ - { - "__uuid__": "ea7478b0-408d-4052-b703-f0d2355e095f", - "__expectedType__": "cc.Material" - }, - null - ], - "_visFlags": 0, - "startColor": { - "__id__": 872 - }, - "scaleSpace": 1, - "startSize3D": false, - "startSizeX": { - "__id__": 873 - }, - "startSize": { - "__id__": 873 - }, - "startSizeY": { - "__id__": 874 - }, - "startSizeZ": { - "__id__": 875 - }, - "startSpeed": { - "__id__": 876 - }, - "startRotation3D": false, - "startRotationX": { - "__id__": 877 - }, - "startRotationY": { - "__id__": 878 - }, - "startRotationZ": { - "__id__": 879 - }, - "startRotation": { - "__id__": 879 - }, - "startDelay": { - "__id__": 880 - }, - "startLifetime": { - "__id__": 881 - }, - "duration": 1, - "loop": false, - "simulationSpeed": 1, - "playOnAwake": false, - "gravityModifier": { - "__id__": 882 - }, - "rateOverTime": { - "__id__": 883 - }, - "rateOverDistance": { - "__id__": 884 - }, - "bursts": [], - "_renderCulling": false, - "_cullingMode": 0, - "_aabbHalfX": 0, - "_aabbHalfY": 0, - "_aabbHalfZ": 0, - "_dataCulling": false, - "enableCulling": false, - "_colorOverLifetimeModule": { - "__id__": 885 - }, - "_shapeModule": { - "__id__": 887 - }, - "_sizeOvertimeModule": { - "__id__": 889 - }, - "_velocityOvertimeModule": { - "__id__": 894 - }, - "_forceOvertimeModule": { - "__id__": 899 - }, - "_limitVelocityOvertimeModule": { - "__id__": 903 - }, - "_rotationOvertimeModule": { - "__id__": 908 - }, - "_textureAnimationModule": { - "__id__": 912 - }, - "_noiseModule": { - "__id__": 916 - }, - "_trailModule": { - "__id__": 917 - }, - "renderer": { - "__id__": 922 - }, - "_prewarm": false, - "_capacity": 100, - "_simulationSpace": 1, - "_id": "6bw0eOhNFPH72xNLo2VWNl" - }, - { - "__type__": "cc.GradientRange", - "_mode": 0, - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.ColorOvertimeModule", - "_enable": false, - "color": { - "__id__": 886 - } - }, - { - "__type__": "cc.GradientRange", - "_mode": 0, - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - } - }, - { - "__type__": "cc.ShapeModule", - "_enable": true, - "_shapeType": 1, - "shapeType": 1, - "emitFrom": 0, - "alignToDirection": false, - "randomDirectionAmount": 0, - "sphericalDirectionAmount": 0, - "randomPositionAmount": 0, - "radius": 1, - "radiusThickness": 1, - "arcMode": 0, - "arcSpread": 0, - "arcSpeed": { - "__id__": 888 - }, - "length": 5, - "boxThickness": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_position": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_rotation": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_scale": { - "__type__": "cc.Vec3", - "x": 1, - "y": 1, - "z": 1 - }, - "_arc": 6.283185307179586, - "_angle": 0.4363323129985824 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.SizeOvertimeModule", - "_enable": false, - "separateAxes": false, - "size": { - "__id__": 890 - }, - "x": { - "__id__": 891 - }, - "y": { - "__id__": 892 - }, - "z": { - "__id__": 893 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.VelocityOvertimeModule", - "_enable": false, - "x": { - "__id__": 895 - }, - "y": { - "__id__": 896 - }, - "z": { - "__id__": 897 - }, - "speedModifier": { - "__id__": 898 - }, - "space": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.ForceOvertimeModule", - "_enable": false, - "x": { - "__id__": 900 - }, - "y": { - "__id__": 901 - }, - "z": { - "__id__": 902 - }, - "space": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.LimitVelocityOvertimeModule", - "_enable": false, - "limitX": { - "__id__": 904 - }, - "limitY": { - "__id__": 905 - }, - "limitZ": { - "__id__": 906 - }, - "limit": { - "__id__": 907 - }, - "dampen": 3, - "separateAxes": false, - "space": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.RotationOvertimeModule", - "_enable": false, - "_separateAxes": false, - "x": { - "__id__": 909 - }, - "y": { - "__id__": 910 - }, - "z": { - "__id__": 911 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.TextureAnimationModule", - "_enable": false, - "_numTilesX": 0, - "numTilesX": 0, - "_numTilesY": 0, - "numTilesY": 0, - "_mode": 0, - "animation": 0, - "frameOverTime": { - "__id__": 913 - }, - "startFrame": { - "__id__": 915 - }, - "cycleCount": 0, - "_flipU": 0, - "_flipV": 0, - "_uvChannelMask": -1, - "randomRow": false, - "rowIndex": 0 - }, - { - "__type__": "cc.CurveRange", - "mode": 1, - "spline": { - "__id__": 914 - }, - "multiplier": 1 - }, - { - "__type__": "cc.RealCurve", - "_times": [ - 0, - 1 - ], - "_values": [ - { - "__type__": "cc.RealKeyframeValue", - "interpolationMode": 2, - "tangentWeightMode": 0, - "value": 1, - "rightTangent": 0, - "rightTangentWeight": 0, - "leftTangent": 0, - "leftTangentWeight": 0, - "easingMethod": 0, - "__editorExtras__": null - }, - { - "__type__": "cc.RealKeyframeValue", - "interpolationMode": 2, - "tangentWeightMode": 0, - "value": 1, - "rightTangent": 0, - "rightTangentWeight": 0, - "leftTangent": 0, - "leftTangentWeight": 0, - "easingMethod": 0, - "__editorExtras__": null - } - ], - "preExtrapolation": 1, - "postExtrapolation": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.NoiseModule", - "_enable": false, - "_strengthX": 10, - "_strengthY": 10, - "_strengthZ": 10, - "_noiseSpeedX": 0, - "_noiseSpeedY": 0, - "_noiseSpeedZ": 0, - "_noiseFrequency": 1, - "_remapX": 0, - "_remapY": 0, - "_remapZ": 0, - "_octaves": 1, - "_octaveMultiplier": 0.5, - "_octaveScale": 2 - }, - { - "__type__": "cc.TrailModule", - "_enable": false, - "mode": 0, - "lifeTime": { - "__id__": 918 - }, - "_minParticleDistance": 0.1, - "existWithParticles": true, - "textureMode": 0, - "widthFromParticle": true, - "widthRatio": { - "__id__": 919 - }, - "colorFromParticle": false, - "colorOverTrail": { - "__id__": 920 - }, - "colorOvertime": { - "__id__": 921 - }, - "_space": 0, - "_particleSystem": { - "__id__": 871 - } - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 1, - "multiplier": 1 - }, - { - "__type__": "cc.CurveRange", - "mode": 0, - "constant": 0, - "multiplier": 1 - }, - { - "__type__": "cc.GradientRange", - "_mode": 0, - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - } - }, - { - "__type__": "cc.GradientRange", - "_mode": 0, - "color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - } - }, - { - "__type__": "cc.ParticleSystemRenderer", - "_renderMode": 0, - "_velocityScale": 1, - "_lengthScale": 1, - "_mesh": null, - "_cpuMaterial": { - "__uuid__": "ea7478b0-408d-4052-b703-f0d2355e095f", - "__expectedType__": "cc.Material" - }, - "_gpuMaterial": null, - "_mainTexture": { - "__uuid__": "b5b27ab1-e740-4398-b407-848fc2b2c897@6c48a", - "__expectedType__": "cc.Texture2D" - }, - "_useGPU": false, - "_alignSpace": 2 - }, - { - "__type__": "cc.UIMeshRenderer", - "_name": "", - "_objFlags": 0, - "__editorExtras__": {}, - "node": { - "__id__": 751 - }, - "_enabled": true, - "__prefab": null, - "_id": "f5Dd2xtMFDI7UVwUIcYYJL" - }, - { - "__type__": "cc.UITransform", - "_name": "", - "_objFlags": 0, - "__editorExtras__": {}, - "node": { - "__id__": 751 - }, - "_enabled": true, - "__prefab": null, - "_contentSize": { - "__type__": "cc.Size", - "width": 100, - "height": 100 - }, - "_anchorPoint": { - "__type__": "cc.Vec2", - "x": 0.5, - "y": 0.5 - }, - "_id": "b1QAe82edL/6njkWyvsaL+" - }, { "__type__": "cc.UITransform", "_name": "", @@ -25284,34 +23074,34 @@ "instance": null, "targetOverrides": [ { - "__id__": 929 + "__id__": 755 }, { - "__id__": 931 + "__id__": 757 }, { - "__id__": 934 + "__id__": 760 }, { - "__id__": 937 + "__id__": 763 }, { - "__id__": 939 + "__id__": 765 }, { - "__id__": 941 + "__id__": 767 }, { - "__id__": 943 + "__id__": 769 }, { - "__id__": 945 + "__id__": 771 }, { - "__id__": 947 + "__id__": 773 }, { - "__id__": 949 + "__id__": 775 } ], "nestedPrefabInstanceRoots": [ @@ -25378,7 +23168,7 @@ "__id__": 34 }, "targetInfo": { - "__id__": 930 + "__id__": 756 } }, { @@ -25393,7 +23183,7 @@ "__id__": 719 }, "sourceInfo": { - "__id__": 932 + "__id__": 758 }, "propertyPath": [ "_content" @@ -25402,7 +23192,7 @@ "__id__": 719 }, "targetInfo": { - "__id__": 933 + "__id__": 759 } }, { @@ -25423,7 +23213,7 @@ "__id__": 719 }, "sourceInfo": { - "__id__": 935 + "__id__": 761 }, "propertyPath": [ "_indicator" @@ -25432,7 +23222,7 @@ "__id__": 719 }, "targetInfo": { - "__id__": 936 + "__id__": 762 } }, { @@ -25460,7 +23250,7 @@ "__id__": 719 }, "targetInfo": { - "__id__": 938 + "__id__": 764 } }, { @@ -25482,7 +23272,7 @@ "__id__": 580 }, "targetInfo": { - "__id__": 940 + "__id__": 766 } }, { @@ -25504,7 +23294,7 @@ "__id__": 598 }, "targetInfo": { - "__id__": 942 + "__id__": 768 } }, { @@ -25526,7 +23316,7 @@ "__id__": 616 }, "targetInfo": { - "__id__": 944 + "__id__": 770 } }, { @@ -25548,7 +23338,7 @@ "__id__": 607 }, "targetInfo": { - "__id__": 946 + "__id__": 772 } }, { @@ -25570,7 +23360,7 @@ "__id__": 636 }, "targetInfo": { - "__id__": 948 + "__id__": 774 } }, { @@ -25592,7 +23382,7 @@ "__id__": 627 }, "targetInfo": { - "__id__": 950 + "__id__": 776 } }, { @@ -25604,28 +23394,28 @@ { "__type__": "cc.SceneGlobals", "ambient": { - "__id__": 952 + "__id__": 778 }, "shadows": { - "__id__": 953 + "__id__": 779 }, "_skybox": { - "__id__": 954 + "__id__": 780 }, "fog": { - "__id__": 955 + "__id__": 781 }, "octree": { - "__id__": 956 + "__id__": 782 }, "skin": { - "__id__": 957 + "__id__": 783 }, "lightProbeInfo": { - "__id__": 958 + "__id__": 784 }, "postSettings": { - "__id__": 959 + "__id__": 785 }, "bakedWithStationaryMainLight": false, "bakedWithHighpLightmap": false diff --git a/extensions/shader-graph/README.md b/extensions/shader-graph/README.md new file mode 100644 index 0000000..73be008 --- /dev/null +++ b/extensions/shader-graph/README.md @@ -0,0 +1,149 @@ +# Shader Graph + +## Background + +In order to lower the threshold for Shader development and expand the capabilities of procedural generation, and to encourage artists/technical artists to directly produce materials in Cocos Creator instead of third-party Digital Content Creation (DCC) tools, avoiding additional development work when importing materials, we have introduced a node-based material editor specifically designed for Cocos Creator. + +This plugin relies on Cocos Creator version 3.8.2 and is developed based on our in-house open-source [Graph component](https://github.com/itharbors/ui/tree/main/element/graph) from the Web UI library. + +To promote collaboration and innovation within the developer community, we have open-sourced the full set of source code for this plugin under the MIT license. This means developers are free to use, modify, and distribute this tool. We hope this project inspires more creativity within the community, and encourage everyone to contribute to the improvement of this tool by submitting pull requests. + +--- + +GitHub:[shader-graph](https://github.com/knoxHuang/cocos-creator-extensions/tree/main/extensions/shader-graph) + +--- + + + +### Basic Structure + + + +--- + +## Preparation Phase + +1. Download Cocos Creator 3.8.2 editor and the shader-graph.zip plugin. +2. Open Cocos Creator 3.8.2 editor, go to the main menu, select **Extensions/Extension Manager** to open the Extensions panel. +3. Click , choose the **shader-graph.zip** extension file, and import it. +4. Restart the editor (Currently, for version 3.8.2, a restart is required to ensure the registration of **.shadergraph** assets. In future versions >= 3.8.3, this process will be improved, and a restart may not be necessary). + +--- + +## Creating Asset + +1. Right-click in the **Assets** panel, select **Create/Shader Graph** to create a **.shadergraph** asset. + - Surface (Surface Shader) + - Unlit (Unlit Shader) +2. Double-click the asset to enter the editing panel. +3. + +--- + +## How to Apply to Your Project + +1. Create a new Material asset or select an existing one. +2. In the Inspector panel, locate the Effect property, and then click to choose the effect with the same name as the .shadergraph asset. + + + +3. Assign the Material to your 3D node. + +--- + +## Introduction to Panel Contents + +Initial Panel: + + + +#### Property Window + + + +1. Close window +2. Create variable entry + +The property window can create 8 types of variables: +- Float +- Boolean +- Vector2 +- Vector3 +- Vector4 +- Color +- Texture2D +- TextureCube + +#### Preview Window + + + +1. Close window +2. Switch lights (if Unlit, it has no effect) +3. Force refresh + - When rendering or rotating modes fail, try refreshing. +4. Long press the left mouse button to rotate the model. +5. Switch between built-in or custom models. + +#### Create Node Menu + + + +1. Close window +2. Enter the name of the node to create. +3. Press Enter to create the node directly (the initial position of the created node is where the mouse is pointing). + +--- + +Using regular nodes: + + + +Using property nodes: + + + +--- + +#### Node Library + +For detailed content, refer to [link](shader-node/README.md) + +--- + +### Keyboard Shortcuts + +1. space - Open the create node menu +2. cmd+s/ctrl+s - Save +3. backspace/delete - Delete +4. cmd+c/ctrl+c - Copy +5. cmd+x/ctrl+x - Cut +6. cmd+v/ctrl+v - Paste +7. cmd+d/ctrl+d - Duplicate +8. cmd+z/ctrl+z - Undo +9. cmd+shift+z/ctrl+shift+z - Redo + +---- + +### Command Line Compilation and Publishing + +```bash +npm install - Initialize +npm run build - Compile +npm run pack - Package into a zip file + +// If you want to see specific error messages, you can add --log to the end of the command line, e.g. npm run pack --log. +``` +### Known issues + +- Preview panel does not support dynamic preview + +### Development team + +- Devs: Knox、Youyou +- Framework:VisualSJ +- PM:AndyTian +- UI/UX:派大星 +- Director:Jare + diff --git a/extensions/shader-graph/README.zh-CN.md b/extensions/shader-graph/README.zh-CN.md new file mode 100644 index 0000000..77dd04b --- /dev/null +++ b/extensions/shader-graph/README.zh-CN.md @@ -0,0 +1,147 @@ +# Shader Graph + +## 背景 + +为了降低 Shader 编写的门槛以及拓展程序化生成的能力,鼓励美术/TA 直接在 Cocos Creator 而不是第三方 DCC 中生产材质,避免导入材质时的二次开发工作,我们提供了一个针对 Cocos Creator 的节点材质编辑器。 + +该插件依赖 Cocos Creator 3.8.2 版本,并基于自研的开源 [Web UI 库中的 Graph 组件](https://github.com/itharbors/ui/tree/main/element/graph) 进行开发。 + +为了促进开发者社区的合作和创新,我们以 MIT 协议开源该插件的全套源码,这意味着开发者可以自由使用、修改和分发这一工具。期待这一项目能激发社区更多的灵感和创造力,希望大家在完善这个工具的时候不要藏着掖着,多多给我们提 PR! + +### 源码 + +GitHub:[shader-graph](https://github.com/knoxHuang/cocos-creator-extensions/tree/main/extensions/shader-graph) + + + +### 基本结构 + + + +--- + +## 准备阶段 + +1. 下载 Cocos Creator 3.8.2 编辑器 与 shader-graph.zip 插件。 +2. 打开 Cocos Creator 3.8.2 编辑器,在主菜单中选择 **扩展/扩展管理器** 打开扩展面板。 +3. 点击 ,选择 **shader-graph.zip** 扩展文件,进行导入。、 +4. 需重启编辑器(**目前 3.8.2 需重启编辑器(为了确保 **.shadergraph** 资源注册生效),后续 >= 3.8.3 版本会完善该流程,可无需重启**) + +--- + +## 创建资源 + +1. 到 **Assets** 面板右键选择 **创建/Shader Graph** 菜单进行创建 **.shadergraph** 资源 + - Surface (表面着色器) + - Unlit (无光照着色器) +2. 双击资源,进入到编辑面板 +3. + +--- + +## 如何应用到项目中 + +1. 新建或者选中一个 Material 资源。 +2. 到属性检查器面板中找到 **Effect** 属性,然后点击选择 **.shadergraph** 资源同名的 effect。 + + + +3. 在把 Material 赋值给 3D 节点上即可。 + +--- + +## 面板内容介绍 + +初始面板: + + + +#### 属性窗口 + + + +1. 关闭窗口 +2. 创建属性入口 + +属性窗口可创建 8 种基础类型的属性节点分别是: + +- Float +- Boolean +- Vector2 +- Vector3 +- Vector4 +- Color +- Texture2D +- TextureCube + +#### 预览窗口 + + + +1. 关闭窗口 +2. 切换灯光(如果是 Unlit 无效果) +3. 强制刷新 + - 当遇到无法渲染或无法旋转模式可尝试刷新 +4. 按住鼠标左键滑动,可旋转模型 +5. 可切换内置或者自定义模型 + +#### 创建节点菜单 + + + +1. 关闭窗口 +2. 输入需要创建的节点名 +3. 回车可以直接创建节点(创建节点的初始位置是鼠标所指向的位置) + +--- + +使用普通节点: + + + +使用属性节点: + + + +--- + +#### 节点库 + +详细内容可查看 [传送门](shader-node/README.zh-CN.md) + +--- + +### 快捷键 + +1. space - 打开创建节点菜单 +2. cmd+s/ctrl+s - 保存 +3. backspace/delete - 删除 +4. cmd+c/ctrl+c - 拷贝 +5. cmd+x/ctrl+x - 剪切 +6. cmd+v/ctrl+v - 粘贴 +7. cmd+d/ctrl+d - 复制 +8. cmd+z/ctrl+z - 撤销 +9. cmd+shift+z/ctrl+shift+z - 重做 + +---- + +### 命令行编译与发布 + +``` +npm install - 初始化 +npm run build - 编译 +npm run pack - 打包成 zip 包 +// 如果要查看具体报错信息,可以在命令行后面加 --log 例如:npm run pack --log +``` + +### 已知问题 + +- 预览面板不支持动态预览 + +### 开发团队 + +- Devs: Knox、Youyou +- Framework:VisualSJ +- PM:AndyTian +- UI/UX:派大星 +- Director:Jare diff --git a/extensions/shader-graph/dist/block-forge/block.js b/extensions/shader-graph/dist/block-forge/block.js new file mode 100644 index 0000000..acf490a --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/block.js @@ -0,0 +1,419 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.replaceDeclareBlock = exports.unDeclareBlock = exports.declareBlock = exports.removeDeclareBlock = exports.getDeclareBlock = exports.hasDeclareBlock = exports.generateBlockOption = exports.blockMap = void 0; +const ui_graph_1 = require("@itharbors/ui-graph"); +const utils_1 = require("./utils"); +const pin_1 = require("./pin"); +// import { unregisterNode } from '@itharbors/ui-graph/dist/manager'; +exports.blockMap = new Map(); +/** + * Block 元素更新的一些工具方法 + * 一般是传入元素 + 数据,更新元素内的一些 HTML 对象 + */ +const BlockElementUtils = { + /** + * 更新 Block 元素的 title + * @param elem + * @param blockDesc + * @param details + */ + updateTitle(elem, blockDesc, details) { + const title = blockDesc.title || details.title || 'Unknown'; + elem.shadowRoot.querySelector(`.title ui-label`).innerHTML = title; + }, + /** + * 更新 Block 元素的 icon + * @param elem + * @param blockDesc + * @returns + */ + updateIcon(elem, blockDesc) { + const feature = blockDesc.feature || {}; + const icon = feature.icon; + if (!icon) { + return; + } + const $icon = elem.shadowRoot.querySelector(`.title ui-icon`); + $icon.removeAttribute('hidden'); + $icon.setAttribute('value', icon); + }, + /** + * 更新 Block 元素是否可进入的图标显示状态 + * @param elem + * @param blockDesc + */ + updateCollapsed(elem, blockDesc) { + const feature = blockDesc.feature || {}; + const isCollapsed = feature.isCollapsedBlock; + const $svg = elem.shadowRoot.querySelector(`.title svg`); + if (isCollapsed) { + $svg.removeAttribute('hidden'); + } + else { + $svg.setAttribute('hidden', ''); + } + }, + /** + * 更新元素展开折叠的状态 + * @param elem + * @param blockDesc + * @param details + */ + updateExpand(elem, blockDesc, details) { + if (blockDesc.inputPins.length > 0 || blockDesc.outputPins.length > 0) { + elem.setAttribute('expand', ''); + } + else { + elem.removeAttribute('expand'); + } + }, +}; +/** + * 创建一个专用的节点渲染对象 + * + * @returns + * @param blockDesc + */ +function generateBlockOption(blockDesc) { + blockDesc.style = blockDesc.style || {}; + blockDesc.feature = blockDesc.feature || {}; + const showQuickConnectPoint = !!blockDesc.feature.showQuickConnectPoint; + return { + template: /*html*/ ` +
+
+
+ + + +
+ ${showQuickConnectPoint ? '
+ `, + style: `${STYLE.host(blockDesc)}${STYLE.header(blockDesc)}${STYLE.pin(blockDesc)}`, + /** + * 初始化的时候设置一些事件和 HTML + * @param this + * @param details + */ + onInit(details) { + // 设置 title 可拖拽 + const $title = this.shadowRoot.querySelector('header.title'); + $title.addEventListener('mousedown', (event) => { + event.stopPropagation(); + event.preventDefault(); + if (!this.hasAttribute('selected')) { + if (!event.metaKey && !event.ctrlKey) { + this.clearOtherSelected(); + } + this.select({ + clearLines: false, + clearNodes: false, + }); + } + this.startMove(); + }); + // 绑定快速连接点的事件 + const $param = this.shadowRoot.querySelector(`.quick-connect`); + $param && $param.addEventListener('mousedown', () => { + this.startConnect('straight'); + }); + // 绑定元素点击开始连接的事件 + if (blockDesc.inputPins.length === 0 && blockDesc.outputPins.length === 0) { + this.addEventListener('mousedown', (event) => { + if (event.button === 0 && this.hasConnect()) { + event.stopPropagation(); + event.preventDefault(); + this.startConnect('straight'); + } + }, true); + } + this.addEventListener('dblclick', (event) => { + // event.stopPropagation(); + // event.preventDefault(); + const customEvent = new CustomEvent('block-dblclick', { + bubbles: true, + cancelable: true, + detail: { + pageX: event.pageX, + pageY: event.pageY, + offsetX: event.offsetX, + offsetY: event.offsetY, + }, + }); + this.dispatchEvent(customEvent); + }); + this.addEventListener('click', (event) => { + const custom = new CustomEvent('block-click', { + bubbles: true, + cancelable: true, + detail: {}, + }); + this.dispatchEvent(custom); + }); + this.addEventListener('mouseup', (event) => { + if (event.button !== 2) { + return; + } + const custom = new CustomEvent('block-right-click', { + bubbles: true, + cancelable: true, + detail: {}, + }); + this.dispatchEvent(custom); + }); + this.data.addPropertyListener('selected', (selected, legacySelected) => { + if (selected === legacySelected) { + return; + } + if (selected) { + const custom = new CustomEvent('block-selected', { + bubbles: true, + cancelable: true, + detail: {}, + }); + this.dispatchEvent(custom); + } + else { + const custom = new CustomEvent('block-unselected', { + bubbles: true, + cancelable: true, + detail: {}, + }); + this.dispatchEvent(custom); + } + }); + }, + onUpdate(details) { + // 更新 title + BlockElementUtils.updateTitle(this, blockDesc, details); + // 更新 icon + BlockElementUtils.updateIcon(this, blockDesc); + // 更新折叠图标 + BlockElementUtils.updateCollapsed(this, blockDesc); + // 更新折叠状态 + BlockElementUtils.updateExpand(this, blockDesc, details); + // 数据更新后,更新对应的资源 + // this.data.addPropertyListener('details', (details) => { + // updateHTML(details.label); + // }); + // 生成针脚 + const $content = this.shadowRoot.querySelector('.content'); + $content.innerHTML = ''; + if (blockDesc.createDynamicOutputPins) { + const outputList = blockDesc.createDynamicOutputPins(blockDesc, details); + outputList.forEach((pin, index) => { + return $content?.appendChild((0, pin_1.generateOutputPinHTML)(pin, details.outputPins[index])); + }); + } + else { + blockDesc.outputPins.forEach((pin, index) => { + return $content?.appendChild((0, pin_1.generateOutputPinHTML)(pin, details.outputPins[index])); + }); + } + const $graph = this.getRootNode().host; + const uuid = this.getAttribute('node-uuid'); + if (blockDesc.createDynamicInputPins) { + const inputList = blockDesc.createDynamicInputPins(blockDesc, details); + inputList.forEach((pin, index) => { + return $content?.appendChild((0, pin_1.generateInputPinHTML)(pin, details.inputPins, index, uuid, $graph.getProperty('lines'))); + }); + } + else { + blockDesc.inputPins.forEach((pin, index) => { + return $content?.appendChild((0, pin_1.generateInputPinHTML)(pin, details.inputPins, index, uuid, $graph.getProperty('lines'))); + }); + } + // 绑定参数连接点的事件 + const $paramList = this.shadowRoot.querySelectorAll(`v-graph-node-param`); + Array.prototype.forEach.call($paramList, ($param) => { + $param.addEventListener('mousedown', (event) => { + event.stopPropagation(); + event.preventDefault(); + const name = $param.getAttribute('name'); + if (!name) { + return; + } + const paramDirection = $param.getAttribute('direction'); + if (paramDirection !== 'input' && paramDirection !== 'output') { + return; + } + this.startConnect('curve', name, paramDirection); + }); + }); + }, + }; +} +exports.generateBlockOption = generateBlockOption; +const STYLE = { + host(block) { + const config = block.style || {}; + return /*css*/ ` +:host *[hidden] { + display: none; +} +:host { + --font-color: ${config.fontColor || '#ccc'}; + --font-color-hover: ${config.fontHoverColor || config.fontColor || '#ccc'}; + --border-color: ${config.borderColor || 'white'}; + --border-color-hover: ${config.borderHoverColor || config.borderColor || 'white'}; + --shadow-color: ${config.shadowColor || '#ccc'}; + --shadow-color-hover: ${config.shadowHoverColor || config.shadowColor || '#ccc'}; + --background-color: ${config.backgroundColor || '#2b2b2bcc'}; + --border-radius: 2px; + + --header-height: 24px; + --header-background: ${config.headerColor || '#2b2b2bcc'}; + + --pin-height: 24px; + + width: 200px; + + color: var(--font-color); + cursor: default; + +} +:host > section.wrapper { + margin: 10px; +} +:host(:hover) > section.wrapper, :host([selected]) > section.wrapper { + border-color: var(--border-color-hover); + color: var(--font-color-hover); + box-shadow: 0px 0px 7px 2px var(--shadow-color-hover); +} +section.wrapper { + position: relative; + border-radius: var(--border-radius); + background: var(--background-color); + box-shadow: 0px 0px 7px 2px none; +} +:host(:hover) > section.wrapper::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1; + border-radius: var(--border-radius); + box-shadow: 0px 0px 0px 1px var(--shadow-color-hover) inset; + pointer-events: none; +} +`; + }, + header(block) { + const config = block.style || {}; + return /*css*/ ` +header.title { + line-height: var(--header-height); + + text-align: center; + border-radius: var(--border-radius); + + ${config.secondaryColor ? `background: ${config.secondaryColor}; padding-left: 6px;` : ''} +} +header.title > div { + padding: 0 10px; + height: 24px; + border-radius: var(--border-radius); + display: flex; + background: var(--header-background); +} +:host([expand]) header.title > div { + border-radius: var(--border-radius) var(--border-radius) 0 0; +} +header.title > div > ui-label { + display: block; + padding: 0 10px; +} +header.title > div > ui-icon { + display: block; +} +header.title > div > svg { + fill: white; + display: block; + width: 10px; + transform: rotate(90deg); +} +header.title > .quick-connect { + display: block; + padding: 0; + width: 12px; + height: 12px; + border-radius: 6px; + background: white; + position: absolute; + right: -6px; + top: 50%; + margin-top: -6px; + opacity: 0; + transition: opacity 0.3s; +} +:host(:hover) header.title > .quick-connect { + display: block; + opacity: 1; +} + `; + }, + pin: pin_1.generateStyle, +}; +function hasDeclareBlock(type) { + return exports.blockMap.has(type); +} +exports.hasDeclareBlock = hasDeclareBlock; +function getDeclareBlock(type) { + return exports.blockMap.get(type); +} +exports.getDeclareBlock = getDeclareBlock; +function removeDeclareBlock(type) { + const graph = '*'; + const unknownOption = (0, ui_graph_1.queryNode)(graph, 'unknown'); + (0, ui_graph_1.registerNode)(graph, type, unknownOption); + exports.blockMap.delete(type); +} +exports.removeDeclareBlock = removeDeclareBlock; +// @ts-ignore +window.removeDeclareBlock = removeDeclareBlock; +/** + * 注册一个 block 类型 + * @param block + * @returns + */ +function declareBlock(block) { + const graph = '*'; + // if (blockMap.has(block.type)) { + // console.warn(`Cannot declare duplicate block types: ${block.type}`); + // return; + // } + // 合并 extend 数据 + if (block.extend) { + const extend = exports.blockMap.get(block.extend); + if (!extend) { + console.warn(`Inheritance data not found: ${block.extend}`); + } + else { + (0, utils_1.completeBlockTarget)(block, extend); + } + } + const options = generateBlockOption(block); + (0, ui_graph_1.registerNode)(graph, block.type, options); + exports.blockMap.set(block.type, block); +} +exports.declareBlock = declareBlock; +function unDeclareBlock(type) { + const graph = '*'; + // TODO 需要删除底层 block 节点 + // unregisterNode(graph, type); + exports.blockMap.delete(type); +} +exports.unDeclareBlock = unDeclareBlock; +function replaceDeclareBlock(searchType, block) { + if (exports.blockMap.has(searchType)) { + unDeclareBlock(searchType); + } + declareBlock(block); +} +exports.replaceDeclareBlock = replaceDeclareBlock; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2stZm9yZ2UvYmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7QUFJYixrREFBOEQ7QUFFOUQsbUNBQThDO0FBRTlDLCtCQUF1RztBQUN2RyxxRUFBcUU7QUFFeEQsUUFBQSxRQUFRLEdBQW1DLElBQUksR0FBRyxFQUFFLENBQUM7QUFFbEU7OztHQUdHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRztJQUN0Qjs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxJQUFzQixFQUFFLFNBQTRCLEVBQUUsT0FBK0I7UUFDN0YsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQztRQUM1RCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBRSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLElBQXNCLEVBQUUsU0FBNEI7UUFDM0QsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsT0FBTztTQUNWO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUUsQ0FBQztRQUMvRCxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLElBQXNCLEVBQUUsU0FBNEI7UUFDaEUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDeEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBRSxDQUFDO1FBQzFELElBQUksV0FBVyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsQzthQUFNO1lBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsSUFBc0IsRUFBRSxTQUE0QixFQUFFLE9BQStCO1FBQzlGLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsQztJQUNMLENBQUM7Q0FDSixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxTQUE0QjtJQUM1RCxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3hDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFFNUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztJQUV4RSxPQUFPO1FBQ0gsUUFBUSxFQUFFLFFBQVEsQ0FBQTs7Ozs7Ozs7VUFRaEIscUJBQXFCLENBQUMsQ0FBQyxDQUFDLGtEQUFrRCxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7O1NBSWhGO1FBRUQsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFFbEY7Ozs7V0FJRztRQUNILE1BQU0sQ0FBeUIsT0FBK0I7WUFDMUQsZUFBZTtZQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBaUIsQ0FBQztZQUM3RSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzNDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDaEMsSUFBSSxDQUFFLEtBQW9CLENBQUMsT0FBTyxJQUFJLENBQUUsS0FBb0IsQ0FBQyxPQUFPLEVBQUU7d0JBQ2xFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO3FCQUM3QjtvQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDO3dCQUNSLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixVQUFVLEVBQUUsS0FBSztxQkFDcEIsQ0FBQyxDQUFDO2lCQUNOO2dCQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztZQUVILGFBQWE7WUFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBRSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztZQUVILGdCQUFnQjtZQUNoQixJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUU7d0JBQ3pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUNqQztnQkFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDWjtZQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDeEMsMkJBQTJCO2dCQUMzQiwwQkFBMEI7Z0JBRTFCLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFO29CQUNsRCxPQUFPLEVBQUUsSUFBSTtvQkFDYixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsTUFBTSxFQUFFO3dCQUNKLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzt3QkFDbEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO3dCQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87d0JBQ3RCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztxQkFDekI7aUJBQ0osQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRTtvQkFDMUMsT0FBTyxFQUFFLElBQUk7b0JBQ2IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE1BQU0sRUFBRSxFQUFFO2lCQUNiLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUNwQixPQUFPO2lCQUNWO2dCQUNELE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLG1CQUFtQixFQUFFO29CQUNoRCxPQUFPLEVBQUUsSUFBSTtvQkFDYixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsTUFBTSxFQUFFLEVBQ1A7aUJBQ0osQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsRUFBRTtnQkFDbkUsSUFBSSxRQUFRLEtBQUssY0FBYyxFQUFFO29CQUM3QixPQUFPO2lCQUNWO2dCQUNELElBQUksUUFBUSxFQUFFO29CQUNWLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFO3dCQUM3QyxPQUFPLEVBQUUsSUFBSTt3QkFDYixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFLEVBQUU7cUJBQ2IsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzlCO3FCQUFNO29CQUNILE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLGtCQUFrQixFQUFFO3dCQUMvQyxPQUFPLEVBQUUsSUFBSTt3QkFDYixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsTUFBTSxFQUFFLEVBQUU7cUJBQ2IsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzlCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsUUFBUSxDQUF5QixPQUErQjtZQUM1RCxXQUFXO1lBQ1gsaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFeEQsVUFBVTtZQUNWLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFOUMsU0FBUztZQUNULGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFbkQsU0FBUztZQUNULGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRXpELGdCQUFnQjtZQUNoQiwwREFBMEQ7WUFDMUQsaUNBQWlDO1lBQ2pDLE1BQU07WUFFTixPQUFPO1lBQ1AsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFFLENBQUM7WUFDNUQsUUFBUSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxTQUFTLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ25DLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3pFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQzlCLE9BQU8sUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFBLDJCQUFxQixFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEYsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTTtnQkFDSCxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDeEMsT0FBTyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUEsMkJBQXFCLEVBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RixDQUFDLENBQUMsQ0FBQzthQUNOO1lBQ0QsTUFBTSxNQUFNLEdBQUksSUFBSSxDQUFDLFdBQVcsRUFBVSxDQUFDLElBQW9CLENBQUM7WUFDaEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUUsQ0FBQztZQUM3QyxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRTtnQkFDbEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdkUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDN0IsT0FBTyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUEsMEJBQW9CLEVBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekgsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTTtnQkFDSCxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDdkMsT0FBTyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUEsMEJBQW9CLEVBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekgsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUVELGFBQWE7WUFDYixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDMUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNoRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBaUIsRUFBRSxFQUFFO29CQUN2RCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFFdkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDekMsSUFBSSxDQUFDLElBQUksRUFBRTt3QkFDUCxPQUFPO3FCQUNWO29CQUNELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3hELElBQUksY0FBYyxLQUFLLE9BQU8sSUFBSSxjQUFjLEtBQUssUUFBUSxFQUFFO3dCQUMzRCxPQUFPO3FCQUNWO29CQUNELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQztBQTFMRCxrREEwTEM7QUFFRCxNQUFNLEtBQUssR0FBRztJQUNWLElBQUksQ0FBQyxLQUF3QjtRQUN6QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxPQUFPLE9BQU8sQ0FBQTs7Ozs7b0JBS0YsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNOzBCQUNwQixNQUFNLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTTtzQkFDdkQsTUFBTSxDQUFDLFdBQVcsSUFBSSxPQUFPOzRCQUN2QixNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxPQUFPO3NCQUM5RCxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU07NEJBQ3RCLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU07MEJBQ3pELE1BQU0sQ0FBQyxlQUFlLElBQUksV0FBVzs7OzsyQkFJcEMsTUFBTSxDQUFDLFdBQVcsSUFBSSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQzNELENBQUM7SUFDRSxDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQXdCO1FBQzNCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2pDLE9BQU8sT0FBTyxDQUFBOzs7Ozs7O01BT2hCLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGVBQWUsTUFBTSxDQUFDLGNBQWMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0EyQ3BGLENBQUM7SUFDTixDQUFDO0lBQ0QsR0FBRyxFQUFFLG1CQUFnQjtDQUN4QixDQUFDO0FBRUYsU0FBZ0IsZUFBZSxDQUFDLElBQVk7SUFDeEMsT0FBTyxnQkFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRkQsMENBRUM7QUFFRCxTQUFnQixlQUFlLENBQUMsSUFBWTtJQUN4QyxPQUFPLGdCQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFGRCwwQ0FFQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLElBQVk7SUFDM0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLE1BQU0sYUFBYSxHQUFHLElBQUEsb0JBQVMsRUFBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsSUFBQSx1QkFBWSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDekMsZ0JBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUxELGdEQUtDO0FBRUQsYUFBYTtBQUNiLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUUvQzs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEtBQXdCO0lBQ2pELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNsQixrQ0FBa0M7SUFDbEMsMkVBQTJFO0lBQzNFLGNBQWM7SUFDZCxJQUFJO0lBRUosZUFBZTtJQUNmLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNkLE1BQU0sTUFBTSxHQUFHLGdCQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDL0Q7YUFBTTtZQUNILElBQUEsMkJBQW1CLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3RDO0tBQ0o7SUFFRCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxJQUFBLHVCQUFZLEVBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekMsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBcEJELG9DQW9CQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxJQUFZO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNsQix1QkFBdUI7SUFDdkIsK0JBQStCO0lBQy9CLGdCQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFMRCx3Q0FLQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLFVBQWtCLEVBQUUsS0FBd0I7SUFDNUUsSUFBSSxnQkFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMxQixjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDOUI7SUFDRCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUxELGtEQUtDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7IEdyYXBoTm9kZUVsZW1lbnQgfSBmcm9tICdAaXRoYXJib3JzL3VpLWdyYXBoL2Rpc3QvZWxlbWVudC9ncmFwaC1ub2RlJztcbmltcG9ydCB0eXBlIHsgR3JhcGhFbGVtZW50IH0gZnJvbSAnQGl0aGFyYm9ycy91aS1ncmFwaC9kaXN0L2VsZW1lbnQvZ3JhcGgnO1xuaW1wb3J0IHsgcmVnaXN0ZXJOb2RlLCBxdWVyeU5vZGUgfSBmcm9tICdAaXRoYXJib3JzL3VpLWdyYXBoJztcbmltcG9ydCB0eXBlIHsgSVBpbkRlc2NyaXB0aW9uLCBJQmxvY2tEZXNjcmlwdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB7IGNvbXBsZXRlQmxvY2tUYXJnZXQgfSBmcm9tICcuL3V0aWxzJztcblxuaW1wb3J0IHsgZ2VuZXJhdGVPdXRwdXRQaW5IVE1MLCBnZW5lcmF0ZUlucHV0UGluSFRNTCwgZ2VuZXJhdGVTdHlsZSBhcyBnZW5lcmF0ZVBpblN0eWxlIH0gZnJvbSAnLi9waW4nO1xuLy8gaW1wb3J0IHsgdW5yZWdpc3Rlck5vZGUgfSBmcm9tICdAaXRoYXJib3JzL3VpLWdyYXBoL2Rpc3QvbWFuYWdlcic7XG5cbmV4cG9ydCBjb25zdCBibG9ja01hcDogTWFwPHN0cmluZywgSUJsb2NrRGVzY3JpcHRpb24+ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIEJsb2NrIOWFg+e0oOabtOaWsOeahOS4gOS6m+W3peWFt+aWueazlVxuICog5LiA6Iis5piv5Lyg5YWl5YWD57SgICsg5pWw5o2u77yM5pu05paw5YWD57Sg5YaF55qE5LiA5LqbIEhUTUwg5a+56LGhXG4gKi9cbmNvbnN0IEJsb2NrRWxlbWVudFV0aWxzID0ge1xuICAgIC8qKlxuICAgICAqIOabtOaWsCBCbG9jayDlhYPntKDnmoQgdGl0bGVcbiAgICAgKiBAcGFyYW0gZWxlbVxuICAgICAqIEBwYXJhbSBibG9ja0Rlc2NcbiAgICAgKiBAcGFyYW0gZGV0YWlsc1xuICAgICAqL1xuICAgIHVwZGF0ZVRpdGxlKGVsZW06IEdyYXBoTm9kZUVsZW1lbnQsIGJsb2NrRGVzYzogSUJsb2NrRGVzY3JpcHRpb24sIGRldGFpbHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICAgICAgY29uc3QgdGl0bGUgPSBibG9ja0Rlc2MudGl0bGUgfHwgZGV0YWlscy50aXRsZSB8fCAnVW5rbm93bic7XG4gICAgICAgIGVsZW0uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGAudGl0bGUgdWktbGFiZWxgKSEuaW5uZXJIVE1MID0gdGl0bGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIOabtOaWsCBCbG9jayDlhYPntKDnmoQgaWNvblxuICAgICAqIEBwYXJhbSBlbGVtXG4gICAgICogQHBhcmFtIGJsb2NrRGVzY1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgdXBkYXRlSWNvbihlbGVtOiBHcmFwaE5vZGVFbGVtZW50LCBibG9ja0Rlc2M6IElCbG9ja0Rlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBibG9ja0Rlc2MuZmVhdHVyZSB8fCB7fTtcbiAgICAgICAgY29uc3QgaWNvbiA9IGZlYXR1cmUuaWNvbjtcbiAgICAgICAgaWYgKCFpY29uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgJGljb24gPSBlbGVtLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgLnRpdGxlIHVpLWljb25gKSE7XG4gICAgICAgICRpY29uLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XG4gICAgICAgICRpY29uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBpY29uKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICog5pu05pawIEJsb2NrIOWFg+e0oOaYr+WQpuWPr+i/m+WFpeeahOWbvuagh+aYvuekuueKtuaAgVxuICAgICAqIEBwYXJhbSBlbGVtXG4gICAgICogQHBhcmFtIGJsb2NrRGVzY1xuICAgICAqL1xuICAgIHVwZGF0ZUNvbGxhcHNlZChlbGVtOiBHcmFwaE5vZGVFbGVtZW50LCBibG9ja0Rlc2M6IElCbG9ja0Rlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBibG9ja0Rlc2MuZmVhdHVyZSB8fCB7fTtcbiAgICAgICAgY29uc3QgaXNDb2xsYXBzZWQgPSBmZWF0dXJlLmlzQ29sbGFwc2VkQmxvY2s7XG4gICAgICAgIGNvbnN0ICRzdmcgPSBlbGVtLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgLnRpdGxlIHN2Z2ApITtcbiAgICAgICAgaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAkc3ZnLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc3ZnLnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIOabtOaWsOWFg+e0oOWxleW8gOaKmOWPoOeahOeKtuaAgVxuICAgICAqIEBwYXJhbSBlbGVtXG4gICAgICogQHBhcmFtIGJsb2NrRGVzY1xuICAgICAqIEBwYXJhbSBkZXRhaWxzXG4gICAgICovXG4gICAgdXBkYXRlRXhwYW5kKGVsZW06IEdyYXBoTm9kZUVsZW1lbnQsIGJsb2NrRGVzYzogSUJsb2NrRGVzY3JpcHRpb24sIGRldGFpbHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICAgICAgaWYgKGJsb2NrRGVzYy5pbnB1dFBpbnMubGVuZ3RoID4gMCB8fCBibG9ja0Rlc2Mub3V0cHV0UGlucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnZXhwYW5kJywgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoJ2V4cGFuZCcpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5cbi8qKlxuICog5Yib5bu65LiA5Liq5LiT55So55qE6IqC54K55riy5p+T5a+56LGhXG4gKlxuICogQHJldHVybnNcbiAqIEBwYXJhbSBibG9ja0Rlc2NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQmxvY2tPcHRpb24oYmxvY2tEZXNjOiBJQmxvY2tEZXNjcmlwdGlvbikge1xuICAgIGJsb2NrRGVzYy5zdHlsZSA9IGJsb2NrRGVzYy5zdHlsZSB8fCB7fTtcbiAgICBibG9ja0Rlc2MuZmVhdHVyZSA9IGJsb2NrRGVzYy5mZWF0dXJlIHx8IHt9O1xuXG4gICAgY29uc3Qgc2hvd1F1aWNrQ29ubmVjdFBvaW50ID0gISFibG9ja0Rlc2MuZmVhdHVyZS5zaG93UXVpY2tDb25uZWN0UG9pbnQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0ZW1wbGF0ZTogLypodG1sKi9gXG48c2VjdGlvbiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICA8aGVhZGVyIGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDx1aS1pY29uIGhpZGRlbj48L3VpLWljb24+XG4gICAgICAgICAgICA8dWktbGFiZWw+PC91aS1sYWJlbD5cbiAgICAgICAgICAgIDxzdmcgaGlkZGVuIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xIDEzTDggM0wxNSAxM0gxWlwiPjwvcGF0aD48L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7c2hvd1F1aWNrQ29ubmVjdFBvaW50ID8gJzxkaXYgaGlkZGVuIGNsYXNzPVwicXVpY2stY29ubmVjdFwiIG5hbWU9XCJ0XCI+PC9kaXYnIDogJyd9XG4gICAgPC9oZWFkZXI+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJjb250ZW50XCI+PC9zZWN0aW9uPlxuPC9zZWN0aW9uPlxuICAgICAgICBgLFxuXG4gICAgICAgIHN0eWxlOiBgJHtTVFlMRS5ob3N0KGJsb2NrRGVzYyl9JHtTVFlMRS5oZWFkZXIoYmxvY2tEZXNjKX0ke1NUWUxFLnBpbihibG9ja0Rlc2MpfWAsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIOWIneWni+WMlueahOaXtuWAmeiuvue9ruS4gOS6m+S6i+S7tuWSjCBIVE1MXG4gICAgICAgICAqIEBwYXJhbSB0aGlzXG4gICAgICAgICAqIEBwYXJhbSBkZXRhaWxzXG4gICAgICAgICAqL1xuICAgICAgICBvbkluaXQodGhpczogR3JhcGhOb2RlRWxlbWVudCwgZGV0YWlsczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICAgICAgLy8g6K6+572uIHRpdGxlIOWPr+aLluaLvVxuICAgICAgICAgICAgY29uc3QgJHRpdGxlID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2hlYWRlci50aXRsZScpISBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICR0aXRsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoJ3NlbGVjdGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXZlbnQgYXMgTW91c2VFdmVudCkubWV0YUtleSAmJiAhKGV2ZW50IGFzIE1vdXNlRXZlbnQpLmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJPdGhlclNlbGVjdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJMaW5lczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck5vZGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRNb3ZlKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8g57uR5a6a5b+r6YCf6L+e5o6l54K555qE5LqL5Lu2XG4gICAgICAgICAgICBjb25zdCAkcGFyYW0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgLnF1aWNrLWNvbm5lY3RgKSE7XG4gICAgICAgICAgICAkcGFyYW0gJiYgJHBhcmFtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0Q29ubmVjdCgnc3RyYWlnaHQnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyDnu5HlrprlhYPntKDngrnlh7vlvIDlp4vov57mjqXnmoTkuovku7ZcbiAgICAgICAgICAgIGlmIChibG9ja0Rlc2MuaW5wdXRQaW5zLmxlbmd0aCA9PT0gMCAmJiBibG9ja0Rlc2Mub3V0cHV0UGlucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAwICYmIHRoaXMuaGFzQ29ubmVjdCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0Q29ubmVjdCgnc3RyYWlnaHQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdibG9jay1kYmxjbGljaycsIHtcbiAgICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlWDogZXZlbnQucGFnZVgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlWTogZXZlbnQucGFnZVksXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiBldmVudC5vZmZzZXRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogZXZlbnQub2Zmc2V0WSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tID0gbmV3IEN1c3RvbUV2ZW50KCdibG9jay1jbGljaycsIHtcbiAgICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7fSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoY3VzdG9tKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbSA9IG5ldyBDdXN0b21FdmVudCgnYmxvY2stcmlnaHQtY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChjdXN0b20pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YS5hZGRQcm9wZXJ0eUxpc3RlbmVyKCdzZWxlY3RlZCcsIChzZWxlY3RlZCwgbGVnYWN5U2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IGxlZ2FjeVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbSA9IG5ldyBDdXN0b21FdmVudCgnYmxvY2stc2VsZWN0ZWQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDoge30sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoY3VzdG9tKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXN0b20gPSBuZXcgQ3VzdG9tRXZlbnQoJ2Jsb2NrLXVuc2VsZWN0ZWQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDoge30sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoY3VzdG9tKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBvblVwZGF0ZSh0aGlzOiBHcmFwaE5vZGVFbGVtZW50LCBkZXRhaWxzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICAgICAgICAvLyDmm7TmlrAgdGl0bGVcbiAgICAgICAgICAgIEJsb2NrRWxlbWVudFV0aWxzLnVwZGF0ZVRpdGxlKHRoaXMsIGJsb2NrRGVzYywgZGV0YWlscyk7XG5cbiAgICAgICAgICAgIC8vIOabtOaWsCBpY29uXG4gICAgICAgICAgICBCbG9ja0VsZW1lbnRVdGlscy51cGRhdGVJY29uKHRoaXMsIGJsb2NrRGVzYyk7XG5cbiAgICAgICAgICAgIC8vIOabtOaWsOaKmOWPoOWbvuagh1xuICAgICAgICAgICAgQmxvY2tFbGVtZW50VXRpbHMudXBkYXRlQ29sbGFwc2VkKHRoaXMsIGJsb2NrRGVzYyk7XG5cbiAgICAgICAgICAgIC8vIOabtOaWsOaKmOWPoOeKtuaAgVxuICAgICAgICAgICAgQmxvY2tFbGVtZW50VXRpbHMudXBkYXRlRXhwYW5kKHRoaXMsIGJsb2NrRGVzYywgZGV0YWlscyk7XG5cbiAgICAgICAgICAgIC8vIOaVsOaNruabtOaWsOWQju+8jOabtOaWsOWvueW6lOeahOi1hOa6kFxuICAgICAgICAgICAgLy8gdGhpcy5kYXRhLmFkZFByb3BlcnR5TGlzdGVuZXIoJ2RldGFpbHMnLCAoZGV0YWlscykgPT4ge1xuICAgICAgICAgICAgLy8gICAgIHVwZGF0ZUhUTUwoZGV0YWlscy5sYWJlbCk7XG4gICAgICAgICAgICAvLyB9KTtcblxuICAgICAgICAgICAgLy8g55Sf5oiQ6ZKI6ISaXG4gICAgICAgICAgICBjb25zdCAkY29udGVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcuY29udGVudCcpITtcbiAgICAgICAgICAgICRjb250ZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgaWYgKGJsb2NrRGVzYy5jcmVhdGVEeW5hbWljT3V0cHV0UGlucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dExpc3QgPSBibG9ja0Rlc2MuY3JlYXRlRHluYW1pY091dHB1dFBpbnMoYmxvY2tEZXNjLCBkZXRhaWxzKTtcbiAgICAgICAgICAgICAgICBvdXRwdXRMaXN0LmZvckVhY2goKHBpbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRjb250ZW50Py5hcHBlbmRDaGlsZChnZW5lcmF0ZU91dHB1dFBpbkhUTUwocGluLCBkZXRhaWxzLm91dHB1dFBpbnNbaW5kZXhdKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJsb2NrRGVzYy5vdXRwdXRQaW5zLmZvckVhY2goKHBpbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRjb250ZW50Py5hcHBlbmRDaGlsZChnZW5lcmF0ZU91dHB1dFBpbkhUTUwocGluLCBkZXRhaWxzLm91dHB1dFBpbnNbaW5kZXhdKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCAkZ3JhcGggPSAodGhpcy5nZXRSb290Tm9kZSgpIGFzIGFueSkuaG9zdCBhcyBHcmFwaEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB1dWlkID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ25vZGUtdXVpZCcpITtcbiAgICAgICAgICAgIGlmIChibG9ja0Rlc2MuY3JlYXRlRHluYW1pY0lucHV0UGlucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0TGlzdCA9IGJsb2NrRGVzYy5jcmVhdGVEeW5hbWljSW5wdXRQaW5zKGJsb2NrRGVzYywgZGV0YWlscyk7XG4gICAgICAgICAgICAgICAgaW5wdXRMaXN0LmZvckVhY2goKHBpbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRjb250ZW50Py5hcHBlbmRDaGlsZChnZW5lcmF0ZUlucHV0UGluSFRNTChwaW4sIGRldGFpbHMuaW5wdXRQaW5zLCBpbmRleCwgdXVpZCwgJGdyYXBoLmdldFByb3BlcnR5KCdsaW5lcycpKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJsb2NrRGVzYy5pbnB1dFBpbnMuZm9yRWFjaCgocGluLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGNvbnRlbnQ/LmFwcGVuZENoaWxkKGdlbmVyYXRlSW5wdXRQaW5IVE1MKHBpbiwgZGV0YWlscy5pbnB1dFBpbnMsIGluZGV4LCB1dWlkLCAkZ3JhcGguZ2V0UHJvcGVydHkoJ2xpbmVzJykpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g57uR5a6a5Y+C5pWw6L+e5o6l54K555qE5LqL5Lu2XG4gICAgICAgICAgICBjb25zdCAkcGFyYW1MaXN0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoYHYtZ3JhcGgtbm9kZS1wYXJhbWApO1xuICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCgkcGFyYW1MaXN0LCAoJHBhcmFtKSA9PiB7XG4gICAgICAgICAgICAgICAgJHBhcmFtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gJHBhcmFtLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbURpcmVjdGlvbiA9ICRwYXJhbS5nZXRBdHRyaWJ1dGUoJ2RpcmVjdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1EaXJlY3Rpb24gIT09ICdpbnB1dCcgJiYgcGFyYW1EaXJlY3Rpb24gIT09ICdvdXRwdXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydENvbm5lY3QoJ2N1cnZlJywgbmFtZSwgcGFyYW1EaXJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuY29uc3QgU1RZTEUgPSB7XG4gICAgaG9zdChibG9jazogSUJsb2NrRGVzY3JpcHRpb24pIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYmxvY2suc3R5bGUgfHwge307XG4gICAgICAgIHJldHVybiAvKmNzcyovYFxuOmhvc3QgKltoaWRkZW5dIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuOmhvc3Qge1xuICAgIC0tZm9udC1jb2xvcjogJHtjb25maWcuZm9udENvbG9yIHx8ICcjY2NjJ307XG4gICAgLS1mb250LWNvbG9yLWhvdmVyOiAke2NvbmZpZy5mb250SG92ZXJDb2xvciB8fCBjb25maWcuZm9udENvbG9yIHx8ICcjY2NjJ307XG4gICAgLS1ib3JkZXItY29sb3I6ICR7Y29uZmlnLmJvcmRlckNvbG9yIHx8ICd3aGl0ZSd9O1xuICAgIC0tYm9yZGVyLWNvbG9yLWhvdmVyOiAke2NvbmZpZy5ib3JkZXJIb3ZlckNvbG9yIHx8IGNvbmZpZy5ib3JkZXJDb2xvciB8fCAnd2hpdGUnfTtcbiAgICAtLXNoYWRvdy1jb2xvcjogJHtjb25maWcuc2hhZG93Q29sb3IgfHwgJyNjY2MnfTtcbiAgICAtLXNoYWRvdy1jb2xvci1ob3ZlcjogJHtjb25maWcuc2hhZG93SG92ZXJDb2xvciB8fCBjb25maWcuc2hhZG93Q29sb3IgfHwgJyNjY2MnfTtcbiAgICAtLWJhY2tncm91bmQtY29sb3I6ICR7Y29uZmlnLmJhY2tncm91bmRDb2xvciB8fCAnIzJiMmIyYmNjJ307XG4gICAgLS1ib3JkZXItcmFkaXVzOiAycHg7XG5cbiAgICAtLWhlYWRlci1oZWlnaHQ6IDI0cHg7XG4gICAgLS1oZWFkZXItYmFja2dyb3VuZDogJHtjb25maWcuaGVhZGVyQ29sb3IgfHwgJyMyYjJiMmJjYyd9O1xuXG4gICAgLS1waW4taGVpZ2h0OiAyNHB4O1xuXG4gICAgd2lkdGg6IDIwMHB4O1xuXG4gICAgY29sb3I6IHZhcigtLWZvbnQtY29sb3IpO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcblxufVxuOmhvc3QgPiBzZWN0aW9uLndyYXBwZXIge1xuICAgIG1hcmdpbjogMTBweDtcbn1cbjpob3N0KDpob3ZlcikgPiBzZWN0aW9uLndyYXBwZXIsIDpob3N0KFtzZWxlY3RlZF0pID4gc2VjdGlvbi53cmFwcGVyIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWJvcmRlci1jb2xvci1ob3Zlcik7XG4gICAgY29sb3I6IHZhcigtLWZvbnQtY29sb3ItaG92ZXIpO1xuICAgIGJveC1zaGFkb3c6IDBweCAwcHggN3B4IDJweCB2YXIoLS1zaGFkb3ctY29sb3ItaG92ZXIpO1xufVxuc2VjdGlvbi53cmFwcGVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7IFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQtY29sb3IpO1xuICAgIGJveC1zaGFkb3c6IDBweCAwcHggN3B4IDJweCBub25lO1xufVxuOmhvc3QoOmhvdmVyKSA+IHNlY3Rpb24ud3JhcHBlcjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHotaW5kZXg6IDE7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7IFxuICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDFweCB2YXIoLS1zaGFkb3ctY29sb3ItaG92ZXIpIGluc2V0O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuYDtcbiAgICB9LFxuICAgIGhlYWRlcihibG9jazogSUJsb2NrRGVzY3JpcHRpb24pIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYmxvY2suc3R5bGUgfHwge307XG4gICAgICAgIHJldHVybiAvKmNzcyovYFxuaGVhZGVyLnRpdGxlIHtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0taGVhZGVyLWhlaWdodCk7XG5cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XG5cbiAgICAke2NvbmZpZy5zZWNvbmRhcnlDb2xvciA/IGBiYWNrZ3JvdW5kOiAke2NvbmZpZy5zZWNvbmRhcnlDb2xvcn07IHBhZGRpbmctbGVmdDogNnB4O2AgOiAnJ31cbn1cbmhlYWRlci50aXRsZSA+IGRpdiB7XG4gICAgcGFkZGluZzogMCAxMHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWhlYWRlci1iYWNrZ3JvdW5kKTtcbn1cbjpob3N0KFtleHBhbmRdKSBoZWFkZXIudGl0bGUgPiBkaXYge1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpIHZhcigtLWJvcmRlci1yYWRpdXMpIDAgMDtcbn1cbmhlYWRlci50aXRsZSA+IGRpdiA+IHVpLWxhYmVsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDEwcHg7XG59XG5oZWFkZXIudGl0bGUgPiBkaXYgPiB1aS1pY29uIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbmhlYWRlci50aXRsZSA+IGRpdiA+IHN2ZyB7XG4gICAgZmlsbDogd2hpdGU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwcHg7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xufVxuaGVhZGVyLnRpdGxlID4gLnF1aWNrLWNvbm5lY3Qge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgd2lkdGg6IDEycHg7XG4gICAgaGVpZ2h0OiAxMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IC02cHg7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luLXRvcDogLTZweDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcztcbn1cbjpob3N0KDpob3ZlcikgaGVhZGVyLnRpdGxlID4gLnF1aWNrLWNvbm5lY3Qge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG9wYWNpdHk6IDE7XG59XG4gICAgICAgIGA7XG4gICAgfSxcbiAgICBwaW46IGdlbmVyYXRlUGluU3R5bGUsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzRGVjbGFyZUJsb2NrKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiBibG9ja01hcC5oYXModHlwZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNsYXJlQmxvY2sodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGJsb2NrTWFwLmdldCh0eXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURlY2xhcmVCbG9jayh0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBncmFwaCA9ICcqJztcbiAgICBjb25zdCB1bmtub3duT3B0aW9uID0gcXVlcnlOb2RlKGdyYXBoLCAndW5rbm93bicpO1xuICAgIHJlZ2lzdGVyTm9kZShncmFwaCwgdHlwZSwgdW5rbm93bk9wdGlvbik7XG4gICAgYmxvY2tNYXAuZGVsZXRlKHR5cGUpO1xufVxuXG4vLyBAdHMtaWdub3JlXG53aW5kb3cucmVtb3ZlRGVjbGFyZUJsb2NrID0gcmVtb3ZlRGVjbGFyZUJsb2NrO1xuXG4vKipcbiAqIOazqOWGjOS4gOS4qiBibG9jayDnsbvlnotcbiAqIEBwYXJhbSBibG9ja1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVCbG9jayhibG9jazogSUJsb2NrRGVzY3JpcHRpb24pIHtcbiAgICBjb25zdCBncmFwaCA9ICcqJztcbiAgICAvLyBpZiAoYmxvY2tNYXAuaGFzKGJsb2NrLnR5cGUpKSB7XG4gICAgLy8gICAgIGNvbnNvbGUud2FybihgQ2Fubm90IGRlY2xhcmUgZHVwbGljYXRlIGJsb2NrIHR5cGVzOiAke2Jsb2NrLnR5cGV9YCk7XG4gICAgLy8gICAgIHJldHVybjtcbiAgICAvLyB9XG5cbiAgICAvLyDlkIjlubYgZXh0ZW5kIOaVsOaNrlxuICAgIGlmIChibG9jay5leHRlbmQpIHtcbiAgICAgICAgY29uc3QgZXh0ZW5kID0gYmxvY2tNYXAuZ2V0KGJsb2NrLmV4dGVuZCk7XG4gICAgICAgIGlmICghZXh0ZW5kKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEluaGVyaXRhbmNlIGRhdGEgbm90IGZvdW5kOiAke2Jsb2NrLmV4dGVuZH1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBsZXRlQmxvY2tUYXJnZXQoYmxvY2ssIGV4dGVuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gZ2VuZXJhdGVCbG9ja09wdGlvbihibG9jayk7XG4gICAgcmVnaXN0ZXJOb2RlKGdyYXBoLCBibG9jay50eXBlLCBvcHRpb25zKTtcbiAgICBibG9ja01hcC5zZXQoYmxvY2sudHlwZSwgYmxvY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5EZWNsYXJlQmxvY2sodHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZ3JhcGggPSAnKic7XG4gICAgLy8gVE9ETyDpnIDopoHliKDpmaTlupXlsYIgYmxvY2sg6IqC54K5XG4gICAgLy8gdW5yZWdpc3Rlck5vZGUoZ3JhcGgsIHR5cGUpO1xuICAgIGJsb2NrTWFwLmRlbGV0ZSh0eXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEZWNsYXJlQmxvY2soc2VhcmNoVHlwZTogc3RyaW5nLCBibG9jazogSUJsb2NrRGVzY3JpcHRpb24pIHtcbiAgICBpZiAoYmxvY2tNYXAuaGFzKHNlYXJjaFR5cGUpKSB7XG4gICAgICAgIHVuRGVjbGFyZUJsb2NrKHNlYXJjaFR5cGUpO1xuICAgIH1cbiAgICBkZWNsYXJlQmxvY2soYmxvY2spO1xufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/enum.js b/extensions/shader-graph/dist/block-forge/enum.js new file mode 100644 index 0000000..e22cae0 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/enum.js @@ -0,0 +1,100 @@ +"use strict"; +/** + * 存储 enum 管理 + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.removeEnumObserver = exports.addEnumObserver = exports.clearDynamicEnum = exports.clearEnum = exports.declareEnum = exports.removeDynamicEnumToType = exports.changeDynamicEnumValue = exports.declareDynamicEnumToType = exports.getDynamicEnumByType = exports.getEnumByType = void 0; +const enumMap = new Map(); +const dynamicEnumMap = new Map(); +const enumEventMap = new Map(); +function getEnumByType(type) { + return enumMap.get(type) || []; +} +exports.getEnumByType = getEnumByType; +function getDynamicEnumByType(type) { + return dynamicEnumMap.get(type) || []; +} +exports.getDynamicEnumByType = getDynamicEnumByType; +function emitEventByType(type) { + const eventList = enumEventMap.get(type) || []; + eventList.forEach((event) => event()); +} +/** + * 用于动态声明枚举 + * @param options + */ +function declareDynamicEnumToType(options) { + const enumList = dynamicEnumMap.get(options.type) || []; + if (!enumList.find((item) => item.name === options.name)) { + enumList.push({ + name: options.name, + value: enumList.length, + }); + updateDynamicEnumMap(options.type, enumList); + return true; + } + return false; +} +exports.declareDynamicEnumToType = declareDynamicEnumToType; +function changeDynamicEnumValue(type, newValue, oldValue) { + const enumList = dynamicEnumMap.get(type) || []; + const index = enumList.findIndex((item) => item.name === oldValue); + if (index !== -1) { + enumList[index].name = newValue; + updateDynamicEnumMap(type, enumList); + } +} +exports.changeDynamicEnumValue = changeDynamicEnumValue; +function removeDynamicEnumToType(type, singleEnum) { + const enumList = dynamicEnumMap.get(type) || []; + const index = enumList.findIndex((item) => item.name === singleEnum); + if (index !== -1) { + enumList.splice(index, 1); + updateDynamicEnumMap(type, enumList); + } +} +exports.removeDynamicEnumToType = removeDynamicEnumToType; +function declareEnum(type, ccEnum) { + updateEnumMap(type, ccEnumToList(ccEnum)); +} +exports.declareEnum = declareEnum; +function clearEnum() { + enumMap.clear(); + enumMap.forEach((value, type) => removeEnumObserver(type)); +} +exports.clearEnum = clearEnum; +function clearDynamicEnum() { + dynamicEnumMap.clear(); + dynamicEnumMap.forEach((value, type) => removeEnumObserver(type)); +} +exports.clearDynamicEnum = clearDynamicEnum; +function addEnumObserver(type, func) { + const eventList = enumEventMap.get(type) || []; + eventList.push(func); + enumEventMap.set(type, eventList); +} +exports.addEnumObserver = addEnumObserver; +function removeEnumObserver(type) { + enumEventMap.delete(type); +} +exports.removeEnumObserver = removeEnumObserver; +function ccEnumToList(ccEnum) { + const enums = []; + for (const name in ccEnum) { + const v = ccEnum[name]; + if (Number.isInteger(v)) { + enums.push({ name, value: v }); + } + } + enums.sort((a, b) => a.value - b.value); + return enums; +} +function updateEnumMap(type, enumList) { + enumMap.set(type, enumList); + emitEventByType(type); +} +function updateDynamicEnumMap(type, enumList) { + dynamicEnumMap.set(type, enumList); + emitEventByType(type); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ibG9jay1mb3JnZS9lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBWUgsTUFBTSxPQUFPLEdBQTRCLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxjQUFjLEdBQTRCLElBQUksR0FBRyxFQUFFLENBQUM7QUFDMUQsTUFBTSxZQUFZLEdBQTRCLElBQUksR0FBRyxFQUFFLENBQUM7QUFFeEQsU0FBZ0IsYUFBYSxDQUFDLElBQVk7SUFDdEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRkQsc0NBRUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxJQUFZO0lBQzdDLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQUZELG9EQUVDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBWTtJQUNqQyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxPQUE0QjtJQUNqRSxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RELFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDVixJQUFJLEVBQUUs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QUM7UUFDdkIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbEM7S0FDSjtJQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFVLEVBQUUsQ0FBRSxDQUFDLENBQUMsS0FBZ0IsR0FBSSxDQUFDLENBQUMsS0FBZ0IsQ0FBQyxDQUFDO0lBQ3hFLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxJQUFZLEVBQUUsUUFBb0I7SUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUIsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLElBQVksRUFBRSxRQUFvQjtJQUM1RCxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5a2Y5YKoIGVudW0g566h55CGXG4gKi9cblxuZXhwb3J0IHR5cGUgRW51bVR5cGUgPSB7XG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBudW1iZXIsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIERlY2xhcmVSZWdpc3RlckVudW0ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IGVudW1NYXA6IE1hcDxzdHJpbmcsIEVudW1UeXBlW10+ID0gbmV3IE1hcCgpO1xuY29uc3QgZHluYW1pY0VudW1NYXA6IE1hcDxzdHJpbmcsIEVudW1UeXBlW10+ID0gbmV3IE1hcCgpO1xuY29uc3QgZW51bUV2ZW50TWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbltdPiA9IG5ldyBNYXAoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1CeVR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGVudW1NYXAuZ2V0KHR5cGUpIHx8IFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHluYW1pY0VudW1CeVR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGR5bmFtaWNFbnVtTWFwLmdldCh0eXBlKSB8fCBbXTtcbn1cblxuZnVuY3Rpb24gZW1pdEV2ZW50QnlUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IGV2ZW50TGlzdCA9IGVudW1FdmVudE1hcC5nZXQodHlwZSkgfHwgW107XG4gICAgZXZlbnRMaXN0LmZvckVhY2goKGV2ZW50KSA9PiBldmVudCgpKTtcbn1cblxuLyoqXG4gKiDnlKjkuo7liqjmgIHlo7DmmI7mnprkuL5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJlRHluYW1pY0VudW1Ub1R5cGUob3B0aW9uczogRGVjbGFyZVJlZ2lzdGVyRW51bSkge1xuICAgIGNvbnN0IGVudW1MaXN0ID0gZHluYW1pY0VudW1NYXAuZ2V0KG9wdGlvbnMudHlwZSkgfHwgW107XG4gICAgaWYgKCFlbnVtTGlzdC5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IG9wdGlvbnMubmFtZSkpIHtcbiAgICAgICAgZW51bUxpc3QucHVzaCh7XG4gICAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogZW51bUxpc3QubGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICAgICAgdXBkYXRlRHluYW1pY0VudW1NYXAob3B0aW9ucy50eXBlLCBlbnVtTGlzdCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEeW5hbWljRW51bVZhbHVlKHR5cGU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZywgb2xkVmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IGVudW1MaXN0ID0gZHluYW1pY0VudW1NYXAuZ2V0KHR5cGUpIHx8IFtdO1xuICAgIGNvbnN0IGluZGV4ID0gZW51bUxpc3QuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IG9sZFZhbHVlKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGVudW1MaXN0W2luZGV4XS5uYW1lID0gbmV3VmFsdWU7XG4gICAgICAgIHVwZGF0ZUR5bmFtaWNFbnVtTWFwKHR5cGUsIGVudW1MaXN0KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEeW5hbWljRW51bVRvVHlwZSh0eXBlOiBzdHJpbmcsIHNpbmdsZUVudW06IHN0cmluZykge1xuICAgIGNvbnN0IGVudW1MaXN0ID0gZHluYW1pY0VudW1NYXAuZ2V0KHR5cGUpIHx8IFtdO1xuICAgIGNvbnN0IGluZGV4ID0gZW51bUxpc3QuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHNpbmdsZUVudW0pO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgZW51bUxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdXBkYXRlRHluYW1pY0VudW1NYXAodHlwZSwgZW51bUxpc3QpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVFbnVtKHR5cGU6IHN0cmluZywgY2NFbnVtOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgdXBkYXRlRW51bU1hcCh0eXBlLCBjY0VudW1Ub0xpc3QoY2NFbnVtKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckVudW0oKSB7XG4gICAgZW51bU1hcC5jbGVhcigpO1xuICAgIGVudW1NYXAuZm9yRWFjaCgodmFsdWUsIHR5cGUpID0+IHJlbW92ZUVudW1PYnNlcnZlcih0eXBlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckR5bmFtaWNFbnVtKCkge1xuICAgIGR5bmFtaWNFbnVtTWFwLmNsZWFyKCk7XG4gICAgZHluYW1pY0VudW1NYXAuZm9yRWFjaCgodmFsdWUsIHR5cGUpID0+IHJlbW92ZUVudW1PYnNlcnZlcih0eXBlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFbnVtT2JzZXJ2ZXIodHlwZTogc3RyaW5nLCBmdW5jOiBhbnkpIHtcbiAgICBjb25zdCBldmVudExpc3QgPSBlbnVtRXZlbnRNYXAuZ2V0KHR5cGUpIHx8IFtdO1xuICAgIGV2ZW50TGlzdC5wdXNoKGZ1bmMpO1xuICAgIGVudW1FdmVudE1hcC5zZXQodHlwZSwgZXZlbnRMaXN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVudW1PYnNlcnZlcih0eXBlOiBzdHJpbmcpIHtcbiAgICBlbnVtRXZlbnRNYXAuZGVsZXRlKHR5cGUpO1xufVxuXG5mdW5jdGlvbiBjY0VudW1Ub0xpc3QoY2NFbnVtOiBhbnkpIHtcbiAgICBjb25zdCBlbnVtcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiBjY0VudW0pIHtcbiAgICAgICAgY29uc3QgdiA9IGNjRW51bVtuYW1lXTtcbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIodikpIHtcbiAgICAgICAgICAgIGVudW1zLnB1c2goeyBuYW1lLCB2YWx1ZTogdiB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbnVtcy5zb3J0KChhLCBiKTogbnVtYmVyID0+IChhLnZhbHVlIGFzIG51bWJlcikgLSAoYi52YWx1ZSBhcyBudW1iZXIpKTtcbiAgICByZXR1cm4gZW51bXM7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVudW1NYXAodHlwZTogc3RyaW5nLCBlbnVtTGlzdDogRW51bVR5cGVbXSkge1xuICAgIGVudW1NYXAuc2V0KHR5cGUsIGVudW1MaXN0KTtcbiAgICBlbWl0RXZlbnRCeVR5cGUodHlwZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUR5bmFtaWNFbnVtTWFwKHR5cGU6IHN0cmluZywgZW51bUxpc3Q6IEVudW1UeXBlW10pIHtcbiAgICBkeW5hbWljRW51bU1hcC5zZXQodHlwZSwgZW51bUxpc3QpO1xuICAgIGVtaXRFdmVudEJ5VHlwZSh0eXBlKTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/event.js b/extensions/shader-graph/dist/block-forge/event.js new file mode 100644 index 0000000..16d353e --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/event.js @@ -0,0 +1,69 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LineEvent = exports.BlockEvent = exports.LineMouseEvent = exports.BlockMouseEvent = exports.GraphMouseEvent = void 0; +class CustomEvent { + constructor(blocks, lines) { + this.blocks = blocks; + this.lines = lines; + } +} +class MouseEvent extends CustomEvent { + constructor(blocks, lines) { + super(blocks, lines); + // 点击点在页面的坐标 + this.pageX = 0; + this.pageY = 0; + // 点击点在 Graph 里的坐标 + this.graphX = 0; + this.graphY = 0; + } + initPagePosition(x, y) { + this.pageX = x; + this.pageY = y; + } + initGraphPosition(x, y) { + this.graphX = x; + this.graphY = y; + } +} +class GraphMouseEvent extends MouseEvent { + constructor(blocks, lines, target, forge) { + super(blocks, lines); + this.target = target; + this.forge = forge; + } +} +exports.GraphMouseEvent = GraphMouseEvent; +class BlockMouseEvent extends MouseEvent { + constructor(blocks, lines, target, block) { + super(blocks, lines); + this.block = block; + this.target = target; + } +} +exports.BlockMouseEvent = BlockMouseEvent; +class LineMouseEvent extends MouseEvent { + constructor(blocks, lines, target, line) { + super(blocks, lines); + this.line = line; + this.target = target; + } +} +exports.LineMouseEvent = LineMouseEvent; +class BlockEvent extends CustomEvent { + constructor(blocks, lines, target, block) { + super(blocks, lines); + this.block = block; + this.target = target; + } +} +exports.BlockEvent = BlockEvent; +class LineEvent extends CustomEvent { + constructor(blocks, lines, target, line) { + super(blocks, lines); + this.line = line; + this.target = target; + } +} +exports.LineEvent = LineEvent; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2stZm9yZ2UvZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7QUFlYixNQUFNLFdBQVc7SUFLYixZQUFZLE1BQWdCLEVBQUUsS0FBZTtRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0NBQ0o7QUFFRCxNQUFNLFVBQVcsU0FBUSxXQUFXO0lBU2hDLFlBQ0ksTUFBZ0IsRUFDaEIsS0FBZTtRQUVmLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFaekIsWUFBWTtRQUNaLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRVYsa0JBQWtCO1FBQ2xCLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFDWCxXQUFNLEdBQUcsQ0FBQyxDQUFDO0lBT1gsQ0FBQztJQUVELGdCQUFnQixDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELGlCQUFpQixDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQWEsZUFBZ0IsU0FBUSxVQUFVO0lBSTNDLFlBQ0ksTUFBZ0IsRUFDaEIsS0FBZSxFQUNmLE1BQW9CLEVBQ3BCLEtBQTRCO1FBRTVCLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztDQUNKO0FBZEQsMENBY0M7QUFFRCxNQUFhLGVBQWdCLFNBQVEsVUFBVTtJQUczQyxZQUNJLE1BQWdCLEVBQ2hCLEtBQWUsRUFDZixNQUF3QixFQUN4QixLQUFnQjtRQUVoQixLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7Q0FDSjtBQWJELDBDQWFDO0FBRUQsTUFBYSxjQUFlLFNBQVEsVUFBVTtJQUcxQyxZQUNJLE1BQWdCLEVBQ2hCLEtBQWUsRUFDZixNQUFtQixFQUNuQixJQUFjO1FBRWQsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0NBQ0o7QUFiRCx3Q0FhQztBQUVELE1BQWEsVUFBVyxTQUFRLFdBQVc7SUFHdkMsWUFDSSxNQUFnQixFQUNoQixLQUFlLEVBQ2YsTUFBd0IsRUFDeEIsS0FBZ0I7UUFFaEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0NBQ0o7QUFiRCxnQ0FhQztBQUVELE1BQWEsU0FBVSxTQUFRLFdBQVc7SUFHdEMsWUFDSSxNQUFnQixFQUNoQixLQUFlLEVBQ2YsTUFBbUIsRUFDbkIsSUFBYztRQUVkLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDekIsQ0FBQztDQUNKO0FBYkQsOEJBYUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHsgR3JhcGhOb2RlRWxlbWVudCB9IGZyb20gJ0BpdGhhcmJvcnMvdWktZ3JhcGgvZGlzdC9lbGVtZW50L2dyYXBoLW5vZGUnO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEVsZW1lbnQgfSBmcm9tICdAaXRoYXJib3JzL3VpLWdyYXBoL2Rpc3QvZWxlbWVudC9ncmFwaCc7XG5pbXBvcnQgdHlwZSB7IEhUTUxHcmFwaEZvcmdlRWxlbWVudCB9IGZyb20gJy4vZm9yZ2UnO1xuaW1wb3J0IHR5cGUgeyBHcmFwaERhdGEsIEJsb2NrRGF0YSwgTGluZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5cbnR5cGUgVE5vZGVNYXAgPSB7XG4gICAgW2tleTogc3RyaW5nXTogQmxvY2tEYXRhO1xufTtcblxudHlwZSBUTGluZU1hcCA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBMaW5lRGF0YTtcbn07XG5cbmNsYXNzIEN1c3RvbUV2ZW50IHtcblxuICAgIGJsb2NrczogVE5vZGVNYXA7XG4gICAgbGluZXM6IFRMaW5lTWFwO1xuXG4gICAgY29uc3RydWN0b3IoYmxvY2tzOiBUTm9kZU1hcCwgbGluZXM6IFRMaW5lTWFwKSB7XG4gICAgICAgIHRoaXMuYmxvY2tzID0gYmxvY2tzO1xuICAgICAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gICAgfVxufVxuXG5jbGFzcyBNb3VzZUV2ZW50IGV4dGVuZHMgQ3VzdG9tRXZlbnQge1xuICAgIC8vIOeCueWHu+eCueWcqOmhtemdoueahOWdkOagh1xuICAgIHBhZ2VYID0gMDtcbiAgICBwYWdlWSA9IDA7XG5cbiAgICAvLyDngrnlh7vngrnlnKggR3JhcGgg6YeM55qE5Z2Q5qCHXG4gICAgZ3JhcGhYID0gMDtcbiAgICBncmFwaFkgPSAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGJsb2NrczogVE5vZGVNYXAsXG4gICAgICAgIGxpbmVzOiBUTGluZU1hcCxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoYmxvY2tzLCBsaW5lcyk7XG4gICAgfVxuXG4gICAgaW5pdFBhZ2VQb3NpdGlvbih4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhZ2VYID0geDtcbiAgICAgICAgdGhpcy5wYWdlWSA9IHk7XG4gICAgfVxuXG4gICAgaW5pdEdyYXBoUG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5ncmFwaFggPSB4O1xuICAgICAgICB0aGlzLmdyYXBoWSA9IHk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3JhcGhNb3VzZUV2ZW50IGV4dGVuZHMgTW91c2VFdmVudCB7XG4gICAgdGFyZ2V0OiBHcmFwaEVsZW1lbnQ7XG4gICAgZm9yZ2U6IEhUTUxHcmFwaEZvcmdlRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBibG9ja3M6IFROb2RlTWFwLFxuICAgICAgICBsaW5lczogVExpbmVNYXAsXG4gICAgICAgIHRhcmdldDogR3JhcGhFbGVtZW50LFxuICAgICAgICBmb3JnZTogSFRNTEdyYXBoRm9yZ2VFbGVtZW50LFxuICAgICkge1xuICAgICAgICBzdXBlcihibG9ja3MsIGxpbmVzKTtcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIHRoaXMuZm9yZ2UgPSBmb3JnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbG9ja01vdXNlRXZlbnQgZXh0ZW5kcyBNb3VzZUV2ZW50IHtcbiAgICBibG9jazogQmxvY2tEYXRhO1xuICAgIHRhcmdldDogR3JhcGhOb2RlRWxlbWVudDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgYmxvY2tzOiBUTm9kZU1hcCxcbiAgICAgICAgbGluZXM6IFRMaW5lTWFwLFxuICAgICAgICB0YXJnZXQ6IEdyYXBoTm9kZUVsZW1lbnQsXG4gICAgICAgIGJsb2NrOiBCbG9ja0RhdGEsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGJsb2NrcywgbGluZXMpO1xuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmVNb3VzZUV2ZW50IGV4dGVuZHMgTW91c2VFdmVudCB7XG4gICAgdGFyZ2V0OiBTVkdHRWxlbWVudDtcbiAgICBsaW5lOiBMaW5lRGF0YTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgYmxvY2tzOiBUTm9kZU1hcCxcbiAgICAgICAgbGluZXM6IFRMaW5lTWFwLFxuICAgICAgICB0YXJnZXQ6IFNWR0dFbGVtZW50LFxuICAgICAgICBsaW5lOiBMaW5lRGF0YSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoYmxvY2tzLCBsaW5lcyk7XG4gICAgICAgIHRoaXMubGluZSA9IGxpbmU7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsb2NrRXZlbnQgZXh0ZW5kcyBDdXN0b21FdmVudHtcbiAgICBibG9jazogQmxvY2tEYXRhO1xuICAgIHRhcmdldDogR3JhcGhOb2RlRWxlbWVudDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgYmxvY2tzOiBUTm9kZU1hcCxcbiAgICAgICAgbGluZXM6IFRMaW5lTWFwLFxuICAgICAgICB0YXJnZXQ6IEdyYXBoTm9kZUVsZW1lbnQsXG4gICAgICAgIGJsb2NrOiBCbG9ja0RhdGEsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGJsb2NrcywgbGluZXMpO1xuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmVFdmVudCBleHRlbmRzIEN1c3RvbUV2ZW50IHtcbiAgICBsaW5lOiBMaW5lRGF0YTtcbiAgICB0YXJnZXQ6IFNWR0dFbGVtZW50O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBibG9ja3M6IFROb2RlTWFwLFxuICAgICAgICBsaW5lczogVExpbmVNYXAsXG4gICAgICAgIHRhcmdldDogU1ZHR0VsZW1lbnQsXG4gICAgICAgIGxpbmU6IExpbmVEYXRhLFxuICAgICkge1xuICAgICAgICBzdXBlcihibG9ja3MsIGxpbmVzKTtcbiAgICAgICAgdGhpcy5saW5lID0gbGluZTtcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgfVxufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/forge.js b/extensions/shader-graph/dist/block-forge/forge.js new file mode 100644 index 0000000..363c2cf --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/forge.js @@ -0,0 +1,616 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.HTMLGraphForgeElement = void 0; +const tslib_1 = require("tslib"); +const graph_1 = require("./graph"); +const utils_1 = require("./utils"); +const event_1 = require("./event"); +const structures_1 = require("@itharbors/structures"); +const undo_1 = require("./undo"); +const js_yaml_1 = tslib_1.__importDefault(require("js-yaml")); +const enum_1 = require("./enum"); +const STYLE = /*css*/ ` +:host { display: flex; flex-direction: column; } +:host > header { padding: 4px 10px; display: flex; } +:host > header > div { flex: 1; } +:host > header > div > span { cursor: pointer; } +:host > header > slot { display: block; } +:host > header > i { margin: 0 4px; } +:host > section { flex: 1; display: flex; } +:host > section > v-graph { flex: 1; } +`; +const HTML = /*html*/ ` + +
+
+ +
+
+ +
+`; +class HTMLGraphForgeElement extends HTMLElement { + constructor() { + super(); + this.actionQueue = new structures_1.ActionQueue({ + forge: this, + }); + this.paths = []; + this.attachShadow({ + mode: 'open', + }); + this.shadowRoot.innerHTML = HTML; + this.$graph = this.shadowRoot.querySelector('v-graph'); + this._initHeader(); + this._initSection(); + } + _initHeader() { + this._updateHeader(); + this.shadowRoot.querySelector('header > div').addEventListener('click', (event) => { + const $span = event.target; + if (!$span.hasAttribute('path-index')) { + return; + } + let index = parseInt($span.getAttribute('path-index') || '0'); + if (index < 0) { + index = 0; + } + this.paths.splice(index + 1); + this._updateGraph(); + const graph = this.paths[this.paths.length - 1]; + (0, utils_1.dispatch)(this, 'enter-graph', { + detail: { + id: graph.name, + }, + }); + }); + } + _updateHeader() { + const paths = this.paths.map((info, index) => `${info.name || info.type}`).join('/'); + this.shadowRoot.querySelector('header > div').innerHTML = paths; + } + _initSection() { + const $graph = this.shadowRoot.querySelector('v-graph'); + $graph.shadowRoot.addEventListener('block-click', (event) => { + const customEvent = event; + const type = this.paths[this.paths.length - 1].type; + const info = graph_1.graphMap.get(type); + if (!info) { + return; + } + const $node = customEvent.target; + if (info.graph.event && info.graph.event.onBlockClick) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const uuid = $node.getAttribute('node-uuid') || ''; + const block = $graph.getProperty('nodes')[uuid]; + const blockEvent = new event_1.BlockMouseEvent(nodes, lines, $node, block); + info.graph.event.onBlockClick(blockEvent); + } + }); + $graph.shadowRoot.addEventListener('block-dblclick', (event) => { + const customEvent = event; + const type = this.paths[this.paths.length - 1].type; + const info = graph_1.graphMap.get(type); + if (!info) { + return; + } + const $node = customEvent.target; + if ($node.tagName === 'V-GRAPH-NODE') { + const details = $node.getProperty('details'); + if (details.subGraph) { + this.enterSubGraph(details.subGraph); + return; + } + } + if (info.graph.event && info.graph.event.onBlockDblClick) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const uuid = $node.getAttribute('node-uuid') || ''; + const block = $graph.getProperty('nodes')[uuid]; + const blockEvent = new event_1.BlockMouseEvent(nodes, lines, $node, block); + blockEvent.initPagePosition(customEvent.detail.pageX, customEvent.detail.pageY); + const graphPosition = $graph.convertCoordinate(customEvent.detail.offsetX, customEvent.detail.offsetY); + blockEvent.initGraphPosition(graphPosition.x, graphPosition.y); + info.graph.event.onBlockDblClick(blockEvent); + } + }); + $graph.shadowRoot.addEventListener('block-right-click', (event) => { + const customEvent = event; + const type = this.paths[this.paths.length - 1].type; + const info = graph_1.graphMap.get(type); + if (!info) { + return; + } + const $node = customEvent.target; + if (info.graph.event && info.graph.event.onBlockRightClick) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const uuid = $node.getAttribute('node-uuid') || ''; + const block = $graph.getProperty('nodes')[uuid]; + const blockEvent = new event_1.BlockMouseEvent(nodes, lines, $node, block); + info.graph.event.onBlockRightClick(blockEvent); + } + }); + $graph.addEventListener('node-selected', (event) => { + const type = this.paths[this.paths.length - 1].type; + const info = graph_1.graphMap.get(type); + if (!info) { + return; + } + const $node = event.target; + if (info.graph.event && info.graph.event.onBlockSelected) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const uuid = $node.getAttribute('node-uuid') || ''; + const block = $graph.getProperty('nodes')[uuid]; + const event = new event_1.BlockEvent(nodes, lines, $node, block); + info.graph.event.onBlockSelected(event); + } + }); + $graph.addEventListener('node-unselected', (event) => { + const type = this.paths[this.paths.length - 1].type; + const info = graph_1.graphMap.get(type); + if (!info) { + return; + } + const $node = event.target; + if (info.graph.event && info.graph.event.onBlockUnselected) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const uuid = $node.getAttribute('node-uuid') || ''; + const block = $graph.getProperty('nodes')[uuid]; + const event = new event_1.BlockEvent(nodes, lines, $node, block); + info.graph.event.onBlockUnselected(event); + } + }); + $graph.addEventListener('line-selected', (event) => { + const type = this.paths[this.paths.length - 1].type; + const info = graph_1.graphMap.get(type); + if (!info) { + return; + } + const $g = event.target; + if (info.graph.event && info.graph.event.onLineSelected) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const uuid = $g.getAttribute('line-uuid') || ''; + const line = lines[uuid]; + const event = new event_1.LineEvent(nodes, lines, $g, line); + info.graph.event.onLineSelected(event); + } + }); + $graph.addEventListener('line-unselected', (event) => { + const type = this.paths[this.paths.length - 1].type; + const info = graph_1.graphMap.get(type); + if (!info) { + return; + } + const $g = event.target; + if (info.graph.event && info.graph.event.onLineUnselected) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const uuid = $g.getAttribute('line-uuid') || ''; + const line = lines[uuid]; + const event = new event_1.LineEvent(nodes, lines, $g, line); + info.graph.event.onLineUnselected(event); + } + }); + $graph.addEventListener('node-added', (event) => { + const cEvent = event; + (0, utils_1.dispatch)(this, 'node-added', { + detail: cEvent.detail, + }); + (0, utils_1.dispatch)(this, 'dirty'); + }); + $graph.addEventListener('node-removed', (event) => { + const cEvent = event; + (0, utils_1.dispatch)(this, 'node-removed', { + detail: cEvent.detail, + }); + (0, utils_1.dispatch)(this, 'dirty'); + }); + $graph.addEventListener('node-changed', (event) => { + const cEvent = event; + (0, utils_1.dispatch)(this, 'node-changed', { + detail: cEvent.detail, + }); + (0, utils_1.dispatch)(this, 'dirty'); + }); + $graph.addEventListener('node-position-changed', (event) => { + const cEvent = event; + const queue = cEvent.detail.moveList.map((item) => { + return new undo_1.BlockPositionAction({ + blockName: item.id, + target: item.target, + source: item.source, + }); + }); + if (queue.length === 1) { + this.actionQueue.exec(queue[0]); + } + else if (queue.length > 1) { + this.actionQueue.exec(new structures_1.ActionList({ + queue, + })); + } + (0, utils_1.dispatch)(this, 'dirty', { + detail: { + dirtyType: 'position-changed', + }, + }); + }); + // //// //// + $graph.shadowRoot.addEventListener('dirty', (event) => { + const cEvent = event; + if (cEvent.detail && cEvent.detail.action) { + this.actionQueue.exec(cEvent.detail.action); + } + (0, utils_1.dispatch)(this, 'dirty', { + detail: cEvent.detail, + }); + }); + $graph.addEventListener('mouseup', (event) => { + const info = graph_1.graphMap.get(this.rootGraph.type); + if (!info) { + return; + } + if (event.button === 2 && info.graph.event?.onGraphRightClick) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const graphPosition = $graph.convertCoordinate(event.offsetX, event.offsetY); + const customEvent = new event_1.GraphMouseEvent(nodes, lines, $graph, this); + customEvent.initPagePosition(event.pageX, event.pageY); + customEvent.initGraphPosition(graphPosition.x, graphPosition.y); + info.graph.event.onGraphRightClick(customEvent); + } + }); + $graph.addEventListener('line-added', (event) => { + const customEment = event; + const $node = $graph.queryNodeElement(customEment.detail.line.output.node); + if ($node) { + // @ts-ignore + $node.onUpdate && $node.onUpdate(); + } + (0, utils_1.dispatch)(this, 'line-added', { + detail: customEment.detail, + }); + (0, utils_1.dispatch)(this, 'dirty'); + }); + $graph.addEventListener('line-removed', (event) => { + const customEment = event; + const $node = $graph.queryNodeElement(customEment.detail.line.output.node); + if ($node) { + // @ts-ignore + $node.onUpdate && $node.onUpdate(); + } + (0, utils_1.dispatch)(this, 'line-removed', { + detail: customEment.detail, + }); + (0, utils_1.dispatch)(this, 'dirty'); + }); + $graph.addEventListener('line-changed', (event) => { + const customElement = event; + (0, utils_1.dispatch)(this, 'line-changed', { + detail: customElement.detail, + }); + (0, utils_1.dispatch)(this, 'dirty'); + }); + $graph.addEventListener('node-connected', (event) => { + const customElement = event; + this.startRecording(); + this.addLine(customElement.detail.line); + setTimeout(() => { + this.stopRecording(); + }, 200); + }); + const $svg = $graph.shadowRoot.querySelector('#lines'); + function searchG(htmlArray) { + const length = Math.min(htmlArray.length, 4); + for (let i = 0; i < length; i++) { + const $elem = htmlArray[i]; + // 如果找到顶部的 document 元素的话,是没有 tagName 的 + if ($elem.tagName && $elem.tagName.toLocaleLowerCase() === 'g') { + return $elem; + } + } + } + $svg.addEventListener('dblclick', (event) => { + // @ts-ignore + const $g = searchG(event.path); + if (!$g || !$g.hasAttribute('line-uuid')) { + return; + } + const type = this.paths[this.paths.length - 1].type; + const info = graph_1.graphMap.get(type); + if (!info) { + return; + } + if (info.graph.event && info.graph.event.onLineDblClick) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const uuid = $g.getAttribute('line-uuid') || ''; + const line = lines[uuid]; + const event = new event_1.LineMouseEvent(nodes, lines, $g, line); + info.graph.event.onLineDblClick(event); + } + }); + $svg.addEventListener('click', (event) => { + // @ts-ignore + const $g = searchG(event.path); + if (!$g || !$g.hasAttribute('line-uuid')) { + return; + } + const type = this.paths[this.paths.length - 1].type; + const info = graph_1.graphMap.get(type); + if (!info) { + return; + } + if (info.graph.event && info.graph.event.onLineClick) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const uuid = $g.getAttribute('line-uuid') || ''; + const line = lines[uuid]; + const event = new event_1.LineMouseEvent(nodes, lines, $g, line); + info.graph.event.onLineClick(event); + } + }); + $svg.addEventListener('mouseup', (event) => { + // @ts-ignore + const $g = searchG(event.path); + if (!$g || !$g.hasAttribute('line-uuid')) { + return; + } + if (event.button !== 2) { + return; + } + const type = this.paths[this.paths.length - 1].type; + const info = graph_1.graphMap.get(type); + if (!info) { + return; + } + if (info.graph.event && info.graph.event.onLineRightClick) { + const nodes = $graph.getProperty('nodes'); + const lines = $graph.getProperty('lines'); + const uuid = $g.getAttribute('line-uuid') || ''; + const line = lines[uuid]; + const event = new event_1.LineMouseEvent(nodes, lines, $g, line); + info.graph.event.onLineRightClick(event); + } + }); + } + _updateGraph() { + (0, enum_1.clearDynamicEnum)(); + const graph = this.paths[this.paths.length - 1]; + const $graph = this.shadowRoot.querySelector('v-graph'); + $graph.clear(); + requestAnimationFrame(() => { + $graph.setAttribute('type', graph.type); + $graph.setProperty('lines', graph.lines); + $graph.setProperty('nodes', graph.nodes); + this._updateHeader(); + }); + } + undo() { + this.actionQueue.undo(); + (0, utils_1.dispatch)(this, 'undo'); + } + redo() { + this.actionQueue.redo(); + (0, utils_1.dispatch)(this, 'redo'); + } + startRecording() { + this.actionQueue.startRecording(); + } + stopRecording() { + this.actionQueue.stopRecording(); + } + getPinElement(blockName, type, index) { + const $block = this.$graph.shadowRoot.querySelector(`v-graph-node[node-uuid=${blockName}]`); + if (!$block) { + return; + } + const $pinList = $block.shadowRoot.querySelectorAll(`.pin.in`); + const $pin = $pinList[index]; + return $pin; + } + getBlockElement(blockName) { + return this.$graph.shadowRoot.querySelector(`v-graph-node[node-uuid=${blockName}]`); + } + /// ---- 操作整个图 + /** + * 将屏幕坐标转换成 Graph 内的坐标 + * @param point + * @returns + */ + convertCoordinate(point) { + point = this.$graph.convertCoordinate(point.x, point.y); + return point; + } + /** + * 设置编辑的根图 + * @param graph + */ + setRootGraph(graph) { + this.rootGraph = graph; + this.paths = [graph]; + this._updateGraph(); + } + /** + * 获取正在编辑的根图 + * @returns + */ + getRootGraph() { + return this.paths[0]; + } + /** + * 传入一个字符串,反序列化成图数据 + * @param content + * @returns + */ + deserialize(content) { + const graphData = js_yaml_1.default.load(content); + return graphData; + } + /** + * 传入一个图数据,序列化成 yaml 字符串 + * @param data + * @returns + */ + serialize(data) { + const str = js_yaml_1.default.dump(data || this.paths[0]); + // return JSON.stringify(this.paths[0]); + // outputFileSync('/Users/wangsijie/Project/Creator/cocos-editor/extension-repos/shader-graph/test.yaml', str); + return str; + } + /** + * 获取整个图现在的一些基础数据 + * @returns + */ + getGraphInfo() { + const offset = this.$graph.getProperty('offset'); + const scale = this.$graph.getProperty('scale'); + return { + offset, scale, + }; + } + /** + * 设置整个图的一些基础数据 + * @param info + */ + setGraphInfo(info) { + this.$graph.setProperty('offset', info.offset); + this.$graph.setProperty('scale', info.scale); + } + /** + * 恢复缩放比例 + */ + zoomToFit() { + this.$graph.data.setProperty('scale', 1); + } + /// ---- 操作当前图 + /** + * 获取选中的 Block 列表 + * @returns + */ + getSelectedBlockList() { + return this.$graph.getSelectedNodeList(); + } + /** + * 获取选中的 Line 列表 + * @returns + */ + getSelectedLineList() { + return this.$graph.getSelectedLineList(); + } + /** + * 设置当前正在编辑的图数据 + * @param graph + * @returns + */ + setCurrentGraph(graph) { + if (this.paths.length <= 1) { + this.setRootGraph(graph); + return; + } + this.paths[this.paths.length - 1] = graph; + this._updateGraph(); + } + /** + * 获取正在编辑的图数据 + * @returns + */ + getCurrentGraph() { + return this.paths[this.paths.length - 1]; + } + /** + * 在当前正在操作的图数据里增加一个 Block + * @param block + * @param id + */ + addBlock(block, id) { + this.actionQueue.exec(new undo_1.AddBlockAction({ block, id })); + } + /** + * 在当前正在操作的图数据里删除一个节点 + * @param id + */ + removeBlock(id) { + const queue = []; + // remove line + const lines = this.$graph.getProperty('lines'); + for (const key in lines) { + const line = lines[key]; + if (line.input.node === id || line.output.node === id) { + queue.push(new undo_1.RemoveLineAction({ id: key })); + } + } + queue.push(new undo_1.RemoveBlockAction({ id })); + this.actionQueue.exec(new structures_1.ActionList({ + queue, + })); + } + /** + * 在当前正在操作的图数据里增加一个连线 + * @param line + * @param id + */ + addLine(line, id) { + this.actionQueue.exec(new undo_1.AddLineAction({ line, id })); + } + /** + * 在当前正在操作的图数据里删除一个连线 + * @param id + */ + removeLine(id) { + this.actionQueue.exec(new undo_1.RemoveLineAction({ id })); + } + /** + * 进入当前图的子图 + * @param id + */ + enterSubGraph(id) { + const graph = this.paths[this.paths.length - 1]; + const subGraph = graph.graphs[id]; + if (subGraph) { + this.paths.push(subGraph); + this._updateGraph(); + } + (0, utils_1.dispatch)(this, 'enter-graph', { + detail: { + id: id, + }, + }); + } + /** + * 在当前编辑的图里增加一个子图 + * @param type + * @param id + * @returns + */ + addSubGraph(type, id) { + const info = this.paths[this.paths.length - 1]; + // const uuid = generateUUID(); + info.graphs[id] = { + type, + name: type, + nodes: {}, + lines: {}, + graphs: {}, + }; + return info.graphs[id]; + } + /** + * 在当前编辑的图里,删除一个子图 + * @param id + */ + removeSubGraph(id) { + const info = this.paths[this.paths.length - 1]; + delete info.graphs[id]; + } +} +exports.HTMLGraphForgeElement = HTMLGraphForgeElement; +if (!window.customElements.get('ui-graph-forge')) { + window.customElements.define('ui-graph-forge', HTMLGraphForgeElement); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2stZm9yZ2UvZm9yZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7O0FBVWIsbUNBQW1DO0FBQ25DLG1DQUFpRDtBQUNqRCxtQ0FBa0c7QUFFbEcsc0RBSStCO0FBRS9CLGlDQU1nQjtBQUloQiw4REFBMkI7QUFDM0IsaUNBQTBDO0FBRTFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQTs7Ozs7Ozs7O0NBU3BCLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxRQUFRLENBQUE7U0FDWixLQUFLOzs7Ozs7OztDQVFiLENBQUM7QUFFRixNQUFhLHFCQUFzQixTQUFRLFdBQVc7SUFRbEQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQVBKLGdCQUFXLEdBQUcsSUFBSSx3QkFBVyxDQUFDO1lBQ2xDLEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO1FBbUJILFVBQUssR0FBZ0IsRUFBRSxDQUFDO1FBYnBCLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDZCxJQUFJLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUVsQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBa0IsQ0FBQztRQUV6RSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFLTyxXQUFXO1FBQ2YsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFXLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2hGLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFxQixD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SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxFQUFVO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FDSjtBQXhuQkQsc0RBd25CQztBQUVELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO0lBQzlDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLENBQUM7Q0FDekUiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBHcmFwaEVsZW1lbnQsXG4gICAgTm9kZUNoYW5nZWREZXRhaWwsXG4gICAgTm9kZVBvc2l0aW9uQ2hhbmdlZERldGFpbCxcbiAgICBHcmFwaE5vZGVFbGVtZW50LFxufSBmcm9tICdAaXRoYXJib3JzL3VpLWdyYXBoJztcblxuaW1wb3J0IHR5cGUgeyBEaXJ0eURldGFpbCB9IGZyb20gJy4vcGluJztcbmltcG9ydCB7IGdyYXBoTWFwIH0gZnJvbSAnLi9ncmFwaCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVVVSUQsIGRpc3BhdGNoIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBHcmFwaE1vdXNlRXZlbnQsIEJsb2NrTW91c2VFdmVudCwgQmxvY2tFdmVudCwgTGluZUV2ZW50LCBMaW5lTW91c2VFdmVudCB9IGZyb20gJy4vZXZlbnQnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvbixcbiAgICBBY3Rpb25MaXN0LFxuICAgIEFjdGlvblF1ZXVlLFxufSBmcm9tICdAaXRoYXJib3JzL3N0cnVjdHVyZXMnO1xuXG5pbXBvcnQge1xuICAgIEFkZEJsb2NrQWN0aW9uLFxuICAgIFJlbW92ZUJsb2NrQWN0aW9uLFxuICAgIEFkZExpbmVBY3Rpb24sXG4gICAgUmVtb3ZlTGluZUFjdGlvbixcbiAgICBCbG9ja1Bvc2l0aW9uQWN0aW9uLFxufSBmcm9tICcuL3VuZG8nO1xuXG5pbXBvcnQgdHlwZSB7IEdyYXBoRGF0YSwgQmxvY2tEYXRhLCBMaW5lRGF0YSwgSUdyYXBoRGVmaW5lRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5cbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgY2xlYXJEeW5hbWljRW51bSB9IGZyb20gJy4vZW51bSc7XG5cbmNvbnN0IFNUWUxFID0gLypjc3MqL2Bcbjpob3N0IHsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxuOmhvc3QgPiBoZWFkZXIgeyBwYWRkaW5nOiA0cHggMTBweDsgZGlzcGxheTogZmxleDsgfVxuOmhvc3QgPiBoZWFkZXIgPiBkaXYgeyBmbGV4OiAxOyB9XG46aG9zdCA+IGhlYWRlciA+IGRpdiA+IHNwYW4geyBjdXJzb3I6IHBvaW50ZXI7IH1cbjpob3N0ID4gaGVhZGVyID4gc2xvdCB7IGRpc3BsYXk6IGJsb2NrOyB9XG46aG9zdCA+IGhlYWRlciA+IGkgeyBtYXJnaW46IDAgNHB4OyB9XG46aG9zdCA+IHNlY3Rpb24geyBmbGV4OiAxOyBkaXNwbGF5OiBmbGV4OyB9XG46aG9zdCA+IHNlY3Rpb24gPiB2LWdyYXBoIHsgZmxleDogMTsgfVxuYDtcblxuY29uc3QgSFRNTCA9IC8qaHRtbCovYFxuPHN0eWxlPiR7U1RZTEV9PC9zdHlsZT5cbjxoZWFkZXI+XG4gICAgPGRpdj48L2Rpdj5cbiAgICA8c2xvdD48L3Nsb3Q+XG48L2hlYWRlcj5cbjxzZWN0aW9uPlxuICAgIDx2LWdyYXBoIHR5cGU9XCJcIj48di1ncmFwaD5cbjwvc2VjdGlvbj5cbmA7XG5cbmV4cG9ydCBjbGFzcyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG5cbiAgICBwcml2YXRlIGFjdGlvblF1ZXVlID0gbmV3IEFjdGlvblF1ZXVlKHtcbiAgICAgICAgZm9yZ2U6IHRoaXMsXG4gICAgfSk7XG5cbiAgICAkZ3JhcGg6IEdyYXBoRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7XG4gICAgICAgICAgICBtb2RlOiAnb3BlbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2hhZG93Um9vdCEuaW5uZXJIVE1MID0gSFRNTDtcblxuICAgICAgICB0aGlzLiRncmFwaCA9IHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3Rvcigndi1ncmFwaCcpISBhcyBHcmFwaEVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5faW5pdEhlYWRlcigpO1xuICAgICAgICB0aGlzLl9pbml0U2VjdGlvbigpO1xuICAgIH1cblxuICAgIHJvb3RHcmFwaD86IEdyYXBoRGF0YTtcbiAgICBwYXRoczogR3JhcGhEYXRhW10gPSBbXTtcblxuICAgIHByaXZhdGUgX2luaXRIZWFkZXIoKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUhlYWRlcigpO1xuICAgICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJ2hlYWRlciA+IGRpdicpIS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJHNwYW4gPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoISRzcGFuLmhhc0F0dHJpYnV0ZSgncGF0aC1pbmRleCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGluZGV4ID0gcGFyc2VJbnQoJHNwYW4uZ2V0QXR0cmlidXRlKCdwYXRoLWluZGV4JykgfHwgJzAnKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhdGhzLnNwbGljZShpbmRleCArIDEpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGgoKTtcbiAgICAgICAgICAgIGNvbnN0IGdyYXBoID0gdGhpcy5wYXRoc1t0aGlzLnBhdGhzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgZGlzcGF0Y2godGhpcywgJ2VudGVyLWdyYXBoJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICBpZDogZ3JhcGgubmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUhlYWRlcigpIHtcbiAgICAgICAgY29uc3QgcGF0aHMgPSB0aGlzLnBhdGhzLm1hcCgoaW5mbywgaW5kZXgpID0+IGA8c3BhbiBwYXRoLWluZGV4PVwiJHtpbmRleH1cIj4ke2luZm8ubmFtZSB8fCBpbmZvLnR5cGV9PC9zcGFuPmApLmpvaW4oJzxpPi88L2k+Jyk7XG4gICAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignaGVhZGVyID4gZGl2JykhLmlubmVySFRNTCA9IHBhdGhzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRTZWN0aW9uKCkge1xuICAgICAgICBjb25zdCAkZ3JhcGggPSB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJ3YtZ3JhcGgnKSBhcyBHcmFwaEVsZW1lbnQ7XG4gICAgICAgICRncmFwaC5zaGFkb3dSb290IS5hZGRFdmVudExpc3RlbmVyKCdibG9jay1jbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBldmVudCBhcyBDdXN0b21FdmVudDx7XG4gICAgICAgICAgICB9PjtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnBhdGhzW3RoaXMucGF0aHMubGVuZ3RoIC0gMV0udHlwZTtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBncmFwaE1hcC5nZXQodHlwZSk7XG4gICAgICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCAkbm9kZSA9IGN1c3RvbUV2ZW50LnRhcmdldCBhcyBHcmFwaE5vZGVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGluZm8uZ3JhcGguZXZlbnQgJiYgaW5mby5ncmFwaC5ldmVudC5vbkJsb2NrQ2xpY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbm9kZXMnKSBhcyB7IFt1dWlkOiBzdHJpbmddOiBCbG9ja0RhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZXMgPSAkZ3JhcGguZ2V0UHJvcGVydHkoJ2xpbmVzJykgYXMgeyBbdXVpZDogc3RyaW5nXTogTGluZURhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9ICRub2RlLmdldEF0dHJpYnV0ZSgnbm9kZS11dWlkJykgfHwgJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSAkZ3JhcGguZ2V0UHJvcGVydHkoJ25vZGVzJylbdXVpZF0gYXMgQmxvY2tEYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrRXZlbnQgPSBuZXcgQmxvY2tNb3VzZUV2ZW50KG5vZGVzLCBsaW5lcywgJG5vZGUsIGJsb2NrKTtcbiAgICAgICAgICAgICAgICBpbmZvLmdyYXBoLmV2ZW50Lm9uQmxvY2tDbGljayhibG9ja0V2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICRncmFwaC5zaGFkb3dSb290IS5hZGRFdmVudExpc3RlbmVyKCdibG9jay1kYmxjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBldmVudCBhcyBDdXN0b21FdmVudDx7XG4gICAgICAgICAgICAgICAgcGFnZVg6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBwYWdlWTogbnVtYmVyO1xuICAgICAgICAgICAgICAgIG9mZnNldFg6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBvZmZzZXRZOiBudW1iZXI7XG4gICAgICAgICAgICB9PjtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnBhdGhzW3RoaXMucGF0aHMubGVuZ3RoIC0gMV0udHlwZTtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBncmFwaE1hcC5nZXQodHlwZSk7XG4gICAgICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCAkbm9kZSA9IGN1c3RvbUV2ZW50LnRhcmdldCBhcyBHcmFwaE5vZGVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCRub2RlLnRhZ05hbWUgPT09ICdWLUdSQVBILU5PREUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGV0YWlscyA9ICRub2RlLmdldFByb3BlcnR5KCdkZXRhaWxzJyk7XG4gICAgICAgICAgICAgICAgaWYgKGRldGFpbHMuc3ViR3JhcGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRlclN1YkdyYXBoKGRldGFpbHMuc3ViR3JhcGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluZm8uZ3JhcGguZXZlbnQgJiYgaW5mby5ncmFwaC5ldmVudC5vbkJsb2NrRGJsQ2xpY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbm9kZXMnKSBhcyB7IFt1dWlkOiBzdHJpbmddOiBCbG9ja0RhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZXMgPSAkZ3JhcGguZ2V0UHJvcGVydHkoJ2xpbmVzJykgYXMgeyBbdXVpZDogc3RyaW5nXTogTGluZURhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9ICRub2RlLmdldEF0dHJpYnV0ZSgnbm9kZS11dWlkJykgfHwgJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSAkZ3JhcGguZ2V0UHJvcGVydHkoJ25vZGVzJylbdXVpZF0gYXMgQmxvY2tEYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrRXZlbnQgPSBuZXcgQmxvY2tNb3VzZUV2ZW50KG5vZGVzLCBsaW5lcywgJG5vZGUsIGJsb2NrKTtcbiAgICAgICAgICAgICAgICBibG9ja0V2ZW50LmluaXRQYWdlUG9zaXRpb24oY3VzdG9tRXZlbnQuZGV0YWlsLnBhZ2VYLCBjdXN0b21FdmVudC5kZXRhaWwucGFnZVkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyYXBoUG9zaXRpb24gPSAkZ3JhcGguY29udmVydENvb3JkaW5hdGUoY3VzdG9tRXZlbnQuZGV0YWlsLm9mZnNldFgsIGN1c3RvbUV2ZW50LmRldGFpbC5vZmZzZXRZKTtcbiAgICAgICAgICAgICAgICBibG9ja0V2ZW50LmluaXRHcmFwaFBvc2l0aW9uKGdyYXBoUG9zaXRpb24ueCwgZ3JhcGhQb3NpdGlvbi55KTtcbiAgICAgICAgICAgICAgICBpbmZvLmdyYXBoLmV2ZW50Lm9uQmxvY2tEYmxDbGljayhibG9ja0V2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICRncmFwaC5zaGFkb3dSb290IS5hZGRFdmVudExpc3RlbmVyKCdibG9jay1yaWdodC1jbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBldmVudCBhcyBDdXN0b21FdmVudDx7XG4gICAgICAgICAgICB9PjtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnBhdGhzW3RoaXMucGF0aHMubGVuZ3RoIC0gMV0udHlwZTtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBncmFwaE1hcC5nZXQodHlwZSk7XG4gICAgICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCAkbm9kZSA9IGN1c3RvbUV2ZW50LnRhcmdldCBhcyBHcmFwaE5vZGVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGluZm8uZ3JhcGguZXZlbnQgJiYgaW5mby5ncmFwaC5ldmVudC5vbkJsb2NrUmlnaHRDbGljaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gJGdyYXBoLmdldFByb3BlcnR5KCdub2RlcycpIGFzIHsgW3V1aWQ6IHN0cmluZ106IEJsb2NrRGF0YTsgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbGluZXMnKSBhcyB7IFt1dWlkOiBzdHJpbmddOiBMaW5lRGF0YTsgfTtcbiAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gJG5vZGUuZ2V0QXR0cmlidXRlKCdub2RlLXV1aWQnKSB8fCAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbm9kZXMnKVt1dWlkXSBhcyBCbG9ja0RhdGE7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2tFdmVudCA9IG5ldyBCbG9ja01vdXNlRXZlbnQobm9kZXMsIGxpbmVzLCAkbm9kZSwgYmxvY2spO1xuICAgICAgICAgICAgICAgIGluZm8uZ3JhcGguZXZlbnQub25CbG9ja1JpZ2h0Q2xpY2soYmxvY2tFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRncmFwaC5hZGRFdmVudExpc3RlbmVyKCdub2RlLXNlbGVjdGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5wYXRoc1t0aGlzLnBhdGhzLmxlbmd0aCAtIDFdLnR5cGU7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gZ3JhcGhNYXAuZ2V0KHR5cGUpO1xuICAgICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgJG5vZGUgPSBldmVudC50YXJnZXQgYXMgR3JhcGhOb2RlRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChpbmZvLmdyYXBoLmV2ZW50ICYmIGluZm8uZ3JhcGguZXZlbnQub25CbG9ja1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSAkZ3JhcGguZ2V0UHJvcGVydHkoJ25vZGVzJykgYXMgeyBbdXVpZDogc3RyaW5nXTogQmxvY2tEYXRhOyB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gJGdyYXBoLmdldFByb3BlcnR5KCdsaW5lcycpIGFzIHsgW3V1aWQ6IHN0cmluZ106IExpbmVEYXRhOyB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSAkbm9kZS5nZXRBdHRyaWJ1dGUoJ25vZGUtdXVpZCcpIHx8ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gJGdyYXBoLmdldFByb3BlcnR5KCdub2RlcycpW3V1aWRdIGFzIEJsb2NrRGF0YTtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBCbG9ja0V2ZW50KG5vZGVzLCBsaW5lcywgJG5vZGUsIGJsb2NrKTtcbiAgICAgICAgICAgICAgICBpbmZvLmdyYXBoLmV2ZW50Lm9uQmxvY2tTZWxlY3RlZChldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAkZ3JhcGguYWRkRXZlbnRMaXN0ZW5lcignbm9kZS11bnNlbGVjdGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5wYXRoc1t0aGlzLnBhdGhzLmxlbmd0aCAtIDFdLnR5cGU7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gZ3JhcGhNYXAuZ2V0KHR5cGUpO1xuICAgICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgJG5vZGUgPSBldmVudC50YXJnZXQgYXMgR3JhcGhOb2RlRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChpbmZvLmdyYXBoLmV2ZW50ICYmIGluZm8uZ3JhcGguZXZlbnQub25CbG9ja1Vuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbm9kZXMnKSBhcyB7IFt1dWlkOiBzdHJpbmddOiBCbG9ja0RhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZXMgPSAkZ3JhcGguZ2V0UHJvcGVydHkoJ2xpbmVzJykgYXMgeyBbdXVpZDogc3RyaW5nXTogTGluZURhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9ICRub2RlLmdldEF0dHJpYnV0ZSgnbm9kZS11dWlkJykgfHwgJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSAkZ3JhcGguZ2V0UHJvcGVydHkoJ25vZGVzJylbdXVpZF0gYXMgQmxvY2tEYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEJsb2NrRXZlbnQobm9kZXMsIGxpbmVzLCAkbm9kZSwgYmxvY2spO1xuICAgICAgICAgICAgICAgIGluZm8uZ3JhcGguZXZlbnQub25CbG9ja1Vuc2VsZWN0ZWQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJGdyYXBoLmFkZEV2ZW50TGlzdGVuZXIoJ2xpbmUtc2VsZWN0ZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnBhdGhzW3RoaXMucGF0aHMubGVuZ3RoIC0gMV0udHlwZTtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBncmFwaE1hcC5nZXQodHlwZSk7XG4gICAgICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCAkZyA9IGV2ZW50LnRhcmdldCBhcyBTVkdHRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChpbmZvLmdyYXBoLmV2ZW50ICYmIGluZm8uZ3JhcGguZXZlbnQub25MaW5lU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbm9kZXMnKSBhcyB7IFt1dWlkOiBzdHJpbmddOiBCbG9ja0RhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZXMgPSAkZ3JhcGguZ2V0UHJvcGVydHkoJ2xpbmVzJykgYXMgeyBbdXVpZDogc3RyaW5nXTogTGluZURhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9ICRnLmdldEF0dHJpYnV0ZSgnbGluZS11dWlkJykgfHwgJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW3V1aWRdIGFzIExpbmVEYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IExpbmVFdmVudChub2RlcywgbGluZXMsICRnLCBsaW5lKTtcbiAgICAgICAgICAgICAgICBpbmZvLmdyYXBoLmV2ZW50Lm9uTGluZVNlbGVjdGVkKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICRncmFwaC5hZGRFdmVudExpc3RlbmVyKCdsaW5lLXVuc2VsZWN0ZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnBhdGhzW3RoaXMucGF0aHMubGVuZ3RoIC0gMV0udHlwZTtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBncmFwaE1hcC5nZXQodHlwZSk7XG4gICAgICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCAkZyA9IGV2ZW50LnRhcmdldCBhcyBTVkdHRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChpbmZvLmdyYXBoLmV2ZW50ICYmIGluZm8uZ3JhcGguZXZlbnQub25MaW5lVW5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gJGdyYXBoLmdldFByb3BlcnR5KCdub2RlcycpIGFzIHsgW3V1aWQ6IHN0cmluZ106IEJsb2NrRGF0YTsgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbGluZXMnKSBhcyB7IFt1dWlkOiBzdHJpbmddOiBMaW5lRGF0YTsgfTtcbiAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gJGcuZ2V0QXR0cmlidXRlKCdsaW5lLXV1aWQnKSB8fCAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbdXVpZF0gYXMgTGluZURhdGE7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTGluZUV2ZW50KG5vZGVzLCBsaW5lcywgJGcsIGxpbmUpO1xuICAgICAgICAgICAgICAgIGluZm8uZ3JhcGguZXZlbnQub25MaW5lVW5zZWxlY3RlZChldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAkZ3JhcGguYWRkRXZlbnRMaXN0ZW5lcignbm9kZS1hZGRlZCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY0V2ZW50ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8Tm9kZUNoYW5nZWREZXRhaWw+O1xuICAgICAgICAgICAgZGlzcGF0Y2godGhpcywgJ25vZGUtYWRkZWQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBjRXZlbnQuZGV0YWlsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwYXRjaCh0aGlzLCAnZGlydHknKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRncmFwaC5hZGRFdmVudExpc3RlbmVyKCdub2RlLXJlbW92ZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNFdmVudCA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PE5vZGVDaGFuZ2VkRGV0YWlsPjtcbiAgICAgICAgICAgIGRpc3BhdGNoKHRoaXMsICdub2RlLXJlbW92ZWQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBjRXZlbnQuZGV0YWlsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwYXRjaCh0aGlzLCAnZGlydHknKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRncmFwaC5hZGRFdmVudExpc3RlbmVyKCdub2RlLWNoYW5nZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNFdmVudCA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PE5vZGVDaGFuZ2VkRGV0YWlsPjtcbiAgICAgICAgICAgIGRpc3BhdGNoKHRoaXMsICdub2RlLWNoYW5nZWQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBjRXZlbnQuZGV0YWlsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwYXRjaCh0aGlzLCAnZGlydHknKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRncmFwaC5hZGRFdmVudExpc3RlbmVyKCdub2RlLXBvc2l0aW9uLWNoYW5nZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNFdmVudCA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PE5vZGVQb3NpdGlvbkNoYW5nZWREZXRhaWw+O1xuICAgICAgICAgICAgY29uc3QgcXVldWUgPSBjRXZlbnQuZGV0YWlsLm1vdmVMaXN0Lm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQmxvY2tQb3NpdGlvbkFjdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrTmFtZTogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBpdGVtLnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBpdGVtLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUXVldWUuZXhlYyhxdWV1ZVswXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvblF1ZXVlLmV4ZWMobmV3IEFjdGlvbkxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICBxdWV1ZSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXNwYXRjaCh0aGlzLCAnZGlydHknLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnR5VHlwZTogJ3Bvc2l0aW9uLWNoYW5nZWQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIC8vLy8gLy8vL1xuICAgICAgICAkZ3JhcGguc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKCdkaXJ0eScsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY0V2ZW50ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8RGlydHlEZXRhaWw+O1xuICAgICAgICAgICAgaWYgKGNFdmVudC5kZXRhaWwgJiYgY0V2ZW50LmRldGFpbC5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvblF1ZXVlLmV4ZWMoY0V2ZW50LmRldGFpbC5hY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGF0Y2godGhpcywgJ2RpcnR5Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogY0V2ZW50LmRldGFpbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAkZ3JhcGguYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5mbyA9IGdyYXBoTWFwLmdldCh0aGlzLnJvb3RHcmFwaCEudHlwZSk7XG4gICAgICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKGV2ZW50IGFzIE1vdXNlRXZlbnQpLmJ1dHRvbiA9PT0gMiAmJiBpbmZvLmdyYXBoLmV2ZW50Py5vbkdyYXBoUmlnaHRDbGljaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gJGdyYXBoLmdldFByb3BlcnR5KCdub2RlcycpIGFzIHsgW3V1aWQ6IHN0cmluZ106IEJsb2NrRGF0YTsgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbGluZXMnKSBhcyB7IFt1dWlkOiBzdHJpbmddOiBMaW5lRGF0YTsgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBncmFwaFBvc2l0aW9uID0gJGdyYXBoLmNvbnZlcnRDb29yZGluYXRlKGV2ZW50Lm9mZnNldFgsIGV2ZW50Lm9mZnNldFkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEdyYXBoTW91c2VFdmVudChub2RlcywgbGluZXMsICRncmFwaCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgY3VzdG9tRXZlbnQuaW5pdFBhZ2VQb3NpdGlvbihldmVudC5wYWdlWCwgZXZlbnQucGFnZVkpO1xuICAgICAgICAgICAgICAgIGN1c3RvbUV2ZW50LmluaXRHcmFwaFBvc2l0aW9uKGdyYXBoUG9zaXRpb24ueCwgZ3JhcGhQb3NpdGlvbi55KTtcbiAgICAgICAgICAgICAgICBpbmZvLmdyYXBoLmV2ZW50Lm9uR3JhcGhSaWdodENsaWNrKGN1c3RvbUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGdyYXBoLmFkZEV2ZW50TGlzdGVuZXIoJ2xpbmUtYWRkZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUVtZW50ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8e2xpbmU6IExpbmVEYXRhfT47XG4gICAgICAgICAgICBjb25zdCAkbm9kZSA9ICRncmFwaC5xdWVyeU5vZGVFbGVtZW50KGN1c3RvbUVtZW50LmRldGFpbC5saW5lLm91dHB1dC5ub2RlKTtcbiAgICAgICAgICAgIGlmICgkbm9kZSkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAkbm9kZS5vblVwZGF0ZSAmJiAkbm9kZS5vblVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGF0Y2godGhpcywgJ2xpbmUtYWRkZWQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBjdXN0b21FbWVudC5kZXRhaWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRpc3BhdGNoKHRoaXMsICdkaXJ0eScpO1xuICAgICAgICB9KTtcbiAgICAgICAgJGdyYXBoLmFkZEV2ZW50TGlzdGVuZXIoJ2xpbmUtcmVtb3ZlZCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tRW1lbnQgPSBldmVudCBhcyBDdXN0b21FdmVudDx7bGluZTogTGluZURhdGF9PjtcbiAgICAgICAgICAgIGNvbnN0ICRub2RlID0gJGdyYXBoLnF1ZXJ5Tm9kZUVsZW1lbnQoY3VzdG9tRW1lbnQuZGV0YWlsLmxpbmUub3V0cHV0Lm5vZGUpO1xuICAgICAgICAgICAgaWYgKCRub2RlKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICRub2RlLm9uVXBkYXRlICYmICRub2RlLm9uVXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXNwYXRjaCh0aGlzLCAnbGluZS1yZW1vdmVkJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogY3VzdG9tRW1lbnQuZGV0YWlsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwYXRjaCh0aGlzLCAnZGlydHknKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRncmFwaC5hZGRFdmVudExpc3RlbmVyKCdsaW5lLWNoYW5nZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSBldmVudCBhcyBDdXN0b21FdmVudDx7bGluZTogTGluZURhdGF9PjtcbiAgICAgICAgICAgIGRpc3BhdGNoKHRoaXMsICdsaW5lLWNoYW5nZWQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBjdXN0b21FbGVtZW50LmRldGFpbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2godGhpcywgJ2RpcnR5Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRncmFwaC5hZGRFdmVudExpc3RlbmVyKCdub2RlLWNvbm5lY3RlZCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PHtsaW5lOiBMaW5lRGF0YX0+O1xuICAgICAgICAgICAgdGhpcy5zdGFydFJlY29yZGluZygpO1xuICAgICAgICAgICAgdGhpcy5hZGRMaW5lKGN1c3RvbUVsZW1lbnQuZGV0YWlsLmxpbmUpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCAkc3ZnID0gJGdyYXBoLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI2xpbmVzJykhO1xuICAgICAgICBmdW5jdGlvbiBzZWFyY2hHKGh0bWxBcnJheTogKEhUTUxFbGVtZW50IHwgU1ZHR0VsZW1lbnQpW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGh0bWxBcnJheS5sZW5ndGgsIDQpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0ICRlbGVtID0gaHRtbEFycmF5W2ldO1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOaJvuWIsOmhtumDqOeahCBkb2N1bWVudCDlhYPntKDnmoTor53vvIzmmK/msqHmnIkgdGFnTmFtZSDnmoRcbiAgICAgICAgICAgICAgICBpZiAoJGVsZW0udGFnTmFtZSAmJiAkZWxlbS50YWdOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdnJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGVsZW0gYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICRzdmcuYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0ICRnID0gc2VhcmNoRyhldmVudC5wYXRoKTtcbiAgICAgICAgICAgIGlmICghJGcgfHwgISRnLmhhc0F0dHJpYnV0ZSgnbGluZS11dWlkJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5wYXRoc1t0aGlzLnBhdGhzLmxlbmd0aCAtIDFdLnR5cGU7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gZ3JhcGhNYXAuZ2V0KHR5cGUpO1xuICAgICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluZm8uZ3JhcGguZXZlbnQgJiYgaW5mby5ncmFwaC5ldmVudC5vbkxpbmVEYmxDbGljaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gJGdyYXBoLmdldFByb3BlcnR5KCdub2RlcycpIGFzIHsgW3V1aWQ6IHN0cmluZ106IEJsb2NrRGF0YTsgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbGluZXMnKSBhcyB7IFt1dWlkOiBzdHJpbmddOiBMaW5lRGF0YTsgfTtcbiAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gJGcuZ2V0QXR0cmlidXRlKCdsaW5lLXV1aWQnKSB8fCAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbdXVpZF0gYXMgTGluZURhdGE7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTGluZU1vdXNlRXZlbnQobm9kZXMsIGxpbmVzLCAkZywgbGluZSk7XG4gICAgICAgICAgICAgICAgaW5mby5ncmFwaC5ldmVudC5vbkxpbmVEYmxDbGljayhldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAkc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCAkZyA9IHNlYXJjaEcoZXZlbnQucGF0aCk7XG4gICAgICAgICAgICBpZiAoISRnIHx8ICEkZy5oYXNBdHRyaWJ1dGUoJ2xpbmUtdXVpZCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMucGF0aHNbdGhpcy5wYXRocy5sZW5ndGggLSAxXS50eXBlO1xuICAgICAgICAgICAgY29uc3QgaW5mbyA9IGdyYXBoTWFwLmdldCh0eXBlKTtcbiAgICAgICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmZvLmdyYXBoLmV2ZW50ICYmIGluZm8uZ3JhcGguZXZlbnQub25MaW5lQ2xpY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbm9kZXMnKSBhcyB7IFt1dWlkOiBzdHJpbmddOiBCbG9ja0RhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZXMgPSAkZ3JhcGguZ2V0UHJvcGVydHkoJ2xpbmVzJykgYXMgeyBbdXVpZDogc3RyaW5nXTogTGluZURhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9ICRnLmdldEF0dHJpYnV0ZSgnbGluZS11dWlkJykgfHwgJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW3V1aWRdIGFzIExpbmVEYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IExpbmVNb3VzZUV2ZW50KG5vZGVzLCBsaW5lcywgJGcsIGxpbmUpO1xuICAgICAgICAgICAgICAgIGluZm8uZ3JhcGguZXZlbnQub25MaW5lQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJHN2Zy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCAkZyA9IHNlYXJjaEcoZXZlbnQucGF0aCk7XG4gICAgICAgICAgICBpZiAoISRnIHx8ICEkZy5oYXNBdHRyaWJ1dGUoJ2xpbmUtdXVpZCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChldmVudCBhcyBNb3VzZUV2ZW50KS5idXR0b24gIT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnBhdGhzW3RoaXMucGF0aHMubGVuZ3RoIC0gMV0udHlwZTtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBncmFwaE1hcC5nZXQodHlwZSk7XG4gICAgICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5mby5ncmFwaC5ldmVudCAmJiBpbmZvLmdyYXBoLmV2ZW50Lm9uTGluZVJpZ2h0Q2xpY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9ICRncmFwaC5nZXRQcm9wZXJ0eSgnbm9kZXMnKSBhcyB7IFt1dWlkOiBzdHJpbmddOiBCbG9ja0RhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZXMgPSAkZ3JhcGguZ2V0UHJvcGVydHkoJ2xpbmVzJykgYXMgeyBbdXVpZDogc3RyaW5nXTogTGluZURhdGE7IH07XG4gICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9ICRnLmdldEF0dHJpYnV0ZSgnbGluZS11dWlkJykgfHwgJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW3V1aWRdIGFzIExpbmVEYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IExpbmVNb3VzZUV2ZW50KG5vZGVzLCBsaW5lcywgJGcsIGxpbmUpO1xuICAgICAgICAgICAgICAgIGluZm8uZ3JhcGguZXZlbnQub25MaW5lUmlnaHRDbGljayhldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUdyYXBoKCkge1xuICAgICAgICBjbGVhckR5bmFtaWNFbnVtKCk7XG4gICAgICAgIGNvbnN0IGdyYXBoID0gdGhpcy5wYXRoc1t0aGlzLnBhdGhzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCAkZ3JhcGggPSB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJ3YtZ3JhcGgnKSEgYXMgR3JhcGhFbGVtZW50O1xuICAgICAgICAkZ3JhcGguY2xlYXIoKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICRncmFwaC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCBncmFwaC50eXBlKTtcbiAgICAgICAgICAgICRncmFwaC5zZXRQcm9wZXJ0eSgnbGluZXMnLCBncmFwaC5saW5lcyk7XG4gICAgICAgICAgICAkZ3JhcGguc2V0UHJvcGVydHkoJ25vZGVzJywgZ3JhcGgubm9kZXMpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSGVhZGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB1bmRvKCkge1xuICAgICAgICB0aGlzLmFjdGlvblF1ZXVlLnVuZG8oKTtcbiAgICAgICAgZGlzcGF0Y2godGhpcywgJ3VuZG8nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVkbygpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25RdWV1ZS5yZWRvKCk7XG4gICAgICAgIGRpc3BhdGNoKHRoaXMsICdyZWRvJyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0UmVjb3JkaW5nKCkge1xuICAgICAgICB0aGlzLmFjdGlvblF1ZXVlLnN0YXJ0UmVjb3JkaW5nKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0b3BSZWNvcmRpbmcoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uUXVldWUuc3RvcFJlY29yZGluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQaW5FbGVtZW50KGJsb2NrTmFtZTogc3RyaW5nLCB0eXBlOiAnaW5wdXQnIHwgJ291dHB1dCcsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgJGJsb2NrID0gdGhpcy4kZ3JhcGguc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGB2LWdyYXBoLW5vZGVbbm9kZS11dWlkPSR7YmxvY2tOYW1lfV1gKTtcbiAgICAgICAgaWYgKCEkYmxvY2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCAkcGluTGlzdCA9ICRibG9jay5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yQWxsKGAucGluLmluYCk7XG4gICAgICAgIGNvbnN0ICRwaW4gPSAkcGluTGlzdFtpbmRleF07XG4gICAgICAgIHJldHVybiAkcGluO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCbG9ja0VsZW1lbnQoYmxvY2tOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGdyYXBoLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihgdi1ncmFwaC1ub2RlW25vZGUtdXVpZD0ke2Jsb2NrTmFtZX1dYCkgYXMgR3JhcGhOb2RlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvLy8gLS0tLSDmk43kvZzmlbTkuKrlm75cblxuICAgIC8qKlxuICAgICAqIOWwhuWxj+W5leWdkOagh+i9rOaNouaIkCBHcmFwaCDlhoXnmoTlnZDmoIdcbiAgICAgKiBAcGFyYW0gcG9pbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGNvbnZlcnRDb29yZGluYXRlKHBvaW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0pIHtcbiAgICAgICAgcG9pbnQgPSB0aGlzLiRncmFwaC5jb252ZXJ0Q29vcmRpbmF0ZShwb2ludC54LCBwb2ludC55KTtcbiAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rue8lui+keeahOagueWbvlxuICAgICAqIEBwYXJhbSBncmFwaFxuICAgICAqL1xuICAgIHNldFJvb3RHcmFwaChncmFwaDogR3JhcGhEYXRhKSB7XG4gICAgICAgIHRoaXMucm9vdEdyYXBoID0gZ3JhcGg7XG4gICAgICAgIHRoaXMucGF0aHMgPSBbZ3JhcGhdO1xuICAgICAgICB0aGlzLl91cGRhdGVHcmFwaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluato+WcqOe8lui+keeahOagueWbvlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0Um9vdEdyYXBoKCk6IEdyYXBoRGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGhzWzBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS8oOWFpeS4gOS4quWtl+espuS4su+8jOWPjeW6j+WIl+WMluaIkOWbvuaVsOaNrlxuICAgICAqIEBwYXJhbSBjb250ZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBkZXNlcmlhbGl6ZShjb250ZW50OiBzdHJpbmcpOiBHcmFwaERhdGEge1xuICAgICAgICBjb25zdCBncmFwaERhdGEgPSB5YW1sLmxvYWQoY29udGVudCkgYXMgR3JhcGhEYXRhO1xuICAgICAgICByZXR1cm4gZ3JhcGhEYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS8oOWFpeS4gOS4quWbvuaVsOaNru+8jOW6j+WIl+WMluaIkCB5YW1sIOWtl+espuS4slxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzZXJpYWxpemUoZGF0YT86IEdyYXBoRGF0YSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0ciA9IHlhbWwuZHVtcChkYXRhIHx8IHRoaXMucGF0aHNbMF0pO1xuICAgICAgICAvLyByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5wYXRoc1swXSk7XG4gICAgICAgIC8vIG91dHB1dEZpbGVTeW5jKCcvVXNlcnMvd2FuZ3NpamllL1Byb2plY3QvQ3JlYXRvci9jb2Nvcy1lZGl0b3IvZXh0ZW5zaW9uLXJlcG9zL3NoYWRlci1ncmFwaC90ZXN0LnlhbWwnLCBzdHIpO1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaVtOS4quWbvueOsOWcqOeahOS4gOS6m+WfuuehgOaVsOaNrlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0R3JhcGhJbmZvKCkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLiRncmFwaC5nZXRQcm9wZXJ0eSgnb2Zmc2V0Jyk7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy4kZ3JhcGguZ2V0UHJvcGVydHkoJ3NjYWxlJyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvZmZzZXQsIHNjYWxlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaVtOS4quWbvueahOS4gOS6m+WfuuehgOaVsOaNrlxuICAgICAqIEBwYXJhbSBpbmZvXG4gICAgICovXG4gICAgc2V0R3JhcGhJbmZvKGluZm86IHsgb2Zmc2V0OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB9LCBzY2FsZTogbnVtYmVyfSkge1xuICAgICAgICB0aGlzLiRncmFwaC5zZXRQcm9wZXJ0eSgnb2Zmc2V0JywgaW5mby5vZmZzZXQpO1xuICAgICAgICB0aGlzLiRncmFwaC5zZXRQcm9wZXJ0eSgnc2NhbGUnLCBpbmZvLnNjYWxlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmgaLlpI3nvKnmlL7mr5TkvotcbiAgICAgKi9cbiAgICB6b29tVG9GaXQoKSB7XG4gICAgICAgIHRoaXMuJGdyYXBoLmRhdGEuc2V0UHJvcGVydHkoJ3NjYWxlJywgMSk7XG4gICAgfVxuXG4gICAgLy8vIC0tLS0g5pON5L2c5b2T5YmN5Zu+XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bpgInkuK3nmoQgQmxvY2sg5YiX6KGoXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRTZWxlY3RlZEJsb2NrTGlzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGdyYXBoLmdldFNlbGVjdGVkTm9kZUxpc3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bpgInkuK3nmoQgTGluZSDliJfooahcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldFNlbGVjdGVkTGluZUxpc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRncmFwaC5nZXRTZWxlY3RlZExpbmVMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5b2T5YmN5q2j5Zyo57yW6L6R55qE5Zu+5pWw5o2uXG4gICAgICogQHBhcmFtIGdyYXBoXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzZXRDdXJyZW50R3JhcGgoZ3JhcGg6IEdyYXBoRGF0YSkge1xuICAgICAgICBpZiAodGhpcy5wYXRocy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSb290R3JhcGgoZ3JhcGgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGF0aHNbdGhpcy5wYXRocy5sZW5ndGggLSAxXSA9IGdyYXBoO1xuICAgICAgICB0aGlzLl91cGRhdGVHcmFwaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluato+WcqOe8lui+keeahOWbvuaVsOaNrlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0Q3VycmVudEdyYXBoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoc1t0aGlzLnBhdGhzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOW9k+WJjeato+WcqOaTjeS9nOeahOWbvuaVsOaNrumHjOWinuWKoOS4gOS4qiBCbG9ja1xuICAgICAqIEBwYXJhbSBibG9ja1xuICAgICAqIEBwYXJhbSBpZFxuICAgICAqL1xuICAgIGFkZEJsb2NrKGJsb2NrOiBCbG9ja0RhdGEsIGlkPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uUXVldWUuZXhlYyhuZXcgQWRkQmxvY2tBY3Rpb24oeyBibG9jaywgaWQgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOW9k+WJjeato+WcqOaTjeS9nOeahOWbvuaVsOaNrumHjOWIoOmZpOS4gOS4quiKgueCuVxuICAgICAqIEBwYXJhbSBpZFxuICAgICAqL1xuICAgIHJlbW92ZUJsb2NrKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcXVldWU6IEFjdGlvbltdID0gW107XG4gICAgICAgIC8vIHJlbW92ZSBsaW5lXG4gICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy4kZ3JhcGguZ2V0UHJvcGVydHkoJ2xpbmVzJykgYXMgeyBbdXVpZDogc3RyaW5nXTogTGluZURhdGE7IH07XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGxpbmVzKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gbGluZXNba2V5XSBhcyBMaW5lRGF0YTtcbiAgICAgICAgICAgIGlmIChsaW5lLmlucHV0Lm5vZGUgPT09IGlkIHx8IGxpbmUub3V0cHV0Lm5vZGUgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgcXVldWUucHVzaChuZXcgUmVtb3ZlTGluZUFjdGlvbih7IGlkOiBrZXkgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlLnB1c2gobmV3IFJlbW92ZUJsb2NrQWN0aW9uKHsgaWQgfSkpO1xuICAgICAgICB0aGlzLmFjdGlvblF1ZXVlLmV4ZWMobmV3IEFjdGlvbkxpc3Qoe1xuICAgICAgICAgICAgcXVldWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlnKjlvZPliY3mraPlnKjmk43kvZznmoTlm77mlbDmja7ph4zlop7liqDkuIDkuKrov57nur9cbiAgICAgKiBAcGFyYW0gbGluZVxuICAgICAqIEBwYXJhbSBpZFxuICAgICAqL1xuICAgIGFkZExpbmUobGluZTogTGluZURhdGEsIGlkPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uUXVldWUuZXhlYyhuZXcgQWRkTGluZUFjdGlvbih7IGxpbmUsIGlkIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlnKjlvZPliY3mraPlnKjmk43kvZznmoTlm77mlbDmja7ph4zliKDpmaTkuIDkuKrov57nur9cbiAgICAgKiBAcGFyYW0gaWRcbiAgICAgKi9cbiAgICByZW1vdmVMaW5lKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25RdWV1ZS5leGVjKG5ldyBSZW1vdmVMaW5lQWN0aW9uKHsgaWQgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi/m+WFpeW9k+WJjeWbvueahOWtkOWbvlxuICAgICAqIEBwYXJhbSBpZFxuICAgICAqL1xuICAgIGVudGVyU3ViR3JhcGgoaWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBncmFwaCA9IHRoaXMucGF0aHNbdGhpcy5wYXRocy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgc3ViR3JhcGggPSBncmFwaC5ncmFwaHNbaWRdO1xuICAgICAgICBpZiAoc3ViR3JhcGgpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aHMucHVzaChzdWJHcmFwaCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFwaCgpO1xuICAgICAgICB9XG4gICAgICAgIGRpc3BhdGNoKHRoaXMsICdlbnRlci1ncmFwaCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOW9k+WJjee8lui+keeahOWbvumHjOWinuWKoOS4gOS4quWtkOWbvlxuICAgICAqIEBwYXJhbSB0eXBlXG4gICAgICogQHBhcmFtIGlkXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBhZGRTdWJHcmFwaCh0eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMucGF0aHNbdGhpcy5wYXRocy5sZW5ndGggLSAxXTtcbiAgICAgICAgLy8gY29uc3QgdXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuICAgICAgICBpbmZvLmdyYXBoc1tpZF0gPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZTogdHlwZSxcbiAgICAgICAgICAgIG5vZGVzOiB7fSxcbiAgICAgICAgICAgIGxpbmVzOiB7fSxcbiAgICAgICAgICAgIGdyYXBoczoge30sXG4gICAgICAgIH0gYXMgR3JhcGhEYXRhO1xuXG4gICAgICAgIHJldHVybiBpbmZvLmdyYXBoc1tpZF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Zyo5b2T5YmN57yW6L6R55qE5Zu+6YeM77yM5Yig6Zmk5LiA5Liq5a2Q5Zu+XG4gICAgICogQHBhcmFtIGlkXG4gICAgICovXG4gICAgcmVtb3ZlU3ViR3JhcGgoaWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5wYXRoc1t0aGlzLnBhdGhzLmxlbmd0aCAtIDFdO1xuICAgICAgICBkZWxldGUgaW5mby5ncmFwaHNbaWRdO1xuICAgIH1cbn1cblxuaWYgKCF3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KCd1aS1ncmFwaC1mb3JnZScpKSB7XG4gICAgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgndWktZ3JhcGgtZm9yZ2UnLCBIVE1MR3JhcGhGb3JnZUVsZW1lbnQpO1xufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/graph.js b/extensions/shader-graph/dist/block-forge/graph.js new file mode 100644 index 0000000..47dc257 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/graph.js @@ -0,0 +1,37 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.declareGraph = exports.getDeclareGraph = exports.hasDeclareGraph = exports.graphMap = void 0; +const ui_graph_1 = require("@itharbors/ui-graph"); +const manager_1 = require("@itharbors/ui-graph/dist/manager"); +exports.graphMap = new Map(); +class GraphObject { +} +const hasDeclareGraph = function (type) { + return exports.graphMap.has(type); +}; +exports.hasDeclareGraph = hasDeclareGraph; +const getDeclareGraph = function (type) { + return exports.graphMap.get(type); +}; +exports.getDeclareGraph = getDeclareGraph; +/** + * 注册一个 graph 类型 + * @param graph + */ +function declareGraph(graph) { + if ((0, exports.hasDeclareGraph)(graph.type)) { + console.warn(`Cannot declare duplicate graph types: ${graph.type}`); + return; + } + // 在底层注册一个渲染图类型 + const config = Object.assign({}, graph.style, graph.feature); + (0, ui_graph_1.registerGraphOption)(graph.type, config); + (0, manager_1.registerGraphFilter)(graph.type, { + lineFilter: graph.validator?.dataLink, + }); + exports.graphMap.set(graph.type, { + graph: graph, + }); +} +exports.declareGraph = declareGraph; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2stZm9yZ2UvZ3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7QUFHYixrREFBMEQ7QUFDMUQsOERBQXVFO0FBSzFELFFBQUEsUUFBUSxHQUEyQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBRTFELE1BQU0sV0FBVztDQUVoQjtBQUVNLE1BQU0sZUFBZSxHQUFHLFVBQVMsSUFBWTtJQUNoRCxPQUFPLGdCQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQztBQUZXLFFBQUEsZUFBZSxtQkFFMUI7QUFFSyxNQUFNLGVBQWUsR0FBRyxVQUFTLElBQVk7SUFDaEQsT0FBTyxnQkFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixDQUFDLENBQUM7QUFGVyxRQUFBLGVBQWUsbUJBRTFCO0FBRUY7OztHQUdHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEtBQXdCO0lBQ2pELElBQUksSUFBQSx1QkFBZSxFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRSxPQUFPO0tBQ1Y7SUFFRCxlQUFlO0lBQ2YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0QsSUFBQSw4QkFBbUIsRUFBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLElBQUEsNkJBQW1CLEVBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtRQUM1QixVQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxRQUFRO0tBQ3hDLENBQUMsQ0FBQztJQUVILGdCQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7UUFDckIsS0FBSyxFQUFFLEtBQUs7S0FDZixDQUFDLENBQUM7QUFDUCxDQUFDO0FBaEJELG9DQWdCQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUgeyBJR3JhcGhEZXNjcmlwdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB7IHJlZ2lzdGVyR3JhcGhPcHRpb24gfSBmcm9tICdAaXRoYXJib3JzL3VpLWdyYXBoJztcbmltcG9ydCB7IHJlZ2lzdGVyR3JhcGhGaWx0ZXIgfSBmcm9tICdAaXRoYXJib3JzL3VpLWdyYXBoL2Rpc3QvbWFuYWdlcic7XG5cbmludGVyZmFjZSBHcmFwaEluZm8ge1xuICAgIGdyYXBoOiBJR3JhcGhEZXNjcmlwdGlvbjtcbn1cbmV4cG9ydCBjb25zdCBncmFwaE1hcDogTWFwPHN0cmluZywgR3JhcGhJbmZvPiA9IG5ldyBNYXAoKTtcblxuY2xhc3MgR3JhcGhPYmplY3Qge1xuXG59XG5cbmV4cG9ydCBjb25zdCBoYXNEZWNsYXJlR3JhcGggPSBmdW5jdGlvbih0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ3JhcGhNYXAuaGFzKHR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlY2xhcmVHcmFwaCA9IGZ1bmN0aW9uKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiBncmFwaE1hcC5nZXQodHlwZSk7XG59O1xuXG4vKipcbiAqIOazqOWGjOS4gOS4qiBncmFwaCDnsbvlnotcbiAqIEBwYXJhbSBncmFwaFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyZUdyYXBoKGdyYXBoOiBJR3JhcGhEZXNjcmlwdGlvbikge1xuICAgIGlmIChoYXNEZWNsYXJlR3JhcGgoZ3JhcGgudHlwZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBDYW5ub3QgZGVjbGFyZSBkdXBsaWNhdGUgZ3JhcGggdHlwZXM6ICR7Z3JhcGgudHlwZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWcqOW6leWxguazqOWGjOS4gOS4qua4suafk+Wbvuexu+Wei1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIGdyYXBoLnN0eWxlLCBncmFwaC5mZWF0dXJlKTtcbiAgICByZWdpc3RlckdyYXBoT3B0aW9uKGdyYXBoLnR5cGUsIGNvbmZpZyk7XG4gICAgcmVnaXN0ZXJHcmFwaEZpbHRlcihncmFwaC50eXBlLCB7XG4gICAgICAgIGxpbmVGaWx0ZXI6IGdyYXBoLnZhbGlkYXRvcj8uZGF0YUxpbmssXG4gICAgfSk7XG5cbiAgICBncmFwaE1hcC5zZXQoZ3JhcGgudHlwZSwge1xuICAgICAgICBncmFwaDogZ3JhcGgsXG4gICAgfSk7XG59XG5cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/index.js b/extensions/shader-graph/dist/block-forge/index.js new file mode 100644 index 0000000..50873b5 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/index.js @@ -0,0 +1,37 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getDynamicEnumByType = exports.getEnumByType = exports.removeEnumObserver = exports.addEnumObserver = exports.removeDynamicEnumToType = exports.declareDynamicEnumToType = exports.clearDynamicEnum = exports.declareEnum = exports.Pin = exports.Block = exports.Forge = exports.createPin = exports.createBlock = exports.createGraph = exports.generateUUID = exports.declarePin = exports.removeDeclareBlock = exports.getDeclareBlock = exports.hasDeclareBlock = exports.declareBlock = exports.getDeclareGraph = exports.hasDeclareGraph = exports.declareGraph = exports.HTMLGraphForgeElement = void 0; +require("./internal"); +require("./forge"); +var forge_1 = require("./forge"); +Object.defineProperty(exports, "HTMLGraphForgeElement", { enumerable: true, get: function () { return forge_1.HTMLGraphForgeElement; } }); +var graph_1 = require("./graph"); +Object.defineProperty(exports, "declareGraph", { enumerable: true, get: function () { return graph_1.declareGraph; } }); +Object.defineProperty(exports, "hasDeclareGraph", { enumerable: true, get: function () { return graph_1.hasDeclareGraph; } }); +Object.defineProperty(exports, "getDeclareGraph", { enumerable: true, get: function () { return graph_1.getDeclareGraph; } }); +var block_1 = require("./block"); +Object.defineProperty(exports, "declareBlock", { enumerable: true, get: function () { return block_1.declareBlock; } }); +Object.defineProperty(exports, "hasDeclareBlock", { enumerable: true, get: function () { return block_1.hasDeclareBlock; } }); +Object.defineProperty(exports, "getDeclareBlock", { enumerable: true, get: function () { return block_1.getDeclareBlock; } }); +Object.defineProperty(exports, "removeDeclareBlock", { enumerable: true, get: function () { return block_1.removeDeclareBlock; } }); +var pin_1 = require("./pin"); +Object.defineProperty(exports, "declarePin", { enumerable: true, get: function () { return pin_1.declarePin; } }); +var utils_1 = require("./utils"); +Object.defineProperty(exports, "generateUUID", { enumerable: true, get: function () { return utils_1.generateUUID; } }); +Object.defineProperty(exports, "createGraph", { enumerable: true, get: function () { return utils_1.createGraph; } }); +Object.defineProperty(exports, "createBlock", { enumerable: true, get: function () { return utils_1.createBlock; } }); +Object.defineProperty(exports, "createPin", { enumerable: true, get: function () { return utils_1.createPin; } }); +var forge_2 = require("./module/forge"); +Object.defineProperty(exports, "Forge", { enumerable: true, get: function () { return forge_2.Forge; } }); +Object.defineProperty(exports, "Block", { enumerable: true, get: function () { return forge_2.Block; } }); +Object.defineProperty(exports, "Pin", { enumerable: true, get: function () { return forge_2.Pin; } }); +var enum_1 = require("./enum"); +Object.defineProperty(exports, "declareEnum", { enumerable: true, get: function () { return enum_1.declareEnum; } }); +Object.defineProperty(exports, "clearDynamicEnum", { enumerable: true, get: function () { return enum_1.clearDynamicEnum; } }); +Object.defineProperty(exports, "declareDynamicEnumToType", { enumerable: true, get: function () { return enum_1.declareDynamicEnumToType; } }); +Object.defineProperty(exports, "removeDynamicEnumToType", { enumerable: true, get: function () { return enum_1.removeDynamicEnumToType; } }); +Object.defineProperty(exports, "addEnumObserver", { enumerable: true, get: function () { return enum_1.addEnumObserver; } }); +Object.defineProperty(exports, "removeEnumObserver", { enumerable: true, get: function () { return enum_1.removeEnumObserver; } }); +Object.defineProperty(exports, "getEnumByType", { enumerable: true, get: function () { return enum_1.getEnumByType; } }); +Object.defineProperty(exports, "getDynamicEnumByType", { enumerable: true, get: function () { return enum_1.getDynamicEnumByType; } }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7QUFFYixzQkFBb0I7QUFDcEIsbUJBQWlCO0FBRWpCLGlDQUVpQjtBQURiLDhHQUFBLHFCQUFxQixPQUFBO0FBR3pCLGlDQUlpQjtBQUhiLHFHQUFBLFlBQVksT0FBQTtBQUNaLHdHQUFBLGVBQWUsT0FBQTtBQUNmLHdHQUFBLGVBQWUsT0FBQTtBQUduQixpQ0FLaUI7QUFKYixxR0FBQSxZQUFZLE9BQUE7QUFDWix3R0FBQSxlQUFlLE9BQUE7QUFDZix3R0FBQSxlQUFlLE9BQUE7QUFDZiwyR0FBQSxrQkFBa0IsT0FBQTtBQUd0Qiw2QkFFZTtBQURYLGlHQUFBLFVBQVUsT0FBQTtBQUdkLGlDQUtpQjtBQUpiLHFHQUFBLFlBQVksT0FBQTtBQUNaLG9HQUFBLFdBQVcsT0FBQTtBQUNYLG9HQUFBLFdBQVcsT0FBQTtBQUNYLGtHQUFBLFNBQVMsT0FBQTtBQUdiLHdDQUl3QjtBQUhwQiw4RkFBQSxLQUFLLE9BQUE7QUFDTCw4RkFBQSxLQUFLLE9BQUE7QUFDTCw0RkFBQSxHQUFHLE9BQUE7QUFHUCwrQkFTZ0I7QUFSWixtR0FBQSxXQUFXLE9BQUE7QUFDWCx3R0FBQSxnQkFBZ0IsT0FBQTtBQUNoQixnSEFBQSx3QkFBd0IsT0FBQTtBQUN4QiwrR0FBQSx1QkFBdUIsT0FBQTtBQUN2Qix1R0FBQSxlQUFlLE9BQUE7QUFDZiwwR0FBQSxrQkFBa0IsT0FBQTtBQUNsQixxR0FBQSxhQUFhLE9BQUE7QUFDYiw0R0FBQSxvQkFBb0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICcuL2ludGVybmFsJztcbmltcG9ydCAnLi9mb3JnZSc7XG5cbmV4cG9ydCB7XG4gICAgSFRNTEdyYXBoRm9yZ2VFbGVtZW50LFxufSBmcm9tICcuL2ZvcmdlJztcblxuZXhwb3J0IHtcbiAgICBkZWNsYXJlR3JhcGgsXG4gICAgaGFzRGVjbGFyZUdyYXBoLFxuICAgIGdldERlY2xhcmVHcmFwaCxcbn0gZnJvbSAnLi9ncmFwaCc7XG5cbmV4cG9ydCB7XG4gICAgZGVjbGFyZUJsb2NrLFxuICAgIGhhc0RlY2xhcmVCbG9jayxcbiAgICBnZXREZWNsYXJlQmxvY2ssXG4gICAgcmVtb3ZlRGVjbGFyZUJsb2NrLFxufSBmcm9tICcuL2Jsb2NrJztcblxuZXhwb3J0IHtcbiAgICBkZWNsYXJlUGluLFxufSBmcm9tICcuL3Bpbic7XG5cbmV4cG9ydCB7XG4gICAgZ2VuZXJhdGVVVUlELFxuICAgIGNyZWF0ZUdyYXBoLFxuICAgIGNyZWF0ZUJsb2NrLFxuICAgIGNyZWF0ZVBpbixcbn0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB7XG4gICAgRm9yZ2UsXG4gICAgQmxvY2ssXG4gICAgUGluLFxufSBmcm9tICcuL21vZHVsZS9mb3JnZSc7XG5cbmV4cG9ydCB7XG4gICAgZGVjbGFyZUVudW0sXG4gICAgY2xlYXJEeW5hbWljRW51bSxcbiAgICBkZWNsYXJlRHluYW1pY0VudW1Ub1R5cGUsXG4gICAgcmVtb3ZlRHluYW1pY0VudW1Ub1R5cGUsXG4gICAgYWRkRW51bU9ic2VydmVyLFxuICAgIHJlbW92ZUVudW1PYnNlcnZlcixcbiAgICBnZXRFbnVtQnlUeXBlLFxuICAgIGdldER5bmFtaWNFbnVtQnlUeXBlLFxufSBmcm9tICcuL2VudW0nO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/interface/block.js b/extensions/shader-graph/dist/block-forge/interface/block.js new file mode 100644 index 0000000..254429d --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/interface/block.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJmYWNlL2Jsb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBpbkRhdGEsIElQaW5EZXNjcmlwdGlvbiB9IGZyb20gJy4vcGluJztcblxuLypcbiAqIOW6j+WIl+WMlumcgOimgeeahOaVsOaNrlxuICovXG5cbi8vIEJsb2NrIOeahOW6j+WIl+WMluaVsOaNrlxuZXhwb3J0IGludGVyZmFjZSBCbG9ja0RhdGE8XG4gICAgRCBleHRlbmRzIE9iamVjdCA9IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICBpbnB1dERlc2NyaXB0aW9uPzogSVBpbkRlc2NyaXB0aW9uW107XG4gICAgICAgIGlucHV0UGlucz86IFBpbkRhdGFbXTtcbiAgICAgICAgb3V0cHV0RGVzY3JpcHRpb24/OiBJUGluRGVzY3JpcHRpb25bXTtcbiAgICAgICAgb3V0cHV0UGlucz86IFBpbkRhdGFbXTtcbiAgICB9XG4+IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgcG9zaXRpb246IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfTtcbiAgICBkZXRhaWxzOiBEO1xufVxuXG4vKipcbiAqIOazqOWGjOaXtueahOWumuS5iVxuICovXG5cbi8vIEJsb2NrIOaVsOaNruagvOW8j1xuZXhwb3J0IGludGVyZmFjZSBJQmxvY2tEZXNjcmlwdGlvbiB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIC8vIOWQjeensFxuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZXh0ZW5kPzogc3RyaW5nO1xuICAgIGZlYXR1cmU/OiBJQmxvY2tGZWF0dXJlO1xuICAgIHN0eWxlPzogSUJsb2NrU3R5bGU7XG5cbiAgICBpbnB1dFBpbnM6IChJUGluRGVzY3JpcHRpb24pW107XG4gICAgY3JlYXRlRHluYW1pY0lucHV0UGlucz8oYmxvY2tEZXNjOiBJQmxvY2tEZXNjcmlwdGlvbiwgZGV0YWlsczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IChJUGluRGVzY3JpcHRpb24pW107XG4gICAgb3V0cHV0UGluczogKElQaW5EZXNjcmlwdGlvbilbXTtcbiAgICBjcmVhdGVEeW5hbWljT3V0cHV0UGlucz8oYmxvY2tEZXNjOiBJQmxvY2tEZXNjcmlwdGlvbiwgZGV0YWlsczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IChJUGluRGVzY3JpcHRpb24pW107XG59XG5cbi8vIEJsb2NrIOS4iuWPr+mFjee9rueahOaVsOaNrlxuZXhwb3J0IGludGVyZmFjZSBJQmxvY2tGZWF0dXJlIHtcblxuICAgIC8vLy8gLS0g6IqC54K55Yqf6IO95byA5YWzIC0tXG4gICAgLy8g5piv5ZCm5oqY5Y+gXG4gICAgaXNDb2xsYXBzZWRCbG9jaz86IGJvb2xlYW47XG4gICAgLy8g5pi+56S65b+r6YCf6L+e5o6l54K5XG4gICAgc2hvd1F1aWNrQ29ubmVjdFBvaW50PzogYm9vbGVhbjtcbiAgICAvLyDmmL7npLrlm77moIdcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIC8vIOagh+mimOaMiemSriAtLVxuICAgIHRpdGxlQnRuPzogc3RyaW5nO1xuICAgIC8vIOW3sue7j+azqOWGjOS6i+S7tiAtLVxuICAgIGV2ZW50SGFuZGxlckNvdW50PzogbnVtYmVyO1xuICAgIC8vIOW8leiEmuaYr+WQpuWPr+ingSAtLVxuICAgIHBpblZpc2liaWxpdHk/OiBib29sZWFuO1xuXG4gICAgLy8g5YWz6IGU5Y+Y6YeP77yf77yfIC0tXG4gICAgdmFyaWFibGU/OiBib29sZWFuO1xuICAgIC8vIOaUr+aMgemHjeWRveWQjSAtLVxuICAgIHN1cHBvcnRzUmVuYW1lPzogYm9vbGVhbjtcbiAgICAvLyDmmK/lkKblj6/liKDpmaQgLS1cbiAgICBkZWxldGFibGU/OiBib29sZWFuO1xuICAgIC8vIOaYr+WQpuWPr+S7peacgOWwj+WMliAtLVxuICAgIHN1cHBvcnRzTWluaW1pemF0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmxvY2tTdHlsZSB7XG4gICAgLy8vLyAtLSDoioLngrnmoLflvI/mjqfliLYgLS1cblxuICAgIC8vIOiDjOaZr+minOiJslxuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kSG92ZXJDb2xvcj86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQWN0aXZlQ29sb3I/OiBzdHJpbmc7XG4gICAgLy8gaGVhZGVyIOminOiJslxuICAgIGhlYWRlckNvbG9yPzogc3RyaW5nO1xuICAgIGhlYWRlckhvdmVyQ29sb3I/OiBzdHJpbmc7XG4gICAgaGVhZGVyQWN0aXZlQ29sb3I/OiBzdHJpbmc7XG4gICAgLy8g6L655qGG6aKc6ImyXG4gICAgYm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gICAgYm9yZGVySG92ZXJDb2xvcj86IHN0cmluZztcbiAgICBib3JkZXJBY3RpdmVDb2xvcj86IHN0cmluZztcbiAgICAvLyDmloflrZfpopzoibJcbiAgICBmb250Q29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEhvdmVyQ29sb3I/OiBzdHJpbmc7XG4gICAgLy8g6Zi05b2x6aKc6ImyXG4gICAgc2hhZG93Q29sb3I/OiBzdHJpbmc7XG4gICAgc2hhZG93SG92ZXJDb2xvcj86IHN0cmluZztcbiAgICBzaGFkb3dBY3RpdmVDb2xvcj86IHN0cmluZztcbiAgICAvLyDovoXliqnoibJcbiAgICBzZWNvbmRhcnlDb2xvcj86IHN0cmluZztcbiAgICBzZWNvbmRhcnlIb3ZlckNvbG9yPzogc3RyaW5nO1xuICAgIHNlY29uZGFyeUFjdGl2ZUNvbG9yPzogc3RyaW5nO1xuICAgIC8vIOWbvuagh+minOiJslxuICAgIGljb25Db2xvcj86IHN0cmluZztcbiAgICBpY29uSG92ZXJDb2xvcj86IHN0cmluZztcbiAgICBpY29uQWN0aXZlQ29sb3I/OiBzdHJpbmc7XG59XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/interface/forge.js b/extensions/shader-graph/dist/block-forge/interface/forge.js new file mode 100644 index 0000000..c3b3e33 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/interface/forge.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * 注册时的定义 + */ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJmYWNlL2ZvcmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBY0E7O0dBRUciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEdyYXBoRGF0YSB9IGZyb20gJy4vZ3JhcGgnO1xuXG4vKlxuICog5bqP5YiX5YyW6ZyA6KaB55qE5pWw5o2uXG4gKi9cblxuLy8gRm9yZ2Ug55qE5bqP5YiX5YyW5pWw5o2uXG5leHBvcnQgaW50ZXJmYWNlIEZvcmdlRGF0YTxEIGV4dGVuZHMgT2JqZWN0ID0ge1trZXk6IHN0cmluZ106IGFueTt9PiB7XG4gICAgZ3JhcGg6IHtcbiAgICAgICAgW3V1aWQ6IHN0cmluZ106IEdyYXBoRGF0YTtcbiAgICB9O1xuICAgIGRldGFpbHM6IEQ7XG59XG5cbi8qKlxuICog5rOo5YaM5pe255qE5a6a5LmJXG4gKi9cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/interface/graph.js b/extensions/shader-graph/dist/block-forge/interface/graph.js new file mode 100644 index 0000000..6409b43 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/interface/graph.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJmYWNlL2dyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbmVJbmZvIH0gZnJvbSAnQGl0aGFyYm9ycy91aS1ncmFwaCc7XG5pbXBvcnQgdHlwZSB7IEJsb2NrRGF0YSB9IGZyb20gJy4vYmxvY2snO1xuXG5pbXBvcnQgdHlwZSB7IEdyYXBoTW91c2VFdmVudCwgQmxvY2tNb3VzZUV2ZW50LCBMaW5lTW91c2VFdmVudCwgQmxvY2tFdmVudCwgTGluZUV2ZW50IH0gZnJvbSAnLi4vZXZlbnQnO1xuXG4vKlxuICog5bqP5YiX5YyW6ZyA6KaB55qE5pWw5o2uXG4gKi9cblxuLy8gR3JhcGgg55qE5bqP5YiX5YyW5pWw5o2uXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoRGF0YTxEIGV4dGVuZHMgT2JqZWN0ID0ge1trZXk6IHN0cmluZ106IGFueTt9PiB7XG4gICAgdHlwZTogc3RyaW5nLFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgbm9kZXM6IHtcbiAgICAgICAgW3V1aWQ6IHN0cmluZ106IEJsb2NrRGF0YTtcbiAgICB9O1xuICAgIGxpbmVzOiB7XG4gICAgICAgIFt1dWlkOiBzdHJpbmddOiBMaW5lRGF0YTtcbiAgICB9O1xuICAgIGdyYXBoczoge1xuICAgICAgICBbdXVpZDogc3RyaW5nXTogR3JhcGhEYXRhO1xuICAgIH07XG4gICAgZGV0YWlsczogRDtcbn1cblxuLy8gTGluZSDnmoTluo/liJfljJbmlbDmja5cbi8vIOWboOS4uiBsaW5lIOayoeacieWNleeLrOeahOexu+Wei+WSjOaWh+S7tu+8jOaaguaUvui/memHjFxuZXhwb3J0IGludGVyZmFjZSBMaW5lRGF0YTxEIGV4dGVuZHMgT2JqZWN0ID0ge1trZXk6IHN0cmluZ106IGFueTt9PiB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIGRldGFpbHM6IEQ7XG4gICAgb3V0cHV0OiB7XG4gICAgICAgIG5vZGU6IHN0cmluZztcbiAgICAgICAgcGFyYW06IHN0cmluZztcbiAgICB9O1xuICAgIGlucHV0OiB7XG4gICAgICAgIG5vZGU6IHN0cmluZztcbiAgICAgICAgcGFyYW06IHN0cmluZztcbiAgICB9O1xufVxuXG4vKipcbiAqIOazqOWGjOaXtueahOWumuS5iVxuICovXG5cbi8vIEdyYXBoIOaVsOaNruagvOW8j1xuZXhwb3J0IGludGVyZmFjZSBJR3JhcGhEZXNjcmlwdGlvbiB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIGZlYXR1cmU/OiBJR3JhcGhGZWF0dXJlO1xuICAgIHN0eWxlPzogSUdyYXBoU3R5bGU7XG4gICAgdmFsaWRhdG9yPzogSUdyYXBoRGVmaW5lVmFsaWRhdG9yO1xuICAgIGV2ZW50PzogSUdyYXBoRGVmaW5lRXZlbnQ7XG59XG5cbi8vIEdyYXBoIOS4iuWPr+S7peWumuS5ieeahOagoemqjOWHveaVsFxuaW50ZXJmYWNlIElHcmFwaERlZmluZVZhbGlkYXRvciB7XG4gICAgLy8g6L+e57q/XG4gICAgZGF0YUxpbms/KG5vZGVzOiBhbnksIGxpbmVzOiBhbnksIGxpbmU6IGFueSwgaW5wdXQ6IGFueSwgb3V0cHV0OiBhbnkpOiBib29sZWFuO1xuICAgIGV4ZWNMaW5rPyhub2RlczogYW55LCBsaW5lczogYW55LCBsaW5lOiBhbnksIGlucHV0OiBhbnksIG91dHB1dDogYW55KTogYm9vbGVhbjtcbiAgICBkZWxldGVMaW5lPyguLi5hcmdzOiBhbnlbXSk6IGJvb2xlYW47XG5cbiAgICAvLyDoioLngrlcbiAgICBjcmVhdGVOb2RlPyguLi5hcmdzOiBhbnlbXSk6IGJvb2xlYW47XG4gICAgZGVsZXRlTm9kZT8oLi4uYXJnczogYW55W10pOiBib29sZWFuO1xufVxuXG4vLyBHcmFwaCDkuIrlj6/ku6XlrprkuYnnmoTkuovku7bpkqnlrZBcbmV4cG9ydCBpbnRlcmZhY2UgSUdyYXBoRGVmaW5lRXZlbnQge1xuICAgIC8vIEJsb2NrIOmAieS4reS6i+S7tlxuICAgIG9uQmxvY2tTZWxlY3RlZD8oZXZlbnQ6IEJsb2NrRXZlbnQpOiBib29sZWFuO1xuICAgIG9uQmxvY2tVbnNlbGVjdGVkPyhldmVudDogQmxvY2tFdmVudCk6IGJvb2xlYW47XG5cbiAgICAvLyBMaW5lIOmAieS4reS6i+S7tlxuICAgIG9uTGluZVNlbGVjdGVkPyhldmVudDogTGluZUV2ZW50KTogYm9vbGVhbjtcbiAgICBvbkxpbmVVbnNlbGVjdGVkPyhldmVudDogTGluZUV2ZW50KTogYm9vbGVhbjtcblxuICAgIC8vIEJsb2NrIOeCueWHu+S6i+S7tlxuICAgIG9uQmxvY2tDbGljaz8oZXZlbnQ6IEJsb2NrTW91c2VFdmVudCk6IGJvb2xlYW47XG4gICAgb25CbG9ja1JpZ2h0Q2xpY2s/KGV2ZW50OiBCbG9ja01vdXNlRXZlbnQpOiBib29sZWFuO1xuICAgIG9uQmxvY2tEYmxDbGljaz8oZXZlbnQ6IEJsb2NrTW91c2VFdmVudCk6IGJvb2xlYW47XG5cbiAgICAvLyBMaW5lIOeCueWHu+S6i+S7tlxuICAgIG9uTGluZUNsaWNrPyhldmVudDogTGluZU1vdXNlRXZlbnQpOiBib29sZWFuO1xuICAgIG9uTGluZVJpZ2h0Q2xpY2s/KGV2ZW50OiBMaW5lTW91c2VFdmVudCk6IGJvb2xlYW47XG4gICAgb25MaW5lRGJsQ2xpY2s/KGV2ZW50OiBMaW5lTW91c2VFdmVudCk6IGJvb2xlYW47XG5cbiAgICAvLyBHcmFwaCDngrnlh7vkuovku7ZcbiAgICBvbkdyYXBoUmlnaHRDbGljaz8oZXZlbnQ6IEdyYXBoTW91c2VFdmVudCk6IHVua25vd247XG5cbiAgICAvLyDov57nur9cbiAgICBvbkxpbmVDcmVhdGVkPyhldmVudDogTGluZUV2ZW50KTogYm9vbGVhbjtcbiAgICBvbkxpbmVEZWxldGVkPyhldmVudDogTGluZUV2ZW50KTogYm9vbGVhbjtcblxuICAgIC8vIOiKgueCuVxuICAgIG9uQmxvY2tDcmVhdGVkPyhldmVudDogQmxvY2tFdmVudCk6IGJvb2xlYW47XG4gICAgb25CbG9ja0RlbGV0ZWQ/KGV2ZW50OiBCbG9ja0V2ZW50KTogYm9vbGVhbjtcbn1cblxuLy8gR3JhcGgg5LiK5Y+v6YWN572u55qE5pWw5o2uXG5pbnRlcmZhY2UgSUdyYXBoRmVhdHVyZSB7XG59XG5cbmludGVyZmFjZSBJR3JhcGhTdHlsZSB7XG4gICAgLy8g6IOM5pmv6aKc6ImyXG4gICAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIC8vIOe9keagvOWwuuWvuFxuICAgIGdyaWRTaXplPzogbnVtYmVyO1xuICAgIC8vIG1lc2gg6aKc6ImyXG4gICAgZ3JpZENvbG9yPzogc3RyaW5nO1xuICAgIC8vIOWOn+eCueWdkOagh+aYr+WQpuaYvuekulxuICAgIHNob3dPcmlnaW5Qb2ludD86IGJvb2xlYW47XG4gICAgLy8gb3JpZ2luIOminOiJslxuICAgIG9yaWdpblBvaW50Q29sb3I/OiBzdHJpbmc7XG59XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/interface/index.js b/extensions/shader-graph/dist/block-forge/interface/index.js new file mode 100644 index 0000000..9898e87 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/interface/index.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +tslib_1.__exportStar(require("./forge"), exports); +tslib_1.__exportStar(require("./graph"), exports); +tslib_1.__exportStar(require("./block"), exports); +tslib_1.__exportStar(require("./pin"), exports); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJmYWNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGtEQUF3QjtBQUN4QixrREFBd0I7QUFDeEIsa0RBQXdCO0FBQ3hCLGdEQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZm9yZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ncmFwaCc7XG5leHBvcnQgKiBmcm9tICcuL2Jsb2NrJztcbmV4cG9ydCAqIGZyb20gJy4vcGluJztcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/interface/pin.js b/extensions/shader-graph/dist/block-forge/interface/pin.js new file mode 100644 index 0000000..2c102a7 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/interface/pin.js @@ -0,0 +1,6 @@ +"use strict"; +/* + * 序列化需要的数据 + */ +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Jsb2NrLWZvcmdlL2ludGVyZmFjZS9waW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKlxuICog5bqP5YiX5YyW6ZyA6KaB55qE5pWw5o2uXG4gKi9cblxuLy8gUGluIOeahOW6j+WIl+WMluaVsOaNrlxuZXhwb3J0IGludGVyZmFjZSBQaW5EYXRhPFYgPSBhbnksIEQgZXh0ZW5kcyBPYmplY3QgPSB7W2tleTogc3RyaW5nXTogYW55O30+IHtcbiAgICBkYXRhVHlwZTogc3RyaW5nO1xuICAgIHZhbHVlOiBWO1xuICAgIGRldGFpbHM6IEQ7XG59XG5cbi8qKlxuICog6L+Q6KGM5pe25pWw5o2uXG4gKi9cblxuLyoqXG4gKiDms6jlhozml7bnmoTlrprkuYlcbiAqL1xuXG4vLyDlnKjms6jlhowgQmxvY2sg5a6a5LmJ55qE5pe25YCZ5o+P6L+w55qEIFBpbiDmlbDmja5cbmV4cG9ydCBpbnRlcmZhY2UgSVBpbkRlc2NyaXB0aW9uPFYgPSBhbnksIEQgZXh0ZW5kcyBPYmplY3QgPSB7W2tleTogc3RyaW5nXTogYW55O30+IHtcbiAgICAvLyDlj4LmlbDlkI3vvIzlv4XpobvllK/kuIBcbiAgICB0YWc6IHN0cmluZztcbiAgICAvLyDmlbDmja7nsbvlnotcbiAgICBkYXRhVHlwZTogc3RyaW5nO1xuICAgIC8vIOaYvuekuuWcqOeVjOmdouS4iueahCB0aXRsZVxuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgLy8g6byg5qCH56e75Yqo5Yiw55WM6Z2i5LiK5by55Ye655qE5o+Q56S6XG4gICAgdG9vbHRpcD86IHN0cmluZztcbiAgICAvLyDmlbDmja7nmoTlgLxcbiAgICB2YWx1ZT86IFY7XG4gICAgLy8g5pi+56S655qE5Zu+5qCHXG4gICAgaWNvbj86IHN0cmluZztcbiAgICAvLyDpmpDol4/ovpPlhaXovpPlh7rnmoTpkojohJpcbiAgICBoaWRlUGluPzogYm9vbGVhbjtcbiAgICBkZXRhaWxzOiBEO1xufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/index.js b/extensions/shader-graph/dist/block-forge/internal/index.js new file mode 100644 index 0000000..ec18cd2 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/index.js @@ -0,0 +1,18 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +require("./pin-unknown"); +require("./pin-float"); +require("./pin-int"); +require("./pin-string"); +require("./pin-boolean"); +require("./pin-vec2"); +require("./pin-vec3"); +require("./pin-vec4"); +require("./pin-mat3"); +require("./pin-mat4"); +require("./pin-color"); +require("./pin-texture2D"); +require("./pin-textureCube"); +require("./pin-enum"); +require("./pin-dynamic-enum"); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJuYWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLHlCQUF1QjtBQUN2Qix1QkFBcUI7QUFDckIscUJBQW1CO0FBQ25CLHdCQUFzQjtBQUN0Qix5QkFBdUI7QUFDdkIsc0JBQW9CO0FBQ3BCLHNCQUFvQjtBQUNwQixzQkFBb0I7QUFDcEIsc0JBQW9CO0FBQ3BCLHNCQUFvQjtBQUNwQix1QkFBcUI7QUFDckIsMkJBQXlCO0FBQ3pCLDZCQUEyQjtBQUMzQixzQkFBb0I7QUFDcEIsOEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgJy4vcGluLXVua25vd24nO1xuaW1wb3J0ICcuL3Bpbi1mbG9hdCc7XG5pbXBvcnQgJy4vcGluLWludCc7XG5pbXBvcnQgJy4vcGluLXN0cmluZyc7XG5pbXBvcnQgJy4vcGluLWJvb2xlYW4nO1xuaW1wb3J0ICcuL3Bpbi12ZWMyJztcbmltcG9ydCAnLi9waW4tdmVjMyc7XG5pbXBvcnQgJy4vcGluLXZlYzQnO1xuaW1wb3J0ICcuL3Bpbi1tYXQzJztcbmltcG9ydCAnLi9waW4tbWF0NCc7XG5pbXBvcnQgJy4vcGluLWNvbG9yJztcbmltcG9ydCAnLi9waW4tdGV4dHVyZTJEJztcbmltcG9ydCAnLi9waW4tdGV4dHVyZUN1YmUnO1xuaW1wb3J0ICcuL3Bpbi1lbnVtJztcbmltcG9ydCAnLi9waW4tZHluYW1pYy1lbnVtJztcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-boolean.js b/extensions/shader-graph/dist/block-forge/internal/pin-boolean.js new file mode 100644 index 0000000..737bc0d --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-boolean.js @@ -0,0 +1,59 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +class BooleanPinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new BooleanPinAction(this.pin, { + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Boolean + * 布尔类型的引脚 + */ +class BooleanPin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#227f9b'; + this.line = 'normal'; + this.details = { + value: false, + }; + this.contentSlot = ``; + this.childrenSlot = []; + } + onInit() { + const $checkbox = this.refs.checkbox; + $checkbox.addEventListener('confirm', () => { + if (!this.details) { + this.details = { + value: !!$checkbox.value, + }; + } + const action = new BooleanPinAction(this, { + source: this.details.value, + target: !!$checkbox.value, + }); + this.exec(action); + }); + } + onUpdate() { + const $checkbox = this.refs.checkbox; + // @ts-ignore UICheckbox 类型没有暴露出来 + $checkbox.value = this.details.value; + } +} +BooleanPin.type = 'boolean'; +(0, pin_1.declarePin)(BooleanPin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWJvb2xlYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJuYWwvcGluLWJvb2xlYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLGdDQUFvRDtBQU1wRCxNQUFNLGdCQUFpQixTQUFRLGVBRzdCO0lBRUUsSUFBSSxDQUFDLE1BRUo7UUFDRyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRixJQUFJLElBQUksRUFBRTtZQUNOLGFBQWE7WUFDYixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBaUIsQ0FBQztZQUNuQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN2QyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbEI7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVcsU0FBUSxTQUFrQjtJQUEzQzs7UUFHSSxVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ2xCLFNBQUksR0FBRyxRQUFRLENBQUM7UUFDaEIsWUFBTyxHQUFHO1lBQ04sS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBRUYsZ0JBQVcsR0FBVyw0Q0FBNEMsQ0FBQztRQUNuRSxpQkFBWSxHQUFHLEVBQUUsQ0FBQztJQXVCdEIsQ0FBQztJQXJCRyxNQUFNO1FBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUE0QixDQUFDO1FBQ3pELFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNmLElBQUksQ0FBQyxPQUFPLEdBQUc7b0JBQ1gsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSztpQkFDM0IsQ0FBQzthQUNMO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3RDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7Z0JBQzFCLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUs7YUFDNUIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUE0QixDQUFDO1FBQ3pELGlDQUFpQztRQUNqQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3pDLENBQUM7O0FBL0JNLGVBQUksR0FBRyxTQUFTLENBQUM7QUFpQzVCLElBQUEsZ0JBQVUsRUFBQyxVQUFVLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUgeyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi9mb3JnZSc7XG5pbXBvcnQgeyBQaW4sIGRlY2xhcmVQaW4sIFBpbkFjdGlvbiB9IGZyb20gJy4uL3Bpbic7XG5cbnR5cGUgQm9vbGVhbkRldGFpbCA9IHtcbiAgICB2YWx1ZTogYm9vbGVhbjtcbn07XG5cbmNsYXNzIEJvb2xlYW5QaW5BY3Rpb24gZXh0ZW5kcyBQaW5BY3Rpb248e1xuICAgIHNvdXJjZTogYm9vbGVhbixcbiAgICB0YXJnZXQ6IGJvb2xlYW4sXG59PiB7XG5cbiAgICBleGVjKHBhcmFtczoge1xuICAgICAgICBmb3JnZTogSFRNTEdyYXBoRm9yZ2VFbGVtZW50XG4gICAgfSkge1xuICAgICAgICBjb25zdCAkcGluID0gcGFyYW1zLmZvcmdlLmdldFBpbkVsZW1lbnQodGhpcy5kZXRhaWwuYmxvY2tOYW1lLCAnaW5wdXQnLCB0aGlzLmRldGFpbC5pbmRleCk7XG4gICAgICAgIGlmICgkcGluKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBwaW4gPSAkcGluLl9fcGluIGFzIEZsb2F0UGluO1xuICAgICAgICAgICAgcGluLmRldGFpbHMudmFsdWUgPSB0aGlzLmRldGFpbC50YXJnZXQ7XG4gICAgICAgICAgICBwaW4ub25VcGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldmVydEFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuUGluQWN0aW9uKHRoaXMucGluLCB7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuZGV0YWlsLnRhcmdldCxcbiAgICAgICAgICAgIHRhcmdldDogdGhpcy5kZXRhaWwuc291cmNlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogQm9vbGVhblxuICog5biD5bCU57G75Z6L55qE5byV6ISaXG4gKi9cbmNsYXNzIEJvb2xlYW5QaW4gZXh0ZW5kcyBQaW48Qm9vbGVhbkRldGFpbD4ge1xuICAgIHN0YXRpYyB0eXBlID0gJ2Jvb2xlYW4nO1xuXG4gICAgY29sb3IgPSAnIzIyN2Y5Yic7XG4gICAgbGluZSA9ICdub3JtYWwnO1xuICAgIGRldGFpbHMgPSB7XG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgY29udGVudFNsb3QgPSAvKmh0bWwqL2A8dWktY2hlY2tib3ggcmVmPVwiY2hlY2tib3hcIj48L3VpLWNoZWNrYm94PmA7XG4gICAgY2hpbGRyZW5TbG90ID0gW107XG5cbiAgICBvbkluaXQoKSB7XG4gICAgICAgIGNvbnN0ICRjaGVja2JveCA9IHRoaXMucmVmcy5jaGVja2JveCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAkY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY29uZmlybScsICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxzID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogISEkY2hlY2tib3gudmFsdWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBCb29sZWFuUGluQWN0aW9uKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuZGV0YWlscy52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6ICEhJGNoZWNrYm94LnZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmV4ZWMoYWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25VcGRhdGUoKSB7XG4gICAgICAgIGNvbnN0ICRjaGVja2JveCA9IHRoaXMucmVmcy5jaGVja2JveCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAvLyBAdHMtaWdub3JlIFVJQ2hlY2tib3gg57G75Z6L5rKh5pyJ5pq06Zyy5Ye65p2lXG4gICAgICAgICRjaGVja2JveC52YWx1ZSA9IHRoaXMuZGV0YWlscy52YWx1ZTtcbiAgICB9XG59XG5kZWNsYXJlUGluKEJvb2xlYW5QaW4pO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-color.js b/extensions/shader-graph/dist/block-forge/internal/pin-color.js new file mode 100644 index 0000000..b39dd03 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-color.js @@ -0,0 +1,65 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +class ColorPinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new ColorPinAction(this.pin, { + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Float + * 浮点类型的引脚 + */ +class ColorPin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#8471cf'; + this.line = 'normal'; + this.details = { + value: { + x: 0, y: 0, z: 0, w: 1, + }, + }; + this.contentSlot = ``; + this.childrenSlot = []; + } + onInit() { + const $color = this.refs.color; + $color.addEventListener('confirm', () => { + const x = parseFloat($color.value[0]) / 255; + const y = parseFloat($color.value[1]) / 255; + const z = parseFloat($color.value[2]) / 255; + const w = parseFloat($color.value[3]) / 255; + if (!this.details) { + this.details = { + value: { x, y, z, w }, + }; + } + const action = new ColorPinAction(this, { + source: this.details.value, + target: { x, y, z, w }, + }); + this.exec(action); + }); + } + onUpdate() { + const $color = this.refs.color; + const color = this.details.value; + $color.value = JSON.stringify([color.x * 255, color.y * 255, color.z * 255, color.w * 255]); + } +} +ColorPin.type = 'color'; +(0, pin_1.declarePin)(ColorPin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvbG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Jsb2NrLWZvcmdlL2ludGVybmFsL3Bpbi1jb2xvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsZ0NBQW9EO0FBV3BELE1BQU0sY0FBZSxTQUFRLGVBRzNCO0lBRUUsSUFBSSxDQUFDLE1BRUo7UUFDRyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRixJQUFJLElBQUksRUFBRTtZQUNOLGFBQWE7WUFDYixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBaUIsQ0FBQztZQUNuQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN2QyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbEI7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07U0FDN0IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxRQUFTLFNBQVEsU0FBZ0I7SUFBdkM7O1FBR0ksVUFBSyxHQUFHLFNBQVMsQ0FBQztRQUNsQixTQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ2hCLFlBQU8sR0FBRztZQUNOLEtBQUssRUFBRTtnQkFDSCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzthQUN6QjtTQUNKLENBQUM7UUFFRixnQkFBVyxHQUFXLG1DQUFtQyxDQUFDO1FBQzFELGlCQUFZLEdBQUcsRUFBRSxDQUFDO0lBNEJ0QixDQUFDO0lBMUJHLE1BQU07UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQXlCLENBQUM7UUFDbkQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDcEMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRztvQkFDWCxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7aUJBQ3hCLENBQUM7YUFDTDtZQUVELE1BQU0sTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtnQkFDcEMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDMUIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2FBQ3pCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUTtRQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBeUIsQ0FBQztRQUNuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNqQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQzs7QUF0Q00sYUFBSSxHQUFHLE9BQU8sQ0FBQztBQXdDMUIsSUFBQSxnQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7IEhUTUxHcmFwaEZvcmdlRWxlbWVudCB9IGZyb20gJy4uL2ZvcmdlJztcbmltcG9ydCB7IFBpbiwgZGVjbGFyZVBpbiwgUGluQWN0aW9uIH0gZnJvbSAnLi4vcGluJztcblxudHlwZSBDb2xvckRldGFpbCA9IHtcbiAgICB2YWx1ZToge1xuICAgICAgICB4OiBudW1iZXI7XG4gICAgICAgIHk6IG51bWJlcjtcbiAgICAgICAgejogbnVtYmVyO1xuICAgICAgICB3OiBudW1iZXI7XG4gICAgfTtcbn07XG5cbmNsYXNzIENvbG9yUGluQWN0aW9uIGV4dGVuZHMgUGluQWN0aW9uPHtcbiAgICBzb3VyY2U6IENvbG9yRGV0YWlsWyd2YWx1ZSddLFxuICAgIHRhcmdldDogQ29sb3JEZXRhaWxbJ3ZhbHVlJ10sXG59PiB7XG5cbiAgICBleGVjKHBhcmFtczoge1xuICAgICAgICBmb3JnZTogSFRNTEdyYXBoRm9yZ2VFbGVtZW50XG4gICAgfSkge1xuICAgICAgICBjb25zdCAkcGluID0gcGFyYW1zLmZvcmdlLmdldFBpbkVsZW1lbnQodGhpcy5kZXRhaWwuYmxvY2tOYW1lLCAnaW5wdXQnLCB0aGlzLmRldGFpbC5pbmRleCk7XG4gICAgICAgIGlmICgkcGluKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBwaW4gPSAkcGluLl9fcGluIGFzIENvbG9yUGluO1xuICAgICAgICAgICAgcGluLmRldGFpbHMudmFsdWUgPSB0aGlzLmRldGFpbC50YXJnZXQ7XG4gICAgICAgICAgICBwaW4ub25VcGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldmVydEFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvclBpbkFjdGlvbih0aGlzLnBpbiwge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmRldGFpbC50YXJnZXQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZGV0YWlsLnNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEZsb2F0XG4gKiDmta7ngrnnsbvlnovnmoTlvJXohJpcbiAqL1xuY2xhc3MgQ29sb3JQaW4gZXh0ZW5kcyBQaW48Q29sb3JEZXRhaWw+IHtcbiAgICBzdGF0aWMgdHlwZSA9ICdjb2xvcic7XG5cbiAgICBjb2xvciA9ICcjODQ3MWNmJztcbiAgICBsaW5lID0gJ25vcm1hbCc7XG4gICAgZGV0YWlscyA9IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHg6IDAsIHk6IDAsIHo6IDAsIHc6IDEsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnRlbnRTbG90ID0gLypodG1sKi9gPHVpLWNvbG9yIHJlZj1cImNvbG9yXCI+PC91aS1jb2xvcj5gO1xuICAgIGNoaWxkcmVuU2xvdCA9IFtdO1xuXG4gICAgb25Jbml0KCkge1xuICAgICAgICBjb25zdCAkY29sb3IgPSB0aGlzLnJlZnMuY29sb3IgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgJGNvbG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbmZpcm0nLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB4ID0gcGFyc2VGbG9hdCgkY29sb3IudmFsdWVbMF0pIC8gMjU1O1xuICAgICAgICAgICAgY29uc3QgeSA9IHBhcnNlRmxvYXQoJGNvbG9yLnZhbHVlWzFdKSAvIDI1NTtcbiAgICAgICAgICAgIGNvbnN0IHogPSBwYXJzZUZsb2F0KCRjb2xvci52YWx1ZVsyXSkgLyAyNTU7XG4gICAgICAgICAgICBjb25zdCB3ID0gcGFyc2VGbG9hdCgkY29sb3IudmFsdWVbM10pIC8gMjU1O1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRldGFpbHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHgsIHksIHosIHcgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBuZXcgQ29sb3JQaW5BY3Rpb24odGhpcywge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZXRhaWxzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHRhcmdldDogeyB4LCB5LCB6LCB3IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXhlYyhhY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgJGNvbG9yID0gdGhpcy5yZWZzLmNvbG9yIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5kZXRhaWxzLnZhbHVlO1xuICAgICAgICAkY29sb3IudmFsdWUgPSBKU09OLnN0cmluZ2lmeShbY29sb3IueCAqIDI1NSwgY29sb3IueSAqIDI1NSwgY29sb3IueiAqIDI1NSwgY29sb3IudyAqIDI1NV0pO1xuICAgIH1cbn1cbmRlY2xhcmVQaW4oQ29sb3JQaW4pO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-dynamic-enum.js b/extensions/shader-graph/dist/block-forge/internal/pin-dynamic-enum.js new file mode 100644 index 0000000..2457be4 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-dynamic-enum.js @@ -0,0 +1,112 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +const enum_1 = require("../enum"); +class DynamicEnumPinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new DynamicEnumPinAction(this.pin, { + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Enum + * 枚举类型的引脚 + */ +class DynamicEnumPin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#451359'; + this.line = 'normal'; + this.details = { + type: '', + value: undefined, + }; + this.style = ` + .pin-dynamic-enum { + flex: 1; + } + .jump { + margin-left: 2px; + } + .jump:hover { + color: white; + } + `; + this.contentSlot = ``; + // contentSlot = /*html*/``; + this.childrenSlot = []; + this.index = -1; + this.enumList = []; + this.optionList = []; + } + onInit() { + if (this.desc.details?.type) { + (0, enum_1.removeEnumObserver)(this.desc.details?.type); + (0, enum_1.addEnumObserver)(this.desc.details?.type, () => { + this.sync(); + }); + } + const $enum = this.refs.enum; + $enum.addEventListener('confirm', () => { + this.index = parseInt($enum.value); + const item = this.enumList[this.index]; + const action = new DynamicEnumPinAction(this, { + source: this.details.value, + target: item.name, + }); + this.exec(action); + }); + } + sync() { + this.enumList = (0, enum_1.getDynamicEnumByType)(this.details.type); + const $enum = this.refs.enum; + this.optionList.forEach(option => $enum.removeChild(option)); + this.optionList.length = 0; + for (let i = 0; i < this.enumList.length; i++) { + const item = this.enumList[i]; + const option = document.createElement('option'); + option.innerText = item.name; + option.setAttribute('value', item.value + ''); + $enum.appendChild(option); + this.optionList.push(option); + if (this.details.value && item.name === this.details.value) { + this.index = i; + $enum.value = this.index + ''; + } + if (this.index === i && this.details.value !== item.value) { + this.details.value = item.name; + } + } + if (this.index === -1 && !this.details.value && this.desc) { + for (let i = 0; i < this.enumList.length; i++) { + const item = this.enumList[i]; + if (item.name === this.desc.details?.defaultValue) { + this.index = i; + this.details.value = item.name; + break; + } + } + const $enum = this.refs.enum; + $enum.value = this.index + ''; + } + } + onUpdate() { + const $enum = this.refs.enum; + this.details.type = this.desc.details?.type; + this.sync(); + } +} +DynamicEnumPin.type = 'dynamicEnum'; +(0, pin_1.declarePin)(DynamicEnumPin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWR5bmFtaWMtZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9jay1mb3JnZS9pbnRlcm5hbC9waW4tZHluYW1pYy1lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFHYixnQ0FBb0Q7QUFDcEQsa0NBQThGO0FBUTlGLE1BQU0sb0JBQXFCLFNBQVEsZUFHakM7SUFFRSxJQUFJLENBQUMsTUFFSjtRQUNHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNGLElBQUksSUFBSSxFQUFFO1lBQ04sYUFBYTtZQUNiLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUF1QixDQUFDO1lBQ3pDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNsQjtJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUMxQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1NBQzdCLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQUVEOzs7R0FHRztBQUNILE1BQU0sY0FBZSxTQUFRLFNBQXlCO0lBQXREOztRQUdJLFVBQUssR0FBRyxTQUFTLENBQUM7UUFDbEIsU0FBSSxHQUFHLFFBQVEsQ0FBQztRQUNoQixZQUFPLEdBQXlCO1lBQzVCLElBQUksRUFBRSxFQUFFO1lBQ1IsS0FBSyxFQUFFLFNBQVM7U0FDbkIsQ0FBQztRQUVGLFVBQUssR0FBRzs7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QUFDLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7IEhUTUxHcmFwaEZvcmdlRWxlbWVudCB9IGZyb20gJy4uL2ZvcmdlJztcbmltcG9ydCB7IFBpbiwgZGVjbGFyZVBpbiwgUGluQWN0aW9uIH0gZnJvbSAnLi4vcGluJztcbmltcG9ydCB7IGdldER5bmFtaWNFbnVtQnlUeXBlLCBhZGRFbnVtT2JzZXJ2ZXIsIEVudW1UeXBlLCByZW1vdmVFbnVtT2JzZXJ2ZXIgfSBmcm9tICcuLi9lbnVtJztcbmltcG9ydCB7IElQaW5EZXNjcmlwdGlvbiwgUGluRGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZSc7XG5cbnR5cGUgRHluYW1pY0VudW1QaW5EZXRhaWwgPSB7XG4gICAgdmFsdWU6IGFueTtcbiAgICB0eXBlOiBzdHJpbmc7XG59XG5cbmNsYXNzIER5bmFtaWNFbnVtUGluQWN0aW9uIGV4dGVuZHMgUGluQWN0aW9uPHtcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICB0YXJnZXQ6IHN0cmluZyxcbn0+IHtcblxuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0ICRwaW4gPSBwYXJhbXMuZm9yZ2UuZ2V0UGluRWxlbWVudCh0aGlzLmRldGFpbC5ibG9ja05hbWUsICdpbnB1dCcsIHRoaXMuZGV0YWlsLmluZGV4KTtcbiAgICAgICAgaWYgKCRwaW4pIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9ICRwaW4uX19waW4gYXMgRHluYW1pY0VudW1QaW47XG4gICAgICAgICAgICBwaW4uZGV0YWlscy52YWx1ZSA9IHRoaXMuZGV0YWlsLnRhcmdldDtcbiAgICAgICAgICAgIHBpbi5vblVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV2ZXJ0QWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNFbnVtUGluQWN0aW9uKHRoaXMucGluLCB7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuZGV0YWlsLnRhcmdldCxcbiAgICAgICAgICAgIHRhcmdldDogdGhpcy5kZXRhaWwuc291cmNlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogRW51bVxuICog5p6a5Li+57G75Z6L55qE5byV6ISaXG4gKi9cbmNsYXNzIER5bmFtaWNFbnVtUGluIGV4dGVuZHMgUGluPER5bmFtaWNFbnVtUGluRGV0YWlsPiB7XG4gICAgc3RhdGljIHR5cGUgPSAnZHluYW1pY0VudW0nO1xuXG4gICAgY29sb3IgPSAnIzQ1MTM1OSc7XG4gICAgbGluZSA9ICdub3JtYWwnO1xuICAgIGRldGFpbHM6IER5bmFtaWNFbnVtUGluRGV0YWlsID0ge1xuICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgc3R5bGUgPSBgXG4gICAgICAgIC5waW4tZHluYW1pYy1lbnVtIHtcbiAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgIH1cbiAgICAgICAgLmp1bXAge1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgICAgICAgfVxuICAgICAgICAuanVtcDpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIH1cbiAgICBgO1xuXG4gICAgY29udGVudFNsb3QgPSAvKmh0bWwqL2A8dWktc2VsZWN0IGNsYXNzPVwicGluLWR5bmFtaWMtZW51bVwiIHJlZj1cImVudW1cIj48L3VpLXNlbGVjdD5gO1xuICAgIC8vIGNvbnRlbnRTbG90ID0gLypodG1sKi9gPHVpLXNlbGVjdCBjbGFzcz1cInBpbi1keW5hbWljLWVudW1cIiByZWY9XCJlbnVtXCI+PC91aS1zZWxlY3Q+PHVpLWljb24gY2xhc3M9XCJqdW1wXCIgcmVmPVwianVtcFwiIHZhbHVlPVwibGlua1wiPjwvdWktaWNvbj5gO1xuICAgIGNoaWxkcmVuU2xvdCA9IFtdO1xuXG4gICAgcHJpdmF0ZSBpbmRleCA9IC0xO1xuICAgIHByaXZhdGUgZW51bUxpc3Q6IEVudW1UeXBlW10gPSBbXTtcbiAgICBwcml2YXRlIG9wdGlvbkxpc3Q6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzYy5kZXRhaWxzPy50eXBlKSB7XG4gICAgICAgICAgICByZW1vdmVFbnVtT2JzZXJ2ZXIodGhpcy5kZXNjLmRldGFpbHM/LnR5cGUpO1xuICAgICAgICAgICAgYWRkRW51bU9ic2VydmVyKHRoaXMuZGVzYy5kZXRhaWxzPy50eXBlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCAkZW51bSA9IHRoaXMucmVmcy5lbnVtIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICRlbnVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbmZpcm0nLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluZGV4ID0gcGFyc2VJbnQoJGVudW0udmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZW51bUxpc3RbdGhpcy5pbmRleF07XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBEeW5hbWljRW51bVBpbkFjdGlvbih0aGlzLCB7XG4gICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLmRldGFpbHMudmFsdWUsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBpdGVtLm5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXhlYyhhY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmMoKSB7XG4gICAgICAgIHRoaXMuZW51bUxpc3QgPSBnZXREeW5hbWljRW51bUJ5VHlwZSh0aGlzLmRldGFpbHMudHlwZSk7XG4gICAgICAgIGNvbnN0ICRlbnVtID0gdGhpcy5yZWZzLmVudW0gYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgdGhpcy5vcHRpb25MaXN0LmZvckVhY2gob3B0aW9uID0+ICRlbnVtLnJlbW92ZUNoaWxkKG9wdGlvbikpO1xuICAgICAgICB0aGlzLm9wdGlvbkxpc3QubGVuZ3RoID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZW51bUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmVudW1MaXN0W2ldO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gaXRlbS5uYW1lO1xuICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBpdGVtLnZhbHVlICsgJycpO1xuICAgICAgICAgICAgJGVudW0uYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uTGlzdC5wdXNoKG9wdGlvbik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRldGFpbHMudmFsdWUgJiYgaXRlbS5uYW1lID09PSB0aGlzLmRldGFpbHMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAkZW51bS52YWx1ZSA9IHRoaXMuaW5kZXggKyAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IGkgJiYgdGhpcy5kZXRhaWxzLnZhbHVlICE9PSBpdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxzLnZhbHVlID0gaXRlbS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGV4ID09PSAtMSAmJiAhdGhpcy5kZXRhaWxzLnZhbHVlICYmIHRoaXMuZGVzYykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVudW1MaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbTogRW51bVR5cGUgPSB0aGlzLmVudW1MaXN0W2ldO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgPT09IHRoaXMuZGVzYy5kZXRhaWxzPy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlscy52YWx1ZSA9IGl0ZW0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgJGVudW0gPSB0aGlzLnJlZnMuZW51bSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgICAgJGVudW0udmFsdWUgPSB0aGlzLmluZGV4ICsgJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgJGVudW0gPSB0aGlzLnJlZnMuZW51bSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICB0aGlzLmRldGFpbHMudHlwZSA9IHRoaXMuZGVzYy5kZXRhaWxzPy50eXBlO1xuXG4gICAgICAgIHRoaXMuc3luYygpO1xuICAgIH1cbn1cbmRlY2xhcmVQaW4oRHluYW1pY0VudW1QaW4pO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-enum.js b/extensions/shader-graph/dist/block-forge/internal/pin-enum.js new file mode 100644 index 0000000..50f9018 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-enum.js @@ -0,0 +1,71 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +const enum_1 = require("../enum"); +class EnumPinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new EnumPinAction(this.pin, { + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Enum + * 枚举类型的引脚 + */ +class EnumPin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#451359'; + this.line = 'normal'; + this.details = { + value: 0, + }; + this.style = ` + .pin-enum { + flex: 1; + } + `; + this.contentSlot = ``; + this.childrenSlot = []; + } + onInit() { + const $enum = this.refs.enum; + $enum.addEventListener('confirm', () => { + if (!this.details) { + this.details = { + value: 0, + }; + } + const action = new EnumPinAction(this, { + source: this.details.value, + target: parseInt($enum.value), + }); + this.exec(action); + }); + } + onUpdate() { + const $enum = this.refs.enum; + $enum.innerHTML = ''; + (0, enum_1.getEnumByType)(this.desc.details?.type).forEach((data) => { + const option = document.createElement('option'); + option.innerText = data.name; + option.setAttribute('value', data.value + ''); + $enum.appendChild(option); + }); + $enum.value = this.details.value + ''; + } +} +EnumPin.type = 'enum'; +(0, pin_1.declarePin)(EnumPin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJuYWwvcGluLWVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUliLGdDQUFvRDtBQUNwRCxrQ0FBd0M7QUFPeEMsTUFBTSxhQUFjLFNBQVEsZUFHMUI7SUFFRSxJQUFJLENBQUMsTUFFSjtRQUNHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNGLElBQUksSUFBSSxFQUFFO1lBQ04sYUFBYTtZQUNiLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFpQixDQUFDO1lBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNsQjtJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQVEsU0FBUSxTQUFrQjtJQUF4Qzs7UUFHSSxVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ2xCLFNBQUksR0FBRyxRQUFRLENBQUM7UUFDaEIsWUFBTyxHQUFHO1lBQ04sS0FBSyxFQUFFLENBQUM7U0FDWCxDQUFDO1FBRUYsVUFBSyxHQUFHOzs7O0tBSVAsQ0FBQztRQUVGLGdCQUFXLEdBQVcscURBQXFELENBQUM7UUFDNUUsaUJBQVksR0FBRyxFQUFFLENBQUM7SUErQnRCLENBQUM7SUE3QkcsTUFBTTtRQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBd0IsQ0FBQztRQUNqRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZixJQUFJLENBQUMsT0FBTyxHQUFHO29CQUNYLEtBQUssRUFBRSxDQUFDO2lCQUNYLENBQUM7YUFDTDtZQUVELE1BQU0sTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksRUFBRTtnQkFDbkMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDMUIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQ2hDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUTtRQUNKLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBd0IsQ0FBQztRQUVqRCxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFBLG9CQUFhLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBcUMsRUFBRSxFQUFFO1lBQ3JGLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDOUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQzFDLENBQUM7O0FBN0NNLFlBQUksR0FBRyxNQUFNLENBQUM7QUErQ3pCLElBQUEsZ0JBQVUsRUFBQyxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUgeyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi9mb3JnZSc7XG5pbXBvcnQgdHlwZSB7IEJhc2VFbGVtZW50IH0gZnJvbSAnQGl0aGFyYm9ycy91aS1jb3JlJztcbmltcG9ydCB7IFBpbiwgZGVjbGFyZVBpbiwgUGluQWN0aW9uIH0gZnJvbSAnLi4vcGluJztcbmltcG9ydCB7IGdldEVudW1CeVR5cGUgfSBmcm9tICcuLi9lbnVtJztcbmltcG9ydCB7IElQaW5EZXNjcmlwdGlvbiwgUGluRGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZSc7XG5cbnR5cGUgRW51bVBpbkRldGFpbCA9IHtcbiAgICB2YWx1ZTogbnVtYmVyO1xufVxuXG5jbGFzcyBFbnVtUGluQWN0aW9uIGV4dGVuZHMgUGluQWN0aW9uPHtcbiAgICBzb3VyY2U6IG51bWJlcixcbiAgICB0YXJnZXQ6IG51bWJlcixcbn0+IHtcblxuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0ICRwaW4gPSBwYXJhbXMuZm9yZ2UuZ2V0UGluRWxlbWVudCh0aGlzLmRldGFpbC5ibG9ja05hbWUsICdpbnB1dCcsIHRoaXMuZGV0YWlsLmluZGV4KTtcbiAgICAgICAgaWYgKCRwaW4pIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9ICRwaW4uX19waW4gYXMgRmxvYXRQaW47XG4gICAgICAgICAgICBwaW4uZGV0YWlscy52YWx1ZSA9IHRoaXMuZGV0YWlsLnRhcmdldDtcbiAgICAgICAgICAgIHBpbi5vblVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV2ZXJ0QWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IEVudW1QaW5BY3Rpb24odGhpcy5waW4sIHtcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZXRhaWwudGFyZ2V0LFxuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmRldGFpbC5zb3VyY2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBFbnVtXG4gKiDmnprkuL7nsbvlnovnmoTlvJXohJpcbiAqL1xuY2xhc3MgRW51bVBpbiBleHRlbmRzIFBpbjxFbnVtUGluRGV0YWlsPiB7XG4gICAgc3RhdGljIHR5cGUgPSAnZW51bSc7XG5cbiAgICBjb2xvciA9ICcjNDUxMzU5JztcbiAgICBsaW5lID0gJ25vcm1hbCc7XG4gICAgZGV0YWlscyA9IHtcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgfTtcblxuICAgIHN0eWxlID0gYFxuICAgICAgICAucGluLWVudW0ge1xuICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgfVxuICAgIGA7XG5cbiAgICBjb250ZW50U2xvdCA9IC8qaHRtbCovYDx1aS1zZWxlY3QgY2xhc3M9XCJwaW4tZW51bVwiIHJlZj1cImVudW1cIj48L3VpLXNlbGVjdD5gO1xuICAgIGNoaWxkcmVuU2xvdCA9IFtdO1xuXG4gICAgb25Jbml0KCkge1xuICAgICAgICBjb25zdCAkZW51bSA9IHRoaXMucmVmcy5lbnVtIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICRlbnVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbmZpcm0nLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGV0YWlscykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlscyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gbmV3IEVudW1QaW5BY3Rpb24odGhpcywge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZXRhaWxzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHRhcmdldDogcGFyc2VJbnQoJGVudW0udmFsdWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmV4ZWMoYWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25VcGRhdGUoKSB7XG4gICAgICAgIGNvbnN0ICRlbnVtID0gdGhpcy5yZWZzLmVudW0gYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgICAgICAkZW51bS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgZ2V0RW51bUJ5VHlwZSh0aGlzLmRlc2MuZGV0YWlscz8udHlwZSkuZm9yRWFjaCgoZGF0YTogeyBuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gZGF0YS5uYW1lO1xuICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBkYXRhLnZhbHVlICsgJycpO1xuICAgICAgICAgICAgJGVudW0uYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRlbnVtLnZhbHVlID0gdGhpcy5kZXRhaWxzLnZhbHVlICsgJyc7XG4gICAgfVxufVxuZGVjbGFyZVBpbihFbnVtUGluKTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-float.js b/extensions/shader-graph/dist/block-forge/internal/pin-float.js new file mode 100644 index 0000000..ec4454c --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-float.js @@ -0,0 +1,58 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +class FloatPinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new FloatPinAction(this.pin, { + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Float + * 浮点类型的引脚 + */ +class FloatPin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#c171cf'; + this.line = 'normal'; + this.details = { + value: 0, + }; + this.contentSlot = ``; + this.childrenSlot = []; + } + onInit() { + const $num = this.refs.num; + $num.addEventListener('confirm', () => { + if (!this.details) { + this.details = { + value: parseFloat($num.value), + }; + } + const action = new FloatPinAction(this, { + source: this.details.value, + target: parseFloat($num.value), + }); + this.exec(action); + }); + } + onUpdate() { + const $num = this.refs.num; + $num.value = this.details.value + ''; + } +} +FloatPin.type = 'float'; +(0, pin_1.declarePin)(FloatPin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWZsb2F0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Jsb2NrLWZvcmdlL2ludGVybmFsL3Bpbi1mbG9hdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsZ0NBQW9EO0FBTXBELE1BQU0sY0FBZSxTQUFRLGVBRzNCO0lBRUUsSUFBSSxDQUFDLE1BRUo7UUFDRyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRixJQUFJLElBQUksRUFBRTtZQUNOLGFBQWE7WUFDYixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBaUIsQ0FBQztZQUNuQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN2QyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbEI7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07U0FDN0IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxRQUFTLFNBQVEsU0FBZ0I7SUFBdkM7O1FBR0ksVUFBSyxHQUFHLFNBQVMsQ0FBQztRQUNsQixTQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ2hCLFlBQU8sR0FBRztZQUNOLEtBQUssRUFBRSxDQUFDO1NBQ1gsQ0FBQztRQUVGLGdCQUFXLEdBQVcseUNBQXlDLENBQUM7UUFDaEUsaUJBQVksR0FBRyxFQUFFLENBQUM7SUFzQnRCLENBQUM7SUFwQkcsTUFBTTtRQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBdUIsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZixJQUFJLENBQUMsT0FBTyxHQUFHO29CQUNYLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDaEMsQ0FBQzthQUNMO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO2dCQUNwQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUMxQixNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDakMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUF1QixDQUFDO1FBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3pDLENBQUM7O0FBOUJNLGFBQUksR0FBRyxPQUFPLENBQUM7QUFnQzFCLElBQUEsZ0JBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUgeyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi9mb3JnZSc7XG5pbXBvcnQgeyBQaW4sIGRlY2xhcmVQaW4sIFBpbkFjdGlvbiB9IGZyb20gJy4uL3Bpbic7XG5cbnR5cGUgRmxvYXREZXRhaWwgPSB7XG4gICAgdmFsdWU6IG51bWJlcjtcbn07XG5cbmNsYXNzIEZsb2F0UGluQWN0aW9uIGV4dGVuZHMgUGluQWN0aW9uPHtcbiAgICBzb3VyY2U6IG51bWJlcixcbiAgICB0YXJnZXQ6IG51bWJlcixcbn0+IHtcblxuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0ICRwaW4gPSBwYXJhbXMuZm9yZ2UuZ2V0UGluRWxlbWVudCh0aGlzLmRldGFpbC5ibG9ja05hbWUsICdpbnB1dCcsIHRoaXMuZGV0YWlsLmluZGV4KTtcbiAgICAgICAgaWYgKCRwaW4pIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9ICRwaW4uX19waW4gYXMgRmxvYXRQaW47XG4gICAgICAgICAgICBwaW4uZGV0YWlscy52YWx1ZSA9IHRoaXMuZGV0YWlsLnRhcmdldDtcbiAgICAgICAgICAgIHBpbi5vblVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV2ZXJ0QWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IEZsb2F0UGluQWN0aW9uKHRoaXMucGluLCB7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuZGV0YWlsLnRhcmdldCxcbiAgICAgICAgICAgIHRhcmdldDogdGhpcy5kZXRhaWwuc291cmNlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogRmxvYXRcbiAqIOa1rueCueexu+Wei+eahOW8leiEmlxuICovXG5jbGFzcyBGbG9hdFBpbiBleHRlbmRzIFBpbjxGbG9hdERldGFpbD4ge1xuICAgIHN0YXRpYyB0eXBlID0gJ2Zsb2F0JztcblxuICAgIGNvbG9yID0gJyNjMTcxY2YnO1xuICAgIGxpbmUgPSAnbm9ybWFsJztcbiAgICBkZXRhaWxzID0ge1xuICAgICAgICB2YWx1ZTogMCxcbiAgICB9O1xuXG4gICAgY29udGVudFNsb3QgPSAvKmh0bWwqL2A8dWktbnVtLWlucHV0IHJlZj1cIm51bVwiPjwvdWktbnVtLWlucHV0PmA7XG4gICAgY2hpbGRyZW5TbG90ID0gW107XG5cbiAgICBvbkluaXQoKSB7XG4gICAgICAgIGNvbnN0ICRudW0gPSB0aGlzLnJlZnMubnVtIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICRudW0uYWRkRXZlbnRMaXN0ZW5lcignY29uZmlybScsICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxzID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdCgkbnVtLnZhbHVlKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gbmV3IEZsb2F0UGluQWN0aW9uKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuZGV0YWlscy52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHBhcnNlRmxvYXQoJG51bS52YWx1ZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXhlYyhhY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgJG51bSA9IHRoaXMucmVmcy5udW0gYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgJG51bS52YWx1ZSA9IHRoaXMuZGV0YWlscy52YWx1ZSArICcnO1xuICAgIH1cbn1cbmRlY2xhcmVQaW4oRmxvYXRQaW4pO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-int.js b/extensions/shader-graph/dist/block-forge/internal/pin-int.js new file mode 100644 index 0000000..d93008c --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-int.js @@ -0,0 +1,58 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +class IntPinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new IntPinAction(this.pin, { + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Float + * 浮点类型的引脚 + */ +class IntPin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#cf71a0'; + this.line = 'normal'; + this.details = { + value: 0, + }; + this.contentSlot = ``; + this.childrenSlot = []; + } + onInit() { + const $num = this.refs.num; + $num.addEventListener('confirm', () => { + if (!this.details) { + this.details = { + value: 0, + }; + } + const action = new IntPinAction(this, { + source: this.details.value, + target: parseFloat($num.value), + }); + this.exec(action); + }); + } + onUpdate() { + const $num = this.refs.num; + $num.value = this.details.value + ''; + } +} +IntPin.type = 'int'; +(0, pin_1.declarePin)(IntPin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9jay1mb3JnZS9pbnRlcm5hbC9waW4taW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFJYixnQ0FBb0Q7QUFNcEQsTUFBTSxZQUFhLFNBQVEsZUFHekI7SUFFRSxJQUFJLENBQUMsTUFFSjtRQUNHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNGLElBQUksSUFBSSxFQUFFO1lBQ04sYUFBYTtZQUNiLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFpQixDQUFDO1lBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNsQjtJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzlCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE1BQU8sU0FBUSxTQUFjO0lBQW5DOztRQUdJLFVBQUssR0FBRyxTQUFTLENBQUM7UUFDbEIsU0FBSSxHQUFHLFFBQVEsQ0FBQztRQUNoQixZQUFPLEdBQUc7WUFDTixLQUFLLEVBQUUsQ0FBQztTQUNYLENBQUM7UUFFRixnQkFBVyxHQUFXLGtEQUFrRCxDQUFDO1FBQ3pFLGlCQUFZLEdBQUcsRUFBRSxDQUFDO0lBdUJ0QixDQUFDO0lBckJHLE1BQU07UUFDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQXVCLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRztvQkFDWCxLQUFLLEVBQUUsQ0FBQztpQkFDWCxDQUFDO2FBQ0w7WUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7Z0JBQzFCLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUNqQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVE7UUFDSixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQXVCLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDekMsQ0FBQzs7QUEvQk0sV0FBSSxHQUFHLEtBQUssQ0FBQztBQWlDeEIsSUFBQSxnQkFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7IEhUTUxHcmFwaEZvcmdlRWxlbWVudCB9IGZyb20gJy4uL2ZvcmdlJztcbmltcG9ydCB0eXBlIHsgQmFzZUVsZW1lbnQgfSBmcm9tICdAaXRoYXJib3JzL3VpLWNvcmUnO1xuaW1wb3J0IHsgUGluLCBkZWNsYXJlUGluLCBQaW5BY3Rpb24gfSBmcm9tICcuLi9waW4nO1xuXG50eXBlIEludERldGFpbCA9IHtcbiAgICB2YWx1ZTogbnVtYmVyO1xufTtcblxuY2xhc3MgSW50UGluQWN0aW9uIGV4dGVuZHMgUGluQWN0aW9uPHtcbiAgICBzb3VyY2U6IEludERldGFpbFsndmFsdWUnXSxcbiAgICB0YXJnZXQ6IEludERldGFpbFsndmFsdWUnXSxcbn0+IHtcblxuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0ICRwaW4gPSBwYXJhbXMuZm9yZ2UuZ2V0UGluRWxlbWVudCh0aGlzLmRldGFpbC5ibG9ja05hbWUsICdpbnB1dCcsIHRoaXMuZGV0YWlsLmluZGV4KTtcbiAgICAgICAgaWYgKCRwaW4pIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9ICRwaW4uX19waW4gYXMgRmxvYXRQaW47XG4gICAgICAgICAgICBwaW4uZGV0YWlscy52YWx1ZSA9IHRoaXMuZGV0YWlsLnRhcmdldDtcbiAgICAgICAgICAgIHBpbi5vblVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV2ZXJ0QWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IEludFBpbkFjdGlvbih0aGlzLnBpbiwge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmRldGFpbC50YXJnZXQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZGV0YWlsLnNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEZsb2F0XG4gKiDmta7ngrnnsbvlnovnmoTlvJXohJpcbiAqL1xuY2xhc3MgSW50UGluIGV4dGVuZHMgUGluPEludERldGFpbD4ge1xuICAgIHN0YXRpYyB0eXBlID0gJ2ludCc7XG5cbiAgICBjb2xvciA9ICcjY2Y3MWEwJztcbiAgICBsaW5lID0gJ25vcm1hbCc7XG4gICAgZGV0YWlscyA9IHtcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgfTtcblxuICAgIGNvbnRlbnRTbG90ID0gLypodG1sKi9gPHVpLW51bS1pbnB1dCBzdGVwPVwiMVwiIHJlZj1cIm51bVwiPjwvdWktbnVtLWlucHV0PmA7XG4gICAgY2hpbGRyZW5TbG90ID0gW107XG5cbiAgICBvbkluaXQoKSB7XG4gICAgICAgIGNvbnN0ICRudW0gPSB0aGlzLnJlZnMubnVtIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICRudW0uYWRkRXZlbnRMaXN0ZW5lcignY29uZmlybScsICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxzID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBuZXcgSW50UGluQWN0aW9uKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuZGV0YWlscy52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHBhcnNlRmxvYXQoJG51bS52YWx1ZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXhlYyhhY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgJG51bSA9IHRoaXMucmVmcy5udW0gYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgJG51bS52YWx1ZSA9IHRoaXMuZGV0YWlscy52YWx1ZSArICcnO1xuICAgIH1cbn1cbmRlY2xhcmVQaW4oSW50UGluKTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-mat3.js b/extensions/shader-graph/dist/block-forge/internal/pin-mat3.js new file mode 100644 index 0000000..377252f --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-mat3.js @@ -0,0 +1,83 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +const mat3KeyList = [ + 'm00', 'm01', 'm02', + 'm03', 'm04', 'm05', + 'm06', 'm07', 'm08', +]; +class Mat3PinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value[this.detail.key] = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new Mat3PinAction(this.pin, { + key: this.detail.key, + source: this.detail.target, + target: this.detail.source, + }); + } +} +class Mat3Pin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#c56c37'; + this.line = 'normal'; + this.details = { + value: { + m00: 0, m01: 0, m02: 0, + m03: 0, m04: 0, m05: 0, + m06: 0, m07: 0, m08: 0, + }, + }; + this.contentSlot = ``; + this.childrenSlot = [ + /*html*/ ``, + /*html*/ ``, + /*html*/ ``, + ]; + this.style = ` +.mat3 .slot-children { display: flex; } +.mat3 .slot-children > * { padding: 0 2px;} +.mat3 .slot-children ui-num-input { flex: 1; width: 0; color: white; } + `; + } + onInit() { + mat3KeyList.forEach((key) => { + const $el = this.refs[key]; + $el.value = this.details.value[key] + ''; + this.refs[key].addEventListener('confirm', () => { + if (!this.details) { + this.details = { + value: { + m00: 0, m01: 0, m02: 0, + m03: 0, m04: 0, m05: 0, + m06: 0, m07: 0, m08: 0, + }, + }; + } + const action = new Mat3PinAction(this, { + key, + source: this.details.value[key], + target: parseFloat($el.value), + }); + this.exec(action); + }); + }); + } + onUpdate() { + mat3KeyList.forEach((key) => { + const $el = this.refs[key]; + $el.value = this.details.value[key] + ''; + }); + } +} +Mat3Pin.type = 'mat3'; +(0, pin_1.declarePin)(Mat3Pin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLW1hdDMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJuYWwvcGluLW1hdDMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLGdDQUFvRDtBQVdwRCxNQUFNLFdBQVcsR0FBZ0I7SUFDN0IsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO0lBQ25CLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztJQUNuQixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7Q0FDdEIsQ0FBQztBQVVGLE1BQU0sYUFBYyxTQUFRLGVBSTFCO0lBRUUsSUFBSSxDQUFDLE1BRUo7UUFDRyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRixJQUFJLElBQUksRUFBRTtZQUNOLGFBQWE7WUFDYixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBZ0IsQ0FBQztZQUNsQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3hELEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNsQjtJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQy9CLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7WUFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUMxQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1NBQzdCLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBUSxTQUFRLFNBQWU7SUFBckM7O1FBR0ksVUFBSyxHQUFHLFNBQVMsQ0FBQztRQUNsQixTQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ2hCLFlBQU8sR0FBRztZQUNOLEtBQUssRUFBRTtnQkFDSCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2FBQ3pCO1NBQ0osQ0FBQztRQUVGLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGlCQUFZLEdBQUc7WUFDWCxRQUFRLENBQUEsdUhBQXVIO1lBQy9ILFFBQVEsQ0FBQSx1SEFBdUg7WUFDL0gsUUFBUSxDQUFBLHVIQUF1SDtTQUNsSSxDQUFDO1FBRUYsVUFBSyxHQUFHOzs7O0tBSVAsQ0FBQztJQWtDTixDQUFDO0lBaENHLE1BQU07UUFDRixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFCLENBQUM7WUFDL0MsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFekMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDZixJQUFJLENBQUMsT0FBTyxHQUFHO3dCQUNYLEtBQUssRUFBRTs0QkFDSCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7NEJBQ3RCLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQzs0QkFDdEIsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO3lCQUN6QjtxQkFDSixDQUFDO2lCQUNMO2dCQUVELE1BQU0sTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksRUFBRTtvQkFDbkMsR0FBRztvQkFDSCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUMvQixNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7aUJBQ2hDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUTtRQUNKLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsQ0FBQztZQUMvQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O0FBeERNLFlBQUksR0FBRyxNQUFNLENBQUM7QUEwRHpCLElBQUEsZ0JBQVUsRUFBQyxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUgeyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi9mb3JnZSc7XG5pbXBvcnQgeyBQaW4sIGRlY2xhcmVQaW4sIFBpbkFjdGlvbiB9IGZyb20gJy4uL3Bpbic7XG5cbi8qKlxuICogVmVjNFxuICog5biD5bCU57G75Z6L55qE5byV6ISaXG4gKi9cbnR5cGUgTWF0M0tleUxpc3QgPSBbXG4gICAgJ20wMCcsICdtMDEnLCAnbTAyJyxcbiAgICAnbTAzJywgJ20wNCcsICdtMDUnLFxuICAgICdtMDYnLCAnbTA3JywgJ20wOCcsXG5dO1xuY29uc3QgbWF0M0tleUxpc3Q6IE1hdDNLZXlMaXN0ID0gW1xuICAgICdtMDAnLCAnbTAxJywgJ20wMicsXG4gICAgJ20wMycsICdtMDQnLCAnbTA1JyxcbiAgICAnbTA2JywgJ20wNycsICdtMDgnLFxuXTtcblxudHlwZSBNYXQzRGV0YWlsID0ge1xuICAgIHZhbHVlOiB7XG4gICAgICAgIG0wMDogbnVtYmVyLCBtMDE6IG51bWJlciwgbTAyOiBudW1iZXIsXG4gICAgICAgIG0wMzogbnVtYmVyLCBtMDQ6IG51bWJlciwgbTA1OiBudW1iZXIsXG4gICAgICAgIG0wNjogbnVtYmVyLCBtMDc6IG51bWJlciwgbTA4OiBudW1iZXIsXG4gICAgfTtcbn1cblxuY2xhc3MgTWF0M1BpbkFjdGlvbiBleHRlbmRzIFBpbkFjdGlvbjx7XG4gICAga2V5OiBrZXlvZiBNYXQzRGV0YWlsWyd2YWx1ZSddLFxuICAgIHNvdXJjZTogbnVtYmVyLFxuICAgIHRhcmdldDogbnVtYmVyLFxufT4ge1xuXG4gICAgZXhlYyhwYXJhbXM6IHtcbiAgICAgICAgZm9yZ2U6IEhUTUxHcmFwaEZvcmdlRWxlbWVudFxuICAgIH0pIHtcbiAgICAgICAgY29uc3QgJHBpbiA9IHBhcmFtcy5mb3JnZS5nZXRQaW5FbGVtZW50KHRoaXMuZGV0YWlsLmJsb2NrTmFtZSwgJ2lucHV0JywgdGhpcy5kZXRhaWwuaW5kZXgpO1xuICAgICAgICBpZiAoJHBpbikge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgcGluID0gJHBpbi5fX3BpbiBhcyBNYXQyUGluO1xuICAgICAgICAgICAgcGluLmRldGFpbHMudmFsdWVbdGhpcy5kZXRhaWwua2V5XSA9IHRoaXMuZGV0YWlsLnRhcmdldDtcbiAgICAgICAgICAgIHBpbi5vblVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV2ZXJ0QWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1hdDNQaW5BY3Rpb24odGhpcy5waW4sIHtcbiAgICAgICAgICAgIGtleTogdGhpcy5kZXRhaWwua2V5LFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLmRldGFpbC50YXJnZXQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZGV0YWlsLnNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5jbGFzcyBNYXQzUGluIGV4dGVuZHMgUGluPE1hdDNEZXRhaWw+IHtcbiAgICBzdGF0aWMgdHlwZSA9ICdtYXQzJztcblxuICAgIGNvbG9yID0gJyNjNTZjMzcnO1xuICAgIGxpbmUgPSAnbm9ybWFsJztcbiAgICBkZXRhaWxzID0ge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgbTAwOiAwLCBtMDE6IDAsIG0wMjogMCxcbiAgICAgICAgICAgIG0wMzogMCwgbTA0OiAwLCBtMDU6IDAsXG4gICAgICAgICAgICBtMDY6IDAsIG0wNzogMCwgbTA4OiAwLFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb250ZW50U2xvdCA9IC8qaHRtbCovYGA7XG4gICAgY2hpbGRyZW5TbG90ID0gW1xuICAgICAgICAvKmh0bWwqL2A8dWktbnVtLWlucHV0IHJlZj1cIm0wMFwiPjwvdWktbnVtLWlucHV0Pjx1aS1udW0taW5wdXQgcmVmPVwibTAxXCI+PC91aS1udW0taW5wdXQ+PHVpLW51bS1pbnB1dCByZWY9XCJtMDJcIj48L3VpLW51bS1pbnB1dD5gLFxuICAgICAgICAvKmh0bWwqL2A8dWktbnVtLWlucHV0IHJlZj1cIm0wM1wiPjwvdWktbnVtLWlucHV0Pjx1aS1udW0taW5wdXQgcmVmPVwibTA0XCI+PC91aS1udW0taW5wdXQ+PHVpLW51bS1pbnB1dCByZWY9XCJtMDVcIj48L3VpLW51bS1pbnB1dD5gLFxuICAgICAgICAvKmh0bWwqL2A8dWktbnVtLWlucHV0IHJlZj1cIm0wNlwiPjwvdWktbnVtLWlucHV0Pjx1aS1udW0taW5wdXQgcmVmPVwibTA3XCI+PC91aS1udW0taW5wdXQ+PHVpLW51bS1pbnB1dCByZWY9XCJtMDhcIj48L3VpLW51bS1pbnB1dD5gLFxuICAgIF07XG5cbiAgICBzdHlsZSA9IGBcbi5tYXQzIC5zbG90LWNoaWxkcmVuIHsgZGlzcGxheTogZmxleDsgfVxuLm1hdDMgLnNsb3QtY2hpbGRyZW4gPiAqIHsgcGFkZGluZzogMCAycHg7fVxuLm1hdDMgLnNsb3QtY2hpbGRyZW4gdWktbnVtLWlucHV0IHsgZmxleDogMTsgd2lkdGg6IDA7IGNvbG9yOiB3aGl0ZTsgfVxuICAgIGA7XG5cbiAgICBvbkluaXQoKSB7XG4gICAgICAgIG1hdDNLZXlMaXN0LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJGVsID0gdGhpcy5yZWZzW2tleV0gYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgICRlbC52YWx1ZSA9IHRoaXMuZGV0YWlscy52YWx1ZVtrZXldICsgJyc7XG5cbiAgICAgICAgICAgIHRoaXMucmVmc1trZXldLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbmZpcm0nLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRldGFpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtMDA6IDAsIG0wMTogMCwgbTAyOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0wMzogMCwgbTA0OiAwLCBtMDU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbTA2OiAwLCBtMDc6IDAsIG0wODogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gbmV3IE1hdDNQaW5BY3Rpb24odGhpcywge1xuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZXRhaWxzLnZhbHVlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogcGFyc2VGbG9hdCgkZWwudmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhlYyhhY3Rpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVXBkYXRlKCkge1xuICAgICAgICBtYXQzS2V5TGlzdC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICRlbCA9IHRoaXMucmVmc1trZXldIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICAkZWwudmFsdWUgPSB0aGlzLmRldGFpbHMudmFsdWVba2V5XSArICcnO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5kZWNsYXJlUGluKE1hdDNQaW4pO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-mat4.js b/extensions/shader-graph/dist/block-forge/internal/pin-mat4.js new file mode 100644 index 0000000..b6d95b4 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-mat4.js @@ -0,0 +1,87 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +const mat4KeyList = [ + 'm00', 'm01', 'm02', 'm03', + 'm04', 'm05', 'm06', 'm07', + 'm08', 'm09', 'm10', 'm11', + 'm12', 'm13', 'm14', 'm15', +]; +class Mat4PinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value[this.detail.key] = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new Mat4PinAction(this.pin, { + key: this.detail.key, + source: this.detail.target, + target: this.detail.source, + }); + } +} +class Mat4Pin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#c5ae37'; + this.line = 'normal'; + this.details = { + value: { + m00: 0, m01: 0, m02: 0, m03: 0, + m04: 0, m05: 0, m06: 0, m07: 0, + m08: 0, m09: 0, m10: 0, m11: 0, + m12: 0, m13: 0, m14: 0, m15: 0, + }, + }; + this.contentSlot = ``; + this.childrenSlot = [ + /*html*/ ``, + /*html*/ ``, + /*html*/ ``, + /*html*/ ``, + ]; + this.style = ` +.mat4 .slot-children { display: flex; } +.mat4 .slot-children > * { padding: 0 2px;} +.mat4 .slot-children ui-num-input { flex: 1; width: 0; color: white; } + `; + } + onInit() { + mat4KeyList.forEach((key) => { + const $el = this.refs[key]; + $el.value = this.details.value[key] + ''; + this.refs[key].addEventListener('confirm', () => { + if (!this.details) { + this.details = { + value: { + m00: 0, m01: 0, m02: 0, m03: 0, + m04: 0, m05: 0, m06: 0, m07: 0, + m08: 0, m09: 0, m10: 0, m11: 0, + m12: 0, m13: 0, m14: 0, m15: 0, + }, + }; + } + const action = new Mat4PinAction(this, { + key, + source: this.details.value[key], + target: parseFloat($el.value), + }); + this.exec(action); + }); + }); + } + onUpdate() { + mat4KeyList.forEach((key) => { + const $el = this.refs[key]; + $el.value = this.details.value[key] + ''; + }); + } +} +Mat4Pin.type = 'mat4'; +(0, pin_1.declarePin)(Mat4Pin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLW1hdDQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJuYWwvcGluLW1hdDQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLGdDQUFvRDtBQVlwRCxNQUFNLFdBQVcsR0FBZ0I7SUFDN0IsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztJQUMxQixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO0lBQzFCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7SUFDMUIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztDQUM3QixDQUFDO0FBV0YsTUFBTSxhQUFjLFNBQVEsZUFJMUI7SUFFRSxJQUFJLENBQUMsTUFFSjtRQUNHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNGLElBQUksSUFBSSxFQUFFO1lBQ04sYUFBYTtZQUNiLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFnQixDQUFDO1lBQ2xDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDeEQsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2xCO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDL0IsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRztZQUNwQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQzFCLE1BQU0sRUFB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QUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O0FBMURNLFlBQUksR0FBRyxNQUFNLENBQUM7QUE0RHpCLElBQUEsZ0JBQVUsRUFBQyxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUgeyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi9mb3JnZSc7XG5pbXBvcnQgeyBQaW4sIGRlY2xhcmVQaW4sIFBpbkFjdGlvbiB9IGZyb20gJy4uL3Bpbic7XG5cbi8qKlxuICogVmVjNFxuICog5biD5bCU57G75Z6L55qE5byV6ISaXG4gKi9cbnR5cGUgTWF0NEtleUxpc3QgPSBbXG4gICAgJ20wMCcsICdtMDEnLCAnbTAyJywgJ20wMycsXG4gICAgJ20wNCcsICdtMDUnLCAnbTA2JywgJ20wNycsXG4gICAgJ20wOCcsICdtMDknLCAnbTEwJywgJ20xMScsXG4gICAgJ20xMicsICdtMTMnLCAnbTE0JywgJ20xNScsXG5dO1xuY29uc3QgbWF0NEtleUxpc3Q6IE1hdDRLZXlMaXN0ID0gW1xuICAgICdtMDAnLCAnbTAxJywgJ20wMicsICdtMDMnLFxuICAgICdtMDQnLCAnbTA1JywgJ20wNicsICdtMDcnLFxuICAgICdtMDgnLCAnbTA5JywgJ20xMCcsICdtMTEnLFxuICAgICdtMTInLCAnbTEzJywgJ20xNCcsICdtMTUnLFxuXTtcblxudHlwZSBNYXQ0RGV0YWlsID0ge1xuICAgIHZhbHVlOiB7XG4gICAgICAgIG0wMDogbnVtYmVyLCBtMDE6IG51bWJlciwgbTAyOiBudW1iZXIsIG0wMzogbnVtYmVyLFxuICAgICAgICBtMDQ6IG51bWJlciwgbTA1OiBudW1iZXIsIG0wNjogbnVtYmVyLCBtMDc6IG51bWJlcixcbiAgICAgICAgbTA4OiBudW1iZXIsIG0wOTogbnVtYmVyLCBtMTA6IG51bWJlciwgbTExOiBudW1iZXIsXG4gICAgICAgIG0xMjogbnVtYmVyLCBtMTM6IG51bWJlciwgbTE0OiBudW1iZXIsIG0xNTogbnVtYmVyLFxuICAgIH07XG59XG5cbmNsYXNzIE1hdDRQaW5BY3Rpb24gZXh0ZW5kcyBQaW5BY3Rpb248e1xuICAgIGtleToga2V5b2YgTWF0NERldGFpbFsndmFsdWUnXSxcbiAgICBzb3VyY2U6IG51bWJlcixcbiAgICB0YXJnZXQ6IG51bWJlcixcbn0+IHtcblxuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0ICRwaW4gPSBwYXJhbXMuZm9yZ2UuZ2V0UGluRWxlbWVudCh0aGlzLmRldGFpbC5ibG9ja05hbWUsICdpbnB1dCcsIHRoaXMuZGV0YWlsLmluZGV4KTtcbiAgICAgICAgaWYgKCRwaW4pIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9ICRwaW4uX19waW4gYXMgTWF0MlBpbjtcbiAgICAgICAgICAgIHBpbi5kZXRhaWxzLnZhbHVlW3RoaXMuZGV0YWlsLmtleV0gPSB0aGlzLmRldGFpbC50YXJnZXQ7XG4gICAgICAgICAgICBwaW4ub25VcGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldmVydEFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXQ0UGluQWN0aW9uKHRoaXMucGluLCB7XG4gICAgICAgICAgICBrZXk6IHRoaXMuZGV0YWlsLmtleSxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZXRhaWwudGFyZ2V0LFxuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmRldGFpbC5zb3VyY2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuY2xhc3MgTWF0NFBpbiBleHRlbmRzIFBpbjxNYXQ0RGV0YWlsPiB7XG4gICAgc3RhdGljIHR5cGUgPSAnbWF0NCc7XG5cbiAgICBjb2xvciA9ICcjYzVhZTM3JztcbiAgICBsaW5lID0gJ25vcm1hbCc7XG4gICAgZGV0YWlscyA9IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIG0wMDogMCwgbTAxOiAwLCBtMDI6IDAsIG0wMzogMCxcbiAgICAgICAgICAgIG0wNDogMCwgbTA1OiAwLCBtMDY6IDAsIG0wNzogMCxcbiAgICAgICAgICAgIG0wODogMCwgbTA5OiAwLCBtMTA6IDAsIG0xMTogMCxcbiAgICAgICAgICAgIG0xMjogMCwgbTEzOiAwLCBtMTQ6IDAsIG0xNTogMCxcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29udGVudFNsb3QgPSAvKmh0bWwqL2BgO1xuICAgIGNoaWxkcmVuU2xvdCA9IFtcbiAgICAgICAgLypodG1sKi9gPHVpLW51bS1pbnB1dCByZWY9XCJtMDBcIj48L3VpLW51bS1pbnB1dD48dWktbnVtLWlucHV0IHJlZj1cIm0wMVwiPjwvdWktbnVtLWlucHV0Pjx1aS1udW0taW5wdXQgcmVmPVwibTAyXCI+PC91aS1udW0taW5wdXQ+PHVpLW51bS1pbnB1dCByZWY9XCJtMDNcIj48L3VpLW51bS1pbnB1dD5gLFxuICAgICAgICAvKmh0bWwqL2A8dWktbnVtLWlucHV0IHJlZj1cIm0wNFwiPjwvdWktbnVtLWlucHV0Pjx1aS1udW0taW5wdXQgcmVmPVwibTA1XCI+PC91aS1udW0taW5wdXQ+PHVpLW51bS1pbnB1dCByZWY9XCJtMDZcIj48L3VpLW51bS1pbnB1dD48dWktbnVtLWlucHV0IHJlZj1cIm0wN1wiPjwvdWktbnVtLWlucHV0PmAsXG4gICAgICAgIC8qaHRtbCovYDx1aS1udW0taW5wdXQgcmVmPVwibTA4XCI+PC91aS1udW0taW5wdXQ+PHVpLW51bS1pbnB1dCByZWY9XCJtMDlcIj48L3VpLW51bS1pbnB1dD48dWktbnVtLWlucHV0IHJlZj1cIm0xMFwiPjwvdWktbnVtLWlucHV0Pjx1aS1udW0taW5wdXQgcmVmPVwibTExXCI+PC91aS1udW0taW5wdXQ+YCxcbiAgICAgICAgLypodG1sKi9gPHVpLW51bS1pbnB1dCByZWY9XCJtMTJcIj48L3VpLW51bS1pbnB1dD48dWktbnVtLWlucHV0IHJlZj1cIm0xM1wiPjwvdWktbnVtLWlucHV0Pjx1aS1udW0taW5wdXQgcmVmPVwibTE0XCI+PC91aS1udW0taW5wdXQ+PHVpLW51bS1pbnB1dCByZWY9XCJtMTVcIj48L3VpLW51bS1pbnB1dD5gLFxuICAgIF07XG5cbiAgICBzdHlsZSA9IGBcbi5tYXQ0IC5zbG90LWNoaWxkcmVuIHsgZGlzcGxheTogZmxleDsgfVxuLm1hdDQgLnNsb3QtY2hpbGRyZW4gPiAqIHsgcGFkZGluZzogMCAycHg7fVxuLm1hdDQgLnNsb3QtY2hpbGRyZW4gdWktbnVtLWlucHV0IHsgZmxleDogMTsgd2lkdGg6IDA7IGNvbG9yOiB3aGl0ZTsgfVxuICAgIGA7XG5cbiAgICBvbkluaXQoKSB7XG4gICAgICAgIG1hdDRLZXlMaXN0LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJGVsID0gdGhpcy5yZWZzW2tleV0gYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgICRlbC52YWx1ZSA9IHRoaXMuZGV0YWlscy52YWx1ZVtrZXldICsgJyc7XG5cbiAgICAgICAgICAgIHRoaXMucmVmc1trZXldLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbmZpcm0nLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRldGFpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtMDA6IDAsIG0wMTogMCwgbTAyOiAwLCBtMDM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbTA0OiAwLCBtMDU6IDAsIG0wNjogMCwgbTA3OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0wODogMCwgbTA5OiAwLCBtMTA6IDAsIG0xMTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtMTI6IDAsIG0xMzogMCwgbTE0OiAwLCBtMTU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBuZXcgTWF0NFBpbkFjdGlvbih0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLmRldGFpbHMudmFsdWVba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBwYXJzZUZsb2F0KCRlbC52YWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjKGFjdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25VcGRhdGUoKSB7XG4gICAgICAgIG1hdDRLZXlMaXN0LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJGVsID0gdGhpcy5yZWZzW2tleV0gYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgICRlbC52YWx1ZSA9IHRoaXMuZGV0YWlscy52YWx1ZVtrZXldICsgJyc7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmRlY2xhcmVQaW4oTWF0NFBpbik7XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-string.js b/extensions/shader-graph/dist/block-forge/internal/pin-string.js new file mode 100644 index 0000000..109e21f --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-string.js @@ -0,0 +1,60 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +const enum_1 = require("../enum"); +class StringPinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new StringPinAction(this.pin, { + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * String + * 字符串类型的引脚 + */ +class StringPin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#aec537'; + this.line = 'normal'; + this.details = { + value: '', + }; + this.contentSlot = ``; + this.childrenSlot = []; + this.style = ` +.string .slot-content ui-input { color: white; } + `; + } + onInit() { + const $input = this.refs.input; + $input.addEventListener('confirm', () => { + if (this.details.details?.registerEnumType) { + (0, enum_1.changeDynamicEnumValue)(this.details.details.registerEnumType, $input.value, this.details.value); + } + const action = new StringPinAction(this, { + source: this.details.value, + target: $input.value, + }); + this.exec(action); + }); + } + onUpdate() { + const $input = this.refs.input; + $input.value = this.details.value; + } +} +StringPin.type = 'string'; +(0, pin_1.declarePin)(StringPin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLXN0cmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9jay1mb3JnZS9pbnRlcm5hbC9waW4tc3RyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFHYixnQ0FBb0Q7QUFDcEQsa0NBQWlEO0FBU2pELE1BQU0sZUFBZ0IsU0FBUSxlQUc1QjtJQUVFLElBQUksQ0FBQyxNQUVKO1FBQ0csTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0YsSUFBSSxJQUFJLEVBQUU7WUFDTixhQUFhO1lBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQWlCLENBQUM7WUFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDdkMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2xCO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDakMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUMxQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1NBQzdCLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQUVEOzs7R0FHRztBQUNILE1BQU0sU0FBVSxTQUFRLFNBQXFCO0lBQTdDOztRQUdJLFVBQUssR0FBRyxTQUFTLENBQUM7UUFDbEIsU0FBSSxHQUFHLFFBQVEsQ0FBQztRQUNoQixZQUFPLEdBQXFCO1lBQ3hCLEtBQUssRUFBRSxFQUFFO1NBQ1osQ0FBQztRQUVGLGdCQUFXLEdBQVcsbUNBQW1DLENBQUM7UUFDMUQsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFFbEIsVUFBSyxHQUFHOztLQUVQLENBQUM7SUFxQk4sQ0FBQztJQW5CRyxNQUFNO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUF5QixDQUFDO1FBQ25ELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3hDLElBQUEsNkJBQXNCLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ25HO1lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFO2dCQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUMxQixNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUs7YUFDdkIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUF5QixDQUFDO1FBQ25ELE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQzs7QUFqQ00sY0FBSSxHQUFHLFFBQVEsQ0FBQztBQW1DM0IsSUFBQSxnQkFBVSxFQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7IEhUTUxHcmFwaEZvcmdlRWxlbWVudCB9IGZyb20gJy4uL2ZvcmdlJztcbmltcG9ydCB7IFBpbiwgZGVjbGFyZVBpbiwgUGluQWN0aW9uIH0gZnJvbSAnLi4vcGluJztcbmltcG9ydCB7IGNoYW5nZUR5bmFtaWNFbnVtVmFsdWUgfSBmcm9tICcuLi9lbnVtJztcblxudHlwZSBTdHJpbmdQaW50RGV0YWlsID0ge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgZGV0YWlscz86IHtcbiAgICAgICAgcmVnaXN0ZXJFbnVtVHlwZTogc3RyaW5nO1xuICAgIH1cbn1cblxuY2xhc3MgU3RyaW5nUGluQWN0aW9uIGV4dGVuZHMgUGluQWN0aW9uPHtcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICB0YXJnZXQ6IHN0cmluZyxcbn0+IHtcblxuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0ICRwaW4gPSBwYXJhbXMuZm9yZ2UuZ2V0UGluRWxlbWVudCh0aGlzLmRldGFpbC5ibG9ja05hbWUsICdpbnB1dCcsIHRoaXMuZGV0YWlsLmluZGV4KTtcbiAgICAgICAgaWYgKCRwaW4pIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9ICRwaW4uX19waW4gYXMgRmxvYXRQaW47XG4gICAgICAgICAgICBwaW4uZGV0YWlscy52YWx1ZSA9IHRoaXMuZGV0YWlsLnRhcmdldDtcbiAgICAgICAgICAgIHBpbi5vblVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV2ZXJ0QWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1BpbkFjdGlvbih0aGlzLnBpbiwge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmRldGFpbC50YXJnZXQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZGV0YWlsLnNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFN0cmluZ1xuICog5a2X56ym5Liy57G75Z6L55qE5byV6ISaXG4gKi9cbmNsYXNzIFN0cmluZ1BpbiBleHRlbmRzIFBpbjxTdHJpbmdQaW50RGV0YWlsPiB7XG4gICAgc3RhdGljIHR5cGUgPSAnc3RyaW5nJztcblxuICAgIGNvbG9yID0gJyNhZWM1MzcnO1xuICAgIGxpbmUgPSAnbm9ybWFsJztcbiAgICBkZXRhaWxzOiBTdHJpbmdQaW50RGV0YWlsID0ge1xuICAgICAgICB2YWx1ZTogJycsXG4gICAgfTtcblxuICAgIGNvbnRlbnRTbG90ID0gLypodG1sKi9gPHVpLWlucHV0IHJlZj1cImlucHV0XCI+PC91aS1pbnB1dD5gO1xuICAgIGNoaWxkcmVuU2xvdCA9IFtdO1xuXG4gICAgc3R5bGUgPSBgXG4uc3RyaW5nIC5zbG90LWNvbnRlbnQgdWktaW5wdXQgeyBjb2xvcjogd2hpdGU7IH1cbiAgICBgO1xuXG4gICAgb25Jbml0KCkge1xuICAgICAgICBjb25zdCAkaW5wdXQgPSB0aGlzLnJlZnMuaW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgJGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbmZpcm0nLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZXRhaWxzLmRldGFpbHM/LnJlZ2lzdGVyRW51bVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VEeW5hbWljRW51bVZhbHVlKHRoaXMuZGV0YWlscy5kZXRhaWxzLnJlZ2lzdGVyRW51bVR5cGUsICRpbnB1dC52YWx1ZSwgdGhpcy5kZXRhaWxzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gbmV3IFN0cmluZ1BpbkFjdGlvbih0aGlzLCB7XG4gICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLmRldGFpbHMudmFsdWUsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiAkaW5wdXQudmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXhlYyhhY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgJGlucHV0ID0gdGhpcy5yZWZzLmlucHV0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICRpbnB1dC52YWx1ZSA9IHRoaXMuZGV0YWlscy52YWx1ZTtcbiAgICB9XG59XG5kZWNsYXJlUGluKFN0cmluZ1Bpbik7XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-texture2D.js b/extensions/shader-graph/dist/block-forge/internal/pin-texture2D.js new file mode 100644 index 0000000..0973338 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-texture2D.js @@ -0,0 +1,88 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +class TexturePinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new TexturePinAction(this.pin, { + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Float + * 浮点类型的引脚 + */ +class Texture2DPin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#9691b2'; + this.line = 'normal'; + this.details = { + value: { + uuid: '', + }, + }; + this.style = ` + .image-preview { + width: 100%; + height: 100px; + background-color: black; + } + `; + this.contentSlot = ``; + this.childrenSlot = [ + ` + + + +`, + ]; + } + onInit() { + const $texture2D = this.refs.texture2D; + $texture2D.addEventListener('confirm', () => { + if (!this.details) { + this.details = { + value: { + uuid: $texture2D.value, + }, + }; + } + const action = new TexturePinAction(this, { + source: this.details.value, + target: { uuid: $texture2D.value }, + }); + this.exec(action); + }); + } + changeImagePreview(uuid) { + const $imagePreview = this.refs.imagePreview; + // @ts-ignore + $imagePreview.value = uuid; + if (uuid) { + this.refs.section.style.display = ''; + this.refs.section.setAttribute('expand', ''); + } + else { + this.refs.section.style.display = 'none'; + } + } + onUpdate() { + const $texture2D = this.refs.texture2D; + $texture2D.value = this.details.value.uuid; + this.changeImagePreview(this.details.value.uuid); + } +} +Texture2DPin.type = 'texture2D'; +(0, pin_1.declarePin)(Texture2DPin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLXRleHR1cmUyRC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9jay1mb3JnZS9pbnRlcm5hbC9waW4tdGV4dHVyZTJELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFHYixnQ0FBb0Q7QUFRcEQsTUFBTSxnQkFBaUIsU0FBUSxlQUc3QjtJQUVFLElBQUksQ0FBQyxNQUVKO1FBQ0csTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0YsSUFBSSxJQUFJLEVBQUU7WUFDTixhQUFhO1lBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQWlCLENBQUM7WUFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDdkMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2xCO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07U0FDN0IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxZQUFhLFNBQVEsU0FBb0I7SUFBL0M7O1FBR0ksVUFBSyxHQUFHLFNBQVMsQ0FBQztRQUNsQixTQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ2hCLFlBQU8sR0FBRztZQUNOLEtBQUssRUFBRTtnQkFDSCxJQUFJLEVBQUUsRUFBRTthQUNYO1NBQ0osQ0FBQztRQUVGLFVBQUssR0FBRzs7Ozs7O0tBTVAsQ0FBQztRQUVGLGdCQUFXLEdBQVcsaUZBQWlGLENBQUM7UUFDeEcsaUJBQVksR0FBRztZQUNYOzs7O0NBSVA7U0FDSSxDQUFDO0lBdUNOLENBQUM7SUFyQ0csTUFBTTtRQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBNkIsQ0FBQztRQUMzRCxVQUFVLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZixJQUFJLENBQUMsT0FBTyxHQUFHO29CQUNYLEtBQUssRUFBRTt3QkFDSCxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUs7cUJBQ3pCO2lCQUNKLENBQUM7YUFDTDtZQUVELE1BQU0sTUFBTSxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFO2dCQUN0QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUMxQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRTthQUNyQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVk7UUFDM0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDN0MsYUFBYTtRQUNiLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoRDthQUFNO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7U0FDNUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBNkIsQ0FBQztRQUMzRCxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUUzQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQzs7QUEvRE0saUJBQUksR0FBRyxXQUFXLENBQUM7QUFpRTlCLElBQUEsZ0JBQVUsRUFBQyxZQUFZLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUgeyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi9mb3JnZSc7XG5pbXBvcnQgeyBQaW4sIGRlY2xhcmVQaW4sIFBpbkFjdGlvbiB9IGZyb20gJy4uL3Bpbic7XG5cbnR5cGUgVGV4dHVyZTJERGV0YWlsID0ge1xuICAgIHZhbHVlOiB7XG4gICAgICAgIHV1aWQ6IHN0cmluZ1xuICAgIH07XG59O1xuXG5jbGFzcyBUZXh0dXJlUGluQWN0aW9uIGV4dGVuZHMgUGluQWN0aW9uPHtcbiAgICBzb3VyY2U6IFRleHR1cmUyRERldGFpbFsndmFsdWUnXSxcbiAgICB0YXJnZXQ6IFRleHR1cmUyRERldGFpbFsndmFsdWUnXSxcbn0+IHtcblxuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0ICRwaW4gPSBwYXJhbXMuZm9yZ2UuZ2V0UGluRWxlbWVudCh0aGlzLmRldGFpbC5ibG9ja05hbWUsICdpbnB1dCcsIHRoaXMuZGV0YWlsLmluZGV4KTtcbiAgICAgICAgaWYgKCRwaW4pIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9ICRwaW4uX19waW4gYXMgRmxvYXRQaW47XG4gICAgICAgICAgICBwaW4uZGV0YWlscy52YWx1ZSA9IHRoaXMuZGV0YWlsLnRhcmdldDtcbiAgICAgICAgICAgIHBpbi5vblVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV2ZXJ0QWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmVQaW5BY3Rpb24odGhpcy5waW4sIHtcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZXRhaWwudGFyZ2V0LFxuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmRldGFpbC5zb3VyY2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBGbG9hdFxuICog5rWu54K557G75Z6L55qE5byV6ISaXG4gKi9cbmNsYXNzIFRleHR1cmUyRFBpbiBleHRlbmRzIFBpbjxUZXh0dXJlMkREZXRhaWw+IHtcbiAgICBzdGF0aWMgdHlwZSA9ICd0ZXh0dXJlMkQnO1xuXG4gICAgY29sb3IgPSAnIzk2OTFiMic7XG4gICAgbGluZSA9ICdub3JtYWwnO1xuICAgIGRldGFpbHMgPSB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB1dWlkOiAnJyxcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgc3R5bGUgPSBgXG4gICAgICAgIC5pbWFnZS1wcmV2aWV3IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICB9XG4gICAgYDtcblxuICAgIGNvbnRlbnRTbG90ID0gLypodG1sKi9gPHVpLWFzc2V0IHN0eWxlPVwiZmxleDogMTtcIiByZWY9XCJ0ZXh0dXJlMkRcIiBkcm9wcGFibGU9XCJjYy5UZXh0dXJlMkRcIj48L3VpLWFzc2V0PmA7XG4gICAgY2hpbGRyZW5TbG90ID0gW1xuICAgICAgICBgXG48dWktc2VjdGlvbiByZWY9XCJzZWN0aW9uXCIgY2xhc3M9XCJjb25maWdcIj5cbiAgICA8dWktaW1hZ2UgY2xhc3M9XCJpbWFnZS1wcmV2aWV3XCIgcmVmPVwiaW1hZ2VQcmV2aWV3XCI+PC91aS1pbWFnZT5cbjwvdWktc2VjdGlvbj5cbmAsXG4gICAgXTtcblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgY29uc3QgJHRleHR1cmUyRCA9IHRoaXMucmVmcy50ZXh0dXJlMkQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgJHRleHR1cmUyRC5hZGRFdmVudExpc3RlbmVyKCdjb25maXJtJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRldGFpbHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiAkdGV4dHVyZTJELnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBUZXh0dXJlUGluQWN0aW9uKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuZGV0YWlscy52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHsgdXVpZDogJHRleHR1cmUyRC52YWx1ZSB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmV4ZWMoYWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlSW1hZ2VQcmV2aWV3KHV1aWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCAkaW1hZ2VQcmV2aWV3ID0gdGhpcy5yZWZzLmltYWdlUHJldmlldztcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAkaW1hZ2VQcmV2aWV3LnZhbHVlID0gdXVpZDtcbiAgICAgICAgaWYgKHV1aWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcy5zZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgICAgICAgIHRoaXMucmVmcy5zZWN0aW9uLnNldEF0dHJpYnV0ZSgnZXhwYW5kJywgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWZzLnNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVXBkYXRlKCkge1xuICAgICAgICBjb25zdCAkdGV4dHVyZTJEID0gdGhpcy5yZWZzLnRleHR1cmUyRCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAkdGV4dHVyZTJELnZhbHVlID0gdGhpcy5kZXRhaWxzLnZhbHVlLnV1aWQ7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VJbWFnZVByZXZpZXcodGhpcy5kZXRhaWxzLnZhbHVlLnV1aWQpO1xuICAgIH1cbn1cbmRlY2xhcmVQaW4oVGV4dHVyZTJEUGluKTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-textureCube.js b/extensions/shader-graph/dist/block-forge/internal/pin-textureCube.js new file mode 100644 index 0000000..f20e8b2 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-textureCube.js @@ -0,0 +1,62 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +class TexturePinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new TexturePinAction(this.pin, { + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Float + * 浮点类型的引脚 + */ +class TextureCubePin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#9691b2'; + this.line = 'normal'; + this.details = { + value: { + uuid: '', + }, + }; + this.contentSlot = ``; + this.childrenSlot = []; + } + onInit() { + const $texture2D = this.refs.textureCube; + $texture2D.addEventListener('confirm', () => { + if (!this.details) { + this.details = { + value: { + uuid: $texture2D.value, + }, + }; + } + const action = new TexturePinAction(this, { + source: this.details.value, + target: { uuid: $texture2D.value }, + }); + this.exec(action); + }); + } + onUpdate() { + const $texture2D = this.refs.textureCube; + $texture2D.value = this.details.value.uuid; + } +} +TextureCubePin.type = 'textureCube'; +(0, pin_1.declarePin)(TextureCubePin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLXRleHR1cmVDdWJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Jsb2NrLWZvcmdlL2ludGVybmFsL3Bpbi10ZXh0dXJlQ3ViZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsZ0NBQW9EO0FBUXBELE1BQU0sZ0JBQWlCLFNBQVEsZUFHN0I7SUFFRSxJQUFJLENBQUMsTUFFSjtRQUNHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNGLElBQUksSUFBSSxFQUFFO1lBQ04sYUFBYTtZQUNiLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFpQixDQUFDO1lBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNsQjtJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUMxQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1NBQzdCLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQUVEOzs7R0FHRztBQUNILE1BQU0sY0FBZSxTQUFRLFNBQXNCO0lBQW5EOztRQUdJLFVBQUssR0FBRyxTQUFTLENBQUM7UUFDbEIsU0FBSSxHQUFHLFFBQVEsQ0FBQztRQUNoQixZQUFPLEdBQUc7WUFDTixLQUFLLEVBQUU7Z0JBQ0gsSUFBSSxFQUFFLEVBQUU7YUFDWDtTQUNKLENBQUM7UUFFRixnQkFBVyxHQUFXLG9FQUFvRSxDQUFDO1FBQzNGLGlCQUFZLEdBQUcsRUFBRSxDQUFDO0lBeUJ0QixDQUFDO0lBdkJHLE1BQU07UUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQStCLENBQUM7UUFDN0QsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRztvQkFDWCxLQUFLLEVBQUU7d0JBQ0gsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLO3FCQUN6QjtpQkFDSixDQUFDO2FBQ0w7WUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRTtnQkFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDMUIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUU7YUFDckMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUErQixDQUFDO1FBQzdELFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQy9DLENBQUM7O0FBbkNNLG1CQUFJLEdBQUcsYUFBYSxDQUFDO0FBcUNoQyxJQUFBLGdCQUFVLEVBQUMsY0FBYyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHsgSFRNTEdyYXBoRm9yZ2VFbGVtZW50IH0gZnJvbSAnLi4vZm9yZ2UnO1xuaW1wb3J0IHsgUGluLCBkZWNsYXJlUGluLCBQaW5BY3Rpb24gfSBmcm9tICcuLi9waW4nO1xuXG50eXBlIFRleHR1cmVDdWJlRGV0YWlsID0ge1xuICAgIHZhbHVlOiB7XG4gICAgICAgIHV1aWQ6IHN0cmluZ1xuICAgIH07XG59O1xuXG5jbGFzcyBUZXh0dXJlUGluQWN0aW9uIGV4dGVuZHMgUGluQWN0aW9uPHtcbiAgICBzb3VyY2U6IFRleHR1cmVDdWJlRGV0YWlsWyd2YWx1ZSddLFxuICAgIHRhcmdldDogVGV4dHVyZUN1YmVEZXRhaWxbJ3ZhbHVlJ10sXG59PiB7XG5cbiAgICBleGVjKHBhcmFtczoge1xuICAgICAgICBmb3JnZTogSFRNTEdyYXBoRm9yZ2VFbGVtZW50XG4gICAgfSkge1xuICAgICAgICBjb25zdCAkcGluID0gcGFyYW1zLmZvcmdlLmdldFBpbkVsZW1lbnQodGhpcy5kZXRhaWwuYmxvY2tOYW1lLCAnaW5wdXQnLCB0aGlzLmRldGFpbC5pbmRleCk7XG4gICAgICAgIGlmICgkcGluKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBwaW4gPSAkcGluLl9fcGluIGFzIEZsb2F0UGluO1xuICAgICAgICAgICAgcGluLmRldGFpbHMudmFsdWUgPSB0aGlzLmRldGFpbC50YXJnZXQ7XG4gICAgICAgICAgICBwaW4ub25VcGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldmVydEFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlUGluQWN0aW9uKHRoaXMucGluLCB7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuZGV0YWlsLnRhcmdldCxcbiAgICAgICAgICAgIHRhcmdldDogdGhpcy5kZXRhaWwuc291cmNlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogRmxvYXRcbiAqIOa1rueCueexu+Wei+eahOW8leiEmlxuICovXG5jbGFzcyBUZXh0dXJlQ3ViZVBpbiBleHRlbmRzIFBpbjxUZXh0dXJlQ3ViZURldGFpbD4ge1xuICAgIHN0YXRpYyB0eXBlID0gJ3RleHR1cmVDdWJlJztcblxuICAgIGNvbG9yID0gJyM5NjkxYjInO1xuICAgIGxpbmUgPSAnbm9ybWFsJztcbiAgICBkZXRhaWxzID0ge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdXVpZDogJycsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnRlbnRTbG90ID0gLypodG1sKi9gPHVpLWFzc2V0IHJlZj1cInRleHR1cmVDdWJlXCIgZHJvcHBhYmxlPVwiY2MuVGV4dHVyZUN1YmVcIj48L3VpLWFzc2V0PmA7XG4gICAgY2hpbGRyZW5TbG90ID0gW107XG5cbiAgICBvbkluaXQoKSB7XG4gICAgICAgIGNvbnN0ICR0ZXh0dXJlMkQgPSB0aGlzLnJlZnMudGV4dHVyZUN1YmUgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgJHRleHR1cmUyRC5hZGRFdmVudExpc3RlbmVyKCdjb25maXJtJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRldGFpbHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiAkdGV4dHVyZTJELnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBUZXh0dXJlUGluQWN0aW9uKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuZGV0YWlscy52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHsgdXVpZDogJHRleHR1cmUyRC52YWx1ZSB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmV4ZWMoYWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25VcGRhdGUoKSB7XG4gICAgICAgIGNvbnN0ICR0ZXh0dXJlMkQgPSB0aGlzLnJlZnMudGV4dHVyZUN1YmUgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgJHRleHR1cmUyRC52YWx1ZSA9IHRoaXMuZGV0YWlscy52YWx1ZS51dWlkO1xuICAgIH1cbn1cbmRlY2xhcmVQaW4oVGV4dHVyZUN1YmVQaW4pO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-unknown.js b/extensions/shader-graph/dist/block-forge/internal/pin-unknown.js new file mode 100644 index 0000000..1cb0994 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-unknown.js @@ -0,0 +1,22 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +/** + * Unknown + * 未知类型的引脚 + */ +class UnknownPin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = ''; + this.line = 'normal'; + this.details = { + value: null, + }; + this.contentSlot = ``; + this.childrenSlot = []; + } +} +UnknownPin.type = 'unknown'; +(0, pin_1.declarePin)(UnknownPin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLXVua25vd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJuYWwvcGluLXVua25vd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLGdDQUFvRDtBQUVwRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVcsU0FBUSxTQUl4QjtJQUpEOztRQU9JLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxTQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ2hCLFlBQU8sR0FBRztZQUNOLEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQztRQUVGLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7O0FBVlUsZUFBSSxHQUFHLFNBQVMsQ0FBQztBQVc1QixJQUFBLGdCQUFVLEVBQUMsVUFBVSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IFBpbiwgZGVjbGFyZVBpbiwgUGluQWN0aW9uIH0gZnJvbSAnLi4vcGluJztcblxuLyoqXG4gKiBVbmtub3duXG4gKiDmnKrnn6XnsbvlnovnmoTlvJXohJpcbiAqL1xuY2xhc3MgVW5rbm93blBpbiBleHRlbmRzIFBpbjxcbntcbiAgICB2YWx1ZTogYW55O1xufVxuPiB7XG4gICAgc3RhdGljIHR5cGUgPSAndW5rbm93bic7XG5cbiAgICBjb2xvciA9ICcnO1xuICAgIGxpbmUgPSAnbm9ybWFsJztcbiAgICBkZXRhaWxzID0ge1xuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICB9O1xuXG4gICAgY29udGVudFNsb3QgPSAvKmh0bWwqL2BgO1xuICAgIGNoaWxkcmVuU2xvdCA9IFtdO1xufVxuZGVjbGFyZVBpbihVbmtub3duUGluKTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-vec2.js b/extensions/shader-graph/dist/block-forge/internal/pin-vec2.js new file mode 100644 index 0000000..bdae1d4 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-vec2.js @@ -0,0 +1,75 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +class Vec2PinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value[this.detail.key] = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new Vec2PinAction(this.pin, { + key: this.detail.key, + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Vec4 + * 布尔类型的引脚 + */ +class Vec2Pin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#D07979'; + this.line = 'normal'; + this.details = { + value: { + x: 0, y: 0, + }, + }; + this.contentSlot = ``; + this.childrenSlot = [ + /*html*/ ``, + ]; + this.style = ` +.vec2 .slot-children { display: flex; } +.vec2 .slot-children > * { padding: 0 2px;} +.vec2 .slot-children ui-num-input { flex: 1; width: 0; color: white; } + `; + } + onInit() { + const keys = ['x', 'y']; + keys.forEach((key) => { + const $el = this.refs[key]; + $el.value = this.details.value[key] + ''; + this.refs[key].addEventListener('confirm', () => { + if (!this.details) { + this.details = { value: { x: 0, y: 0 } }; + } + // this.details.value[key] = parseFloat($el.value); + const action = new Vec2PinAction(this, { + key, + source: this.details.value[key], + target: parseFloat($el.value), + }); + this.exec(action); + }); + }); + } + onUpdate() { + const keys = ['x', 'y']; + keys.forEach((key) => { + const $el = this.refs[key]; + $el.value = this.details.value[key] + ''; + }); + } +} +Vec2Pin.type = 'vec2'; +(0, pin_1.declarePin)(Vec2Pin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLXZlYzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJuYWwvcGluLXZlYzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLGdDQUFvRDtBQVNwRCxNQUFNLGFBQWMsU0FBUSxlQUkxQjtJQUVFLElBQUksQ0FBQyxNQUVKO1FBQ0csTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0YsSUFBSSxJQUFJLEVBQUU7WUFDTixhQUFhO1lBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQWdCLENBQUM7WUFDbEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN4RCxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbEI7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMvQixHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQVEsU0FBUSxTQUFrQjtJQUF4Qzs7UUFHSSxVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ2xCLFNBQUksR0FBRyxRQUFRLENBQUM7UUFDaEIsWUFBTyxHQUFHO1lBQ04sS0FBSyxFQUFFO2dCQUNILENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDYjtTQUNKLENBQUM7UUFFRixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUFHO1lBQ1gsUUFBUSxDQUFBLGdHQUFnRztTQUMzRyxDQUFDO1FBRUYsVUFBSyxHQUFHOzs7O0tBSVAsQ0FBQztJQStCTixDQUFDO0lBN0JHLE1BQU07UUFDRixNQUFNLElBQUksR0FBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFCLENBQUM7WUFDL0MsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFekMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDZixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztpQkFDNUM7Z0JBQ0QsbURBQW1EO2dCQUVuRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUU7b0JBQ25DLEdBQUc7b0JBQ0gsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztvQkFDL0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO2lCQUNoQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVE7UUFDSixNQUFNLElBQUksR0FBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFCLENBQUM7WUFDL0MsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQWpETSxZQUFJLEdBQUcsTUFBTSxDQUFDO0FBbUR6QixJQUFBLGdCQUFVLEVBQUMsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHsgSFRNTEdyYXBoRm9yZ2VFbGVtZW50IH0gZnJvbSAnLi4vZm9yZ2UnO1xuaW1wb3J0IHsgUGluLCBkZWNsYXJlUGluLCBQaW5BY3Rpb24gfSBmcm9tICcuLi9waW4nO1xuXG50eXBlIFZlYzJQaW5EZXRhaWwgPSB7XG4gICAgdmFsdWU6IHtcbiAgICAgICAgeDogbnVtYmVyLFxuICAgICAgICB5OiBudW1iZXIsXG4gICAgfTtcbn1cblxuY2xhc3MgVmVjMlBpbkFjdGlvbiBleHRlbmRzIFBpbkFjdGlvbjx7XG4gICAga2V5OiBrZXlvZiBWZWMyUGluRGV0YWlsWyd2YWx1ZSddLFxuICAgIHNvdXJjZTogbnVtYmVyLFxuICAgIHRhcmdldDogbnVtYmVyLFxufT4ge1xuXG4gICAgZXhlYyhwYXJhbXM6IHtcbiAgICAgICAgZm9yZ2U6IEhUTUxHcmFwaEZvcmdlRWxlbWVudFxuICAgIH0pIHtcbiAgICAgICAgY29uc3QgJHBpbiA9IHBhcmFtcy5mb3JnZS5nZXRQaW5FbGVtZW50KHRoaXMuZGV0YWlsLmJsb2NrTmFtZSwgJ2lucHV0JywgdGhpcy5kZXRhaWwuaW5kZXgpO1xuICAgICAgICBpZiAoJHBpbikge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgcGluID0gJHBpbi5fX3BpbiBhcyBNYXQyUGluO1xuICAgICAgICAgICAgcGluLmRldGFpbHMudmFsdWVbdGhpcy5kZXRhaWwua2V5XSA9IHRoaXMuZGV0YWlsLnRhcmdldDtcbiAgICAgICAgICAgIHBpbi5vblVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV2ZXJ0QWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IFZlYzJQaW5BY3Rpb24odGhpcy5waW4sIHtcbiAgICAgICAgICAgIGtleTogdGhpcy5kZXRhaWwua2V5LFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLmRldGFpbC50YXJnZXQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZGV0YWlsLnNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFZlYzRcbiAqIOW4g+WwlOexu+Wei+eahOW8leiEmlxuICovXG5jbGFzcyBWZWMyUGluIGV4dGVuZHMgUGluPFZlYzJQaW5EZXRhaWw+IHtcbiAgICBzdGF0aWMgdHlwZSA9ICd2ZWMyJztcblxuICAgIGNvbG9yID0gJyNEMDc5NzknO1xuICAgIGxpbmUgPSAnbm9ybWFsJztcbiAgICBkZXRhaWxzID0ge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgeDogMCwgeTogMCxcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29udGVudFNsb3QgPSAvKmh0bWwqL2BgO1xuICAgIGNoaWxkcmVuU2xvdCA9IFtcbiAgICAgICAgLypodG1sKi9gPHVpLW51bS1pbnB1dCByZWY9XCJ4XCIgbGFiZWw9XCJ4XCI+PC91aS1udW0taW5wdXQ+PHVpLW51bS1pbnB1dCByZWY9XCJ5XCIgbGFiZWw9XCJ5XCI+PC91aS1udW0taW5wdXQ+YCxcbiAgICBdO1xuXG4gICAgc3R5bGUgPSBgXG4udmVjMiAuc2xvdC1jaGlsZHJlbiB7IGRpc3BsYXk6IGZsZXg7IH1cbi52ZWMyIC5zbG90LWNoaWxkcmVuID4gKiB7IHBhZGRpbmc6IDAgMnB4O31cbi52ZWMyIC5zbG90LWNoaWxkcmVuIHVpLW51bS1pbnB1dCB7IGZsZXg6IDE7IHdpZHRoOiAwOyBjb2xvcjogd2hpdGU7IH1cbiAgICBgO1xuXG4gICAgb25Jbml0KCkge1xuICAgICAgICBjb25zdCBrZXlzOiBbJ3gnLCAneSddID0gWyd4JywgJ3knXTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICRlbCA9IHRoaXMucmVmc1trZXldIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICAkZWwudmFsdWUgPSB0aGlzLmRldGFpbHMudmFsdWVba2V5XSArICcnO1xuXG4gICAgICAgICAgICB0aGlzLnJlZnNba2V5XS5hZGRFdmVudExpc3RlbmVyKCdjb25maXJtJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlscyA9IHsgdmFsdWU6IHsgeDogMCwgeTogMCB9IH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHRoaXMuZGV0YWlscy52YWx1ZVtrZXldID0gcGFyc2VGbG9hdCgkZWwudmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gbmV3IFZlYzJQaW5BY3Rpb24odGhpcywge1xuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZXRhaWxzLnZhbHVlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogcGFyc2VGbG9hdCgkZWwudmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhlYyhhY3Rpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVXBkYXRlKCkge1xuICAgICAgICBjb25zdCBrZXlzOiBbJ3gnLCAneSddID0gWyd4JywgJ3knXTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICRlbCA9IHRoaXMucmVmc1trZXldIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICAkZWwudmFsdWUgPSB0aGlzLmRldGFpbHMudmFsdWVba2V5XSArICcnO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5kZWNsYXJlUGluKFZlYzJQaW4pO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-vec3.js b/extensions/shader-graph/dist/block-forge/internal/pin-vec3.js new file mode 100644 index 0000000..cfa5d81 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-vec3.js @@ -0,0 +1,75 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +class VecPinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value[this.detail.key] = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new VecPinAction(this.pin, { + key: this.detail.key, + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Vec3 + * 布尔类型的引脚 + */ +class Vec3Pin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#d0a279'; + this.line = 'normal'; + this.details = { + value: { + x: 0, y: 0, z: 0, + }, + }; + this.contentSlot = ``; + this.childrenSlot = [ + /*html*/ ``, + ]; + this.style = ` +.vec3 .slot-children { display: flex; } +.vec3 .slot-children > * { padding: 0 2px;} +.vec3 .slot-children ui-num-input { flex: 1; width: 0; color: white; } + `; + } + onInit() { + const keys = ['x', 'y', 'z']; + keys.forEach((key) => { + const $el = this.refs[key]; + $el.value = this.details.value[key] + ''; + this.refs[key].addEventListener('confirm', () => { + if (!this.details) { + this.details = { value: { x: 0, y: 0, z: 0 } }; + } + // this.details.value[key] = parseFloat($el.value); + const action = new VecPinAction(this, { + key, + source: this.details.value[key], + target: parseFloat($el.value), + }); + this.exec(action); + }); + }); + } + onUpdate() { + const keys = ['x', 'y', 'z']; + keys.forEach((key) => { + const $el = this.refs[key]; + $el.value = this.details.value[key] + ''; + }); + } +} +Vec3Pin.type = 'vec3'; +(0, pin_1.declarePin)(Vec3Pin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLXZlYzMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJuYWwvcGluLXZlYzMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLGdDQUFvRDtBQVVwRCxNQUFNLFlBQWEsU0FBUSxlQUl6QjtJQUVFLElBQUksQ0FBQyxNQUVKO1FBQ0csTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0YsSUFBSSxJQUFJLEVBQUU7WUFDTixhQUFhO1lBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQWdCLENBQUM7WUFDbEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN4RCxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbEI7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUM5QixHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQVEsU0FBUSxTQUFrQjtJQUF4Qzs7UUFHSSxVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ2xCLFNBQUksR0FBRyxRQUFRLENBQUM7UUFDaEIsWUFBTyxHQUFHO1lBQ04sS0FBSyxFQUFFO2dCQUNILENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzthQUNuQjtTQUNKLENBQUM7UUFFRixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUFHO1lBQ1gsUUFBUSxDQUFBLCtJQUErSTtTQUMxSixDQUFDO1FBRUYsVUFBSyxHQUFHOzs7O0tBSVAsQ0FBQztJQStCTixDQUFDO0lBN0JHLE1BQU07UUFDRixNQUFNLElBQUksR0FBb0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsQ0FBQztZQUMvQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUV6QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7aUJBQ2xEO2dCQUNELG1EQUFtRDtnQkFFbkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFO29CQUNsQyxHQUFHO29CQUNILE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7b0JBQy9CLE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztpQkFDaEMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxJQUFJLEdBQW9CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFCLENBQUM7WUFDL0MsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQWpETSxZQUFJLEdBQUcsTUFBTSxDQUFDO0FBbUR6QixJQUFBLGdCQUFVLEVBQUMsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHsgSFRNTEdyYXBoRm9yZ2VFbGVtZW50IH0gZnJvbSAnLi4vZm9yZ2UnO1xuaW1wb3J0IHsgUGluLCBkZWNsYXJlUGluLCBQaW5BY3Rpb24gfSBmcm9tICcuLi9waW4nO1xuXG50eXBlIFZlYzNQaW5EZXRhaWwgPSB7XG4gICAgdmFsdWU6IHtcbiAgICAgICAgeDogbnVtYmVyLFxuICAgICAgICB5OiBudW1iZXIsXG4gICAgICAgIHo6IG51bWJlcixcbiAgICB9O1xufVxuXG5jbGFzcyBWZWNQaW5BY3Rpb24gZXh0ZW5kcyBQaW5BY3Rpb248e1xuICAgIGtleToga2V5b2YgVmVjM1BpbkRldGFpbFsndmFsdWUnXSxcbiAgICBzb3VyY2U6IG51bWJlcixcbiAgICB0YXJnZXQ6IG51bWJlcixcbn0+IHtcblxuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0ICRwaW4gPSBwYXJhbXMuZm9yZ2UuZ2V0UGluRWxlbWVudCh0aGlzLmRldGFpbC5ibG9ja05hbWUsICdpbnB1dCcsIHRoaXMuZGV0YWlsLmluZGV4KTtcbiAgICAgICAgaWYgKCRwaW4pIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9ICRwaW4uX19waW4gYXMgVmVjM1BpbjtcbiAgICAgICAgICAgIHBpbi5kZXRhaWxzLnZhbHVlW3RoaXMuZGV0YWlsLmtleV0gPSB0aGlzLmRldGFpbC50YXJnZXQ7XG4gICAgICAgICAgICBwaW4ub25VcGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldmVydEFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWNQaW5BY3Rpb24odGhpcy5waW4sIHtcbiAgICAgICAgICAgIGtleTogdGhpcy5kZXRhaWwua2V5LFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLmRldGFpbC50YXJnZXQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZGV0YWlsLnNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFZlYzNcbiAqIOW4g+WwlOexu+Wei+eahOW8leiEmlxuICovXG5jbGFzcyBWZWMzUGluIGV4dGVuZHMgUGluPFZlYzNQaW5EZXRhaWw+IHtcbiAgICBzdGF0aWMgdHlwZSA9ICd2ZWMzJztcblxuICAgIGNvbG9yID0gJyNkMGEyNzknO1xuICAgIGxpbmUgPSAnbm9ybWFsJztcbiAgICBkZXRhaWxzID0ge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgeDogMCwgeTogMCwgejogMCxcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29udGVudFNsb3QgPSAvKmh0bWwqL2BgO1xuICAgIGNoaWxkcmVuU2xvdCA9IFtcbiAgICAgICAgLypodG1sKi9gPHVpLW51bS1pbnB1dCByZWY9XCJ4XCIgbGFiZWw9XCJ4XCI+PC91aS1udW0taW5wdXQ+PHVpLW51bS1pbnB1dCByZWY9XCJ5XCIgbGFiZWw9XCJ5XCI+PC91aS1udW0taW5wdXQ+PHVpLW51bS1pbnB1dCByZWY9XCJ6XCIgbGFiZWw9XCJ6XCI+PC91aS1udW0taW5wdXQ+YCxcbiAgICBdO1xuXG4gICAgc3R5bGUgPSBgXG4udmVjMyAuc2xvdC1jaGlsZHJlbiB7IGRpc3BsYXk6IGZsZXg7IH1cbi52ZWMzIC5zbG90LWNoaWxkcmVuID4gKiB7IHBhZGRpbmc6IDAgMnB4O31cbi52ZWMzIC5zbG90LWNoaWxkcmVuIHVpLW51bS1pbnB1dCB7IGZsZXg6IDE7IHdpZHRoOiAwOyBjb2xvcjogd2hpdGU7IH1cbiAgICBgO1xuXG4gICAgb25Jbml0KCkge1xuICAgICAgICBjb25zdCBrZXlzOiBbJ3gnLCAneScsICd6J10gPSBbJ3gnLCAneScsICd6J107XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkZWwgPSB0aGlzLnJlZnNba2V5XSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgICAgJGVsLnZhbHVlID0gdGhpcy5kZXRhaWxzLnZhbHVlW2tleV0gKyAnJztcblxuICAgICAgICAgICAgdGhpcy5yZWZzW2tleV0uYWRkRXZlbnRMaXN0ZW5lcignY29uZmlybScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbHMgPSB7IHZhbHVlOiB7IHg6IDAsIHk6IDAsIHo6IDAgfSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB0aGlzLmRldGFpbHMudmFsdWVba2V5XSA9IHBhcnNlRmxvYXQoJGVsLnZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBWZWNQaW5BY3Rpb24odGhpcywge1xuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZXRhaWxzLnZhbHVlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogcGFyc2VGbG9hdCgkZWwudmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhlYyhhY3Rpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVXBkYXRlKCkge1xuICAgICAgICBjb25zdCBrZXlzOiBbJ3gnLCAneScsICd6J10gPSBbJ3gnLCAneScsICd6J107XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkZWwgPSB0aGlzLnJlZnNba2V5XSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgICAgJGVsLnZhbHVlID0gdGhpcy5kZXRhaWxzLnZhbHVlW2tleV0gKyAnJztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZGVjbGFyZVBpbihWZWMzUGluKTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/internal/pin-vec4.js b/extensions/shader-graph/dist/block-forge/internal/pin-vec4.js new file mode 100644 index 0000000..3465e9f --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/internal/pin-vec4.js @@ -0,0 +1,77 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const pin_1 = require("../pin"); +class VecPinAction extends pin_1.PinAction { + exec(params) { + const $pin = params.forge.getPinElement(this.detail.blockName, 'input', this.detail.index); + if ($pin) { + // @ts-ignore + const pin = $pin.__pin; + pin.details.value[this.detail.key] = this.detail.target; + pin.onUpdate(); + } + } + revertAction() { + return new VecPinAction(this.pin, { + key: this.detail.key, + source: this.detail.target, + target: this.detail.source, + }); + } +} +/** + * Vec4 + * 布尔类型的引脚 + */ +class Vec4Pin extends pin_1.Pin { + constructor() { + super(...arguments); + this.color = '#d0c679'; + this.line = 'normal'; + this.details = { + value: { + x: 0, y: 0, + z: 0, w: 0, + }, + }; + this.contentSlot = ``; + this.childrenSlot = [ + /*html*/ ``, + /*html*/ ``, + ]; + this.style = ` +.vec4 .slot-children { display: flex; } +.vec4 .slot-children > * { padding: 0 2px;} +.vec4 .slot-children ui-num-input { flex: 1; width: 0; color: white; } + `; + } + onInit() { + const keys = ['x', 'y', 'z', 'w']; + keys.forEach((key) => { + const $el = this.refs[key]; + $el.value = this.details.value[key] + ''; + this.refs[key].addEventListener('confirm', () => { + if (!this.details) { + this.details = { value: { x: 0, y: 0, z: 0, w: 0 } }; + } + // this.details.value[key] = parseFloat($el.value); + const action = new VecPinAction(this, { + key, + source: this.details.value[key], + target: parseFloat($el.value), + }); + this.exec(action); + }); + }); + } + onUpdate() { + const keys = ['x', 'y', 'z', 'w']; + keys.forEach((key) => { + const $el = this.refs[key]; + $el.value = this.details.value[key] + ''; + }); + } +} +Vec4Pin.type = 'vec4'; +(0, pin_1.declarePin)(Vec4Pin); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLXZlYzQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvaW50ZXJuYWwvcGluLXZlYzQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLGdDQUFvRDtBQVdwRCxNQUFNLFlBQWEsU0FBUSxlQUl6QjtJQUVFLElBQUksQ0FBQyxNQUVKO1FBQ0csTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0YsSUFBSSxJQUFJLEVBQUU7WUFDTixhQUFhO1lBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQWdCLENBQUM7WUFDbEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN4RCxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbEI7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUM5QixHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQVEsU0FBUSxTQUFrQjtJQUF4Qzs7UUFHSSxVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ2xCLFNBQUksR0FBRyxRQUFRLENBQUM7UUFDaEIsWUFBTyxHQUFHO1lBQ04sS0FBSyxFQUFFO2dCQUNILENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ1YsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzthQUNiO1NBQ0osQ0FBQztRQUVGLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGlCQUFZLEdBQUc7WUFDWCxRQUFRLENBQUEsaUZBQWlGO1lBQ3pGLFFBQVEsQ0FBQSxpRkFBaUY7U0FDNUYsQ0FBQztRQUVGLFVBQUssR0FBRzs7OztLQUlQLENBQUM7SUErQk4sQ0FBQztJQTdCRyxNQUFNO1FBQ0YsTUFBTSxJQUFJLEdBQXlCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFxQixDQUFDO1lBQy9DLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRXpDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2lCQUN4RDtnQkFDRCxtREFBbUQ7Z0JBRW5ELE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksRUFBRTtvQkFDbEMsR0FBRztvQkFDSCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUMvQixNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7aUJBQ2hDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUTtRQUNKLE1BQU0sSUFBSSxHQUF5QixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsQ0FBQztZQUMvQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O0FBbkRNLFlBQUksR0FBRyxNQUFNLENBQUM7QUFxRHpCLElBQUEsZ0JBQVUsRUFBQyxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUgeyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi9mb3JnZSc7XG5pbXBvcnQgeyBQaW4sIGRlY2xhcmVQaW4sIFBpbkFjdGlvbiB9IGZyb20gJy4uL3Bpbic7XG5cbnR5cGUgVmVjNFBpbkRldGFpbCA9IHtcbiAgICB2YWx1ZToge1xuICAgICAgICB4OiBudW1iZXIsXG4gICAgICAgIHk6IG51bWJlcixcbiAgICAgICAgejogbnVtYmVyLFxuICAgICAgICB3OiBudW1iZXIsXG4gICAgfTtcbn1cblxuY2xhc3MgVmVjUGluQWN0aW9uIGV4dGVuZHMgUGluQWN0aW9uPHtcbiAgICBrZXk6IGtleW9mIFZlYzRQaW5EZXRhaWxbJ3ZhbHVlJ10sXG4gICAgc291cmNlOiBudW1iZXIsXG4gICAgdGFyZ2V0OiBudW1iZXIsXG59PiB7XG5cbiAgICBleGVjKHBhcmFtczoge1xuICAgICAgICBmb3JnZTogSFRNTEdyYXBoRm9yZ2VFbGVtZW50XG4gICAgfSkge1xuICAgICAgICBjb25zdCAkcGluID0gcGFyYW1zLmZvcmdlLmdldFBpbkVsZW1lbnQodGhpcy5kZXRhaWwuYmxvY2tOYW1lLCAnaW5wdXQnLCB0aGlzLmRldGFpbC5pbmRleCk7XG4gICAgXG4gICAgICAgIGlmICgkcGluKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBwaW4gPSAkcGluLl9fcGluIGFzIFZlYzRQaW47XG4gICAgICAgICAgICBwaW4uZGV0YWlscy52YWx1ZVt0aGlzLmRldGFpbC5rZXldID0gdGhpcy5kZXRhaWwudGFyZ2V0O1xuICAgICAgICAgICAgcGluLm9uVXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXZlcnRBY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmVjUGluQWN0aW9uKHRoaXMucGluLCB7XG4gICAgICAgICAgICBrZXk6IHRoaXMuZGV0YWlsLmtleSxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZXRhaWwudGFyZ2V0LFxuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmRldGFpbC5zb3VyY2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBWZWM0XG4gKiDluIPlsJTnsbvlnovnmoTlvJXohJpcbiAqL1xuY2xhc3MgVmVjNFBpbiBleHRlbmRzIFBpbjxWZWM0UGluRGV0YWlsPiB7XG4gICAgc3RhdGljIHR5cGUgPSAndmVjNCc7XG5cbiAgICBjb2xvciA9ICcjZDBjNjc5JztcbiAgICBsaW5lID0gJ25vcm1hbCc7XG4gICAgZGV0YWlscyA9IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHg6IDAsIHk6IDAsXG4gICAgICAgICAgICB6OiAwLCB3OiAwLFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb250ZW50U2xvdCA9IC8qaHRtbCovYGA7XG4gICAgY2hpbGRyZW5TbG90ID0gW1xuICAgICAgICAvKmh0bWwqL2A8dWktbnVtLWlucHV0IHJlZj1cInhcIiBsYWJlbD1cInhcIj48L3VpLW51bS1pbnB1dD48dWktbnVtLWlucHV0IHJlZj1cInlcIiBsYWJlbD1cInlcIj5gLFxuICAgICAgICAvKmh0bWwqL2A8dWktbnVtLWlucHV0IHJlZj1cInpcIiBsYWJlbD1cInpcIj48L3VpLW51bS1pbnB1dD48dWktbnVtLWlucHV0IHJlZj1cIndcIiBsYWJlbD1cIndcIj5gLFxuICAgIF07XG5cbiAgICBzdHlsZSA9IGBcbi52ZWM0IC5zbG90LWNoaWxkcmVuIHsgZGlzcGxheTogZmxleDsgfVxuLnZlYzQgLnNsb3QtY2hpbGRyZW4gPiAqIHsgcGFkZGluZzogMCAycHg7fVxuLnZlYzQgLnNsb3QtY2hpbGRyZW4gdWktbnVtLWlucHV0IHsgZmxleDogMTsgd2lkdGg6IDA7IGNvbG9yOiB3aGl0ZTsgfVxuICAgIGA7XG5cbiAgICBvbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGtleXM6IFsneCcsICd5JywgJ3onLCAndyddID0gWyd4JywgJ3knLCAneicsICd3J107XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkZWwgPSB0aGlzLnJlZnNba2V5XSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgICAgJGVsLnZhbHVlID0gdGhpcy5kZXRhaWxzLnZhbHVlW2tleV0gKyAnJztcblxuICAgICAgICAgICAgdGhpcy5yZWZzW2tleV0uYWRkRXZlbnRMaXN0ZW5lcignY29uZmlybScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbHMgPSB7IHZhbHVlOiB7IHg6IDAsIHk6IDAsIHo6IDAsIHc6IDAgfSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB0aGlzLmRldGFpbHMudmFsdWVba2V5XSA9IHBhcnNlRmxvYXQoJGVsLnZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBWZWNQaW5BY3Rpb24odGhpcywge1xuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZXRhaWxzLnZhbHVlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogcGFyc2VGbG9hdCgkZWwudmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhlYyhhY3Rpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVXBkYXRlKCkge1xuICAgICAgICBjb25zdCBrZXlzOiBbJ3gnLCAneScsICd6JywgJ3cnXSA9IFsneCcsICd5JywgJ3onLCAndyddO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJGVsID0gdGhpcy5yZWZzW2tleV0gYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgICRlbC52YWx1ZSA9IHRoaXMuZGV0YWlscy52YWx1ZVtrZXldICsgJyc7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmRlY2xhcmVQaW4oVmVjNFBpbik7XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/module/forge.js b/extensions/shader-graph/dist/block-forge/module/forge.js new file mode 100644 index 0000000..92a4c7d --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/module/forge.js @@ -0,0 +1,148 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Pin = exports.PinD = exports.Block = exports.Graph = exports.Forge = void 0; +const block_1 = require("../block"); +const graphWeakMap = new WeakMap(); +const blockWeakMap = new WeakMap(); +const pinWeakMap = new WeakMap(); +class Forge { + constructor(graph) { + this.rootGraphData = graph; + } + get details() { + return this.rootGraphData.details; + } + getGraph() { + const graphData = this.rootGraphData; + if (!graphWeakMap.has(graphData)) { + graphWeakMap.set(graphData, new Graph(graphData)); + } + return graphWeakMap.get(graphData); + } +} +exports.Forge = Forge; +class Graph { + constructor(graph) { + this.graph = graph; + // 生成数据 + this.getBlockMap(); + // 整理 line 数据 + const nodeMap = this.graph.nodes; + const lineMap = this.graph.lines; + for (const uuid in lineMap) { + const line = lineMap[uuid]; + const inputNode = nodeMap[line.input.node]; + const outputNode = nodeMap[line.output.node]; + const inputBlock = blockWeakMap.get(inputNode); + const outputBlock = blockWeakMap.get(outputNode); + inputBlock?.getOutputPinsList(); + outputBlock?.getInputPinsList(); + const inputPin = inputBlock?.getOutputPin(line.input.param); + const outPin = outputBlock?.getInputPin(line.output.param); + if (outPin) { + inputPin.connectPins.push(outPin); + } + if (inputPin) { + outPin.connectPins.push(inputPin); + } + } + } + get details() { + return this.graph.details; + } + getSubGraphMap() { + const data = {}; + for (const uuid in this.graph.graphs) { + const graphData = this.graph.graphs[uuid]; + if (!graphWeakMap.has(graphData)) { + graphWeakMap.set(graphData, new Graph(graphData)); + } + const graph = graphWeakMap.get(graphData); + data[uuid] = graph; + } + return data; + } + getBlockMap() { + const data = {}; + for (const uuid in this.graph.nodes) { + const blockData = this.graph.nodes[uuid]; + if (!blockWeakMap.has(blockData)) { + blockWeakMap.set(blockData, new Block(this, uuid, blockData)); + } + const block = blockWeakMap.get(blockData); + data[uuid] = block; + } + return data; + } +} +exports.Graph = Graph; +class Block { + constructor(graph, uuid, block) { + this.graph = graph; + this.uuid = uuid; + this.block = block; + this.desc = block_1.blockMap.get(this.block.type); + this.getInputPinsList(); + this.getOutputPinsList(); + } + get details() { + return this.block.details; + } + getInputPin(tag) { + const inputPins = this.desc?.inputPins || []; + for (let index = 0; index < inputPins.length; index++) { + const pinDesc = inputPins[index]; + if (pinDesc.tag === tag) { + const pin = this.block.details.inputPins[index]; + return pinWeakMap.get(pin); + } + } + } + getOutputPin(tag) { + const outputPins = this.desc?.outputPins || []; + for (let index = 0; index < outputPins.length; index++) { + const pin = outputPins[index]; + if (pin.tag === tag) { + const pin = this.block.details.outputPins[index]; + return pinWeakMap.get(pin); + } + } + } + getInputPinsList() { + const inputPins = this.block.details.inputPins || []; + const blockDesc = this.desc || { inputPins: [] }; + return inputPins.map((pinData, index) => { + if (!pinWeakMap.has(pinData)) { + pinWeakMap.set(pinData, new Pin(PinD.input, this, pinData, blockDesc.inputPins[index])); + } + return pinWeakMap.get(pinData); + }); + } + getOutputPinsList() { + const outputPins = this.block.details.outputPins || []; + const blockDesc = this.desc || { outputPins: [] }; + return outputPins.map((pinData, index) => { + if (!pinWeakMap.has(pinData)) { + pinWeakMap.set(pinData, new Pin(PinD.output, this, pinData, blockDesc.outputPins[index])); + } + return pinWeakMap.get(pinData); + }); + } +} +exports.Block = Block; +var PinD; +(function (PinD) { + PinD[PinD["input"] = 0] = "input"; + PinD[PinD["output"] = 1] = "output"; +})(PinD = exports.PinD || (exports.PinD = {})); +class Pin { + constructor(dir, block, pin, desc) { + this.connectPins = []; + this.type = dir; + this.block = block; + this.desc = desc; + this.value = pin; + } +} +exports.Pin = Pin; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvbW9kdWxlL2ZvcmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBSWIsb0NBQW9DO0FBRXBDLE1BQU0sWUFBWSxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzlELE1BQU0sWUFBWSxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzlELE1BQU0sVUFBVSxHQUEwQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRXhELE1BQWEsS0FBSztJQUdkLFlBQVksS0FBZ0I7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVE7UUFDSixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzlCLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNKO0FBbEJELHNCQWtCQztBQUVELE1BQWEsS0FBSztJQUdkLFlBQVksS0FBZ0I7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsT0FBTztRQUNQLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixhQUFhO1FBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFD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QUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0Y7WUFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFsRUQsc0JBa0VDO0FBRUQsSUFBWSxJQUdYO0FBSEQsV0FBWSxJQUFJO0lBQ1osaUNBQU8sQ0FBQTtJQUNQLG1DQUFRLENBQUE7QUFDWixDQUFDLEVBSFcsSUFBSSxHQUFKLFlBQUksS0FBSixZQUFJLFFBR2Y7QUFFRCxNQUFhLEdBQUc7SUFTWixZQUFZLEdBQVMsRUFBRSxLQUFZLEVBQUUsR0FBWSxFQUFFLElBQXFCO1FBRnhFLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBR3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLENBQUM7Q0FDSjtBQWZELGtCQWVDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7IEJsb2NrRGF0YSwgR3JhcGhEYXRhLCBQaW5EYXRhLCBJUGluRGVzY3JpcHRpb24sIElCbG9ja0Rlc2NyaXB0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgYmxvY2tNYXAgfSBmcm9tICcuLi9ibG9jayc7XG5cbmNvbnN0IGdyYXBoV2Vha01hcDogV2Vha01hcDxHcmFwaERhdGEsIEdyYXBoPiA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCBibG9ja1dlYWtNYXA6IFdlYWtNYXA8QmxvY2tEYXRhLCBCbG9jaz4gPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgcGluV2Vha01hcDogV2Vha01hcDxQaW5EYXRhLCBQaW4+ID0gbmV3IFdlYWtNYXAoKTtcblxuZXhwb3J0IGNsYXNzIEZvcmdlIHtcbiAgICByb290R3JhcGhEYXRhOiBHcmFwaERhdGE7XG5cbiAgICBjb25zdHJ1Y3RvcihncmFwaDogR3JhcGhEYXRhKSB7XG4gICAgICAgIHRoaXMucm9vdEdyYXBoRGF0YSA9IGdyYXBoO1xuICAgIH1cblxuICAgIGdldCBkZXRhaWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290R3JhcGhEYXRhLmRldGFpbHM7XG4gICAgfVxuXG4gICAgZ2V0R3JhcGgoKSB7XG4gICAgICAgIGNvbnN0IGdyYXBoRGF0YSA9IHRoaXMucm9vdEdyYXBoRGF0YTtcbiAgICAgICAgaWYgKCFncmFwaFdlYWtNYXAuaGFzKGdyYXBoRGF0YSkpIHtcbiAgICAgICAgICAgIGdyYXBoV2Vha01hcC5zZXQoZ3JhcGhEYXRhLCBuZXcgR3JhcGgoZ3JhcGhEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyYXBoV2Vha01hcC5nZXQoZ3JhcGhEYXRhKSE7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3JhcGgge1xuICAgIGdyYXBoOiBHcmFwaERhdGE7XG5cbiAgICBjb25zdHJ1Y3RvcihncmFwaDogR3JhcGhEYXRhKSB7XG4gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDtcblxuICAgICAgICAvLyDnlJ/miJDmlbDmja5cbiAgICAgICAgdGhpcy5nZXRCbG9ja01hcCgpO1xuXG4gICAgICAgIC8vIOaVtOeQhiBsaW5lIOaVsOaNrlxuICAgICAgICBjb25zdCBub2RlTWFwID0gdGhpcy5ncmFwaC5ub2RlcztcbiAgICAgICAgY29uc3QgbGluZU1hcCA9IHRoaXMuZ3JhcGgubGluZXM7XG4gICAgICAgIGZvciAoY29uc3QgdXVpZCBpbiBsaW5lTWFwKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gbGluZU1hcFt1dWlkXTtcblxuICAgICAgICAgICAgY29uc3QgaW5wdXROb2RlID0gbm9kZU1hcFtsaW5lLmlucHV0Lm5vZGVdO1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0Tm9kZSA9IG5vZGVNYXBbbGluZS5vdXRwdXQubm9kZV07XG5cbiAgICAgICAgICAgIGNvbnN0IGlucHV0QmxvY2sgPSBibG9ja1dlYWtNYXAuZ2V0KGlucHV0Tm9kZSk7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRCbG9jayA9IGJsb2NrV2Vha01hcC5nZXQob3V0cHV0Tm9kZSk7XG5cbiAgICAgICAgICAgIGlucHV0QmxvY2s/LmdldE91dHB1dFBpbnNMaXN0KCk7XG4gICAgICAgICAgICBvdXRwdXRCbG9jaz8uZ2V0SW5wdXRQaW5zTGlzdCgpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRQaW4gPSBpbnB1dEJsb2NrPy5nZXRPdXRwdXRQaW4obGluZS5pbnB1dC5wYXJhbSk7XG4gICAgICAgICAgICBjb25zdCBvdXRQaW4gPSBvdXRwdXRCbG9jaz8uZ2V0SW5wdXRQaW4obGluZS5vdXRwdXQucGFyYW0pO1xuXG4gICAgICAgICAgICBpZiAob3V0UGluKSB7XG4gICAgICAgICAgICAgICAgaW5wdXRQaW4hLmNvbm5lY3RQaW5zLnB1c2gob3V0UGluKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dFBpbikge1xuICAgICAgICAgICAgICAgIG91dFBpbiEuY29ubmVjdFBpbnMucHVzaChpbnB1dFBpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGV0YWlscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JhcGguZGV0YWlscztcbiAgICB9XG5cbiAgICBnZXRTdWJHcmFwaE1hcCgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogeyBbdXVpZDogc3RyaW5nXTogR3JhcGggfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHV1aWQgaW4gdGhpcy5ncmFwaC5ncmFwaHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyYXBoRGF0YSA9IHRoaXMuZ3JhcGguZ3JhcGhzW3V1aWRdO1xuICAgICAgICAgICAgaWYgKCFncmFwaFdlYWtNYXAuaGFzKGdyYXBoRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBncmFwaFdlYWtNYXAuc2V0KGdyYXBoRGF0YSwgbmV3IEdyYXBoKGdyYXBoRGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZ3JhcGggPSBncmFwaFdlYWtNYXAuZ2V0KGdyYXBoRGF0YSkhO1xuICAgICAgICAgICAgZGF0YVt1dWlkXSA9IGdyYXBoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGdldEJsb2NrTWFwKCkge1xuICAgICAgICBjb25zdCBkYXRhOiB7IFt1dWlkOiBzdHJpbmddOiBCbG9jayB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdXVpZCBpbiB0aGlzLmdyYXBoLm5vZGVzKSB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0RhdGEgPSB0aGlzLmdyYXBoLm5vZGVzW3V1aWRdO1xuICAgICAgICAgICAgaWYgKCFibG9ja1dlYWtNYXAuaGFzKGJsb2NrRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBibG9ja1dlYWtNYXAuc2V0KGJsb2NrRGF0YSwgbmV3IEJsb2NrKHRoaXMsIHV1aWQsIGJsb2NrRGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja1dlYWtNYXAuZ2V0KGJsb2NrRGF0YSkhO1xuICAgICAgICAgICAgZGF0YVt1dWlkXSA9IGJsb2NrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsb2NrIHtcbiAgICB1dWlkOiBzdHJpbmc7XG4gICAgZ3JhcGg6IEdyYXBoO1xuICAgIGJsb2NrOiBCbG9ja0RhdGE7XG4gICAgZGVzYz86IElCbG9ja0Rlc2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoZ3JhcGg6IEdyYXBoLCB1dWlkOiBzdHJpbmcsIGJsb2NrOiBCbG9ja0RhdGEpIHtcbiAgICAgICAgdGhpcy5ncmFwaCA9IGdyYXBoO1xuICAgICAgICB0aGlzLnV1aWQgPSB1dWlkO1xuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XG4gICAgICAgIHRoaXMuZGVzYyA9IGJsb2NrTWFwLmdldCh0aGlzLmJsb2NrLnR5cGUpO1xuXG4gICAgICAgIHRoaXMuZ2V0SW5wdXRQaW5zTGlzdCgpO1xuICAgICAgICB0aGlzLmdldE91dHB1dFBpbnNMaXN0KCk7XG4gICAgfVxuXG4gICAgZ2V0IGRldGFpbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2NrLmRldGFpbHM7XG4gICAgfVxuXG4gICAgZ2V0SW5wdXRQaW4odGFnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgaW5wdXRQaW5zID0gdGhpcy5kZXNjPy5pbnB1dFBpbnMgfHwgW107XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGlucHV0UGlucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBpbkRlc2MgPSBpbnB1dFBpbnNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHBpbkRlc2MudGFnID09PSB0YWcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaW4gPSB0aGlzLmJsb2NrLmRldGFpbHMuaW5wdXRQaW5zIVtpbmRleF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBpbldlYWtNYXAuZ2V0KHBpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRPdXRwdXRQaW4odGFnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0UGlucyA9IHRoaXMuZGVzYz8ub3V0cHV0UGlucyB8fCBbXTtcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgb3V0cHV0UGlucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9IG91dHB1dFBpbnNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHBpbi50YWcgPT09IHRhZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpbiA9IHRoaXMuYmxvY2suZGV0YWlscy5vdXRwdXRQaW5zIVtpbmRleF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBpbldlYWtNYXAuZ2V0KHBpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJbnB1dFBpbnNMaXN0KCkge1xuICAgICAgICBjb25zdCBpbnB1dFBpbnMgPSB0aGlzLmJsb2NrLmRldGFpbHMuaW5wdXRQaW5zIHx8IFtdO1xuICAgICAgICBjb25zdCBibG9ja0Rlc2MgPSB0aGlzLmRlc2MgfHwge2lucHV0UGluczogW119O1xuXG4gICAgICAgIHJldHVybiBpbnB1dFBpbnMubWFwKChwaW5EYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwaW5XZWFrTWFwLmhhcyhwaW5EYXRhKSkge1xuICAgICAgICAgICAgICAgIHBpbldlYWtNYXAuc2V0KHBpbkRhdGEsIG5ldyBQaW4oUGluRC5pbnB1dCwgdGhpcywgcGluRGF0YSwgYmxvY2tEZXNjLmlucHV0UGluc1tpbmRleF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwaW5XZWFrTWFwLmdldChwaW5EYXRhKSE7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldE91dHB1dFBpbnNMaXN0KCkge1xuICAgICAgICBjb25zdCBvdXRwdXRQaW5zID0gdGhpcy5ibG9jay5kZXRhaWxzLm91dHB1dFBpbnMgfHwgW107XG4gICAgICAgIGNvbnN0IGJsb2NrRGVzYyA9IHRoaXMuZGVzYyB8fCB7b3V0cHV0UGluczogW119O1xuICAgICAgICByZXR1cm4gb3V0cHV0UGlucy5tYXAoKHBpbkRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBpbldlYWtNYXAuaGFzKHBpbkRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcGluV2Vha01hcC5zZXQocGluRGF0YSwgbmV3IFBpbihQaW5ELm91dHB1dCwgdGhpcywgcGluRGF0YSwgYmxvY2tEZXNjLm91dHB1dFBpbnNbaW5kZXhdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGluV2Vha01hcC5nZXQocGluRGF0YSkhO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIFBpbkQge1xuICAgICdpbnB1dCcsXG4gICAgJ291dHB1dCcsXG59XG5cbmV4cG9ydCBjbGFzcyBQaW4ge1xuICAgIGJsb2NrOiBCbG9jaztcbiAgICB2YWx1ZTogUGluRGF0YTtcbiAgICBkZXNjOiBJUGluRGVzY3JpcHRpb247XG5cbiAgICB0eXBlOiBQaW5EO1xuXG4gICAgY29ubmVjdFBpbnM6IFBpbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihkaXI6IFBpbkQsIGJsb2NrOiBCbG9jaywgcGluOiBQaW5EYXRhLCBkZXNjOiBJUGluRGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gZGlyO1xuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XG4gICAgICAgIHRoaXMuZGVzYyA9IGRlc2M7XG4gICAgICAgIHRoaXMudmFsdWUgPSBwaW47XG4gICAgfVxufVxuXG4vLyBzZXRUaW1lb3V0KCgpID0+IHtcblxuLy8gICAgIGNvbnN0IGZvcmdlID0gbmV3IEZvcmdlKGpzb24pO1xuXG4vLyAgICAgY29uc3QgaWdyYXBoID0gZm9yZ2UuZ2V0R3JhcGgoKTtcbi8vICAgICBjb25zdCBpYmxvY2tNYXAgPSBpZ3JhcGguZ2V0QmxvY2tNYXAoKTtcbi8vICAgICBjb25zdCBpaW5wdXRMaXN0ID0gaWJsb2NrTWFwW09iamVjdC5rZXlzKGlibG9ja01hcClbMF1dLmdldElucHV0UGluc0xpc3QoKTtcbi8vICAgICBpaW5wdXRMaXN0O1xuXG4vLyAgICAgY29uc3QgY29ubmVjdFBpbiA9IGlpbnB1dExpc3RbMF0uY29ubmVjdFBpbjtcblxuLy8gfSwgMjAwMCk7XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/pin.js b/extensions/shader-graph/dist/block-forge/pin.js new file mode 100644 index 0000000..6cc585b --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/pin.js @@ -0,0 +1,256 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.declarePin = exports.generateStyle = exports.generateInputPinHTML = exports.generateOutputPinHTML = exports.Pin = exports.PinAction = void 0; +const structures_1 = require("@itharbors/structures"); +const TYPE = {}; +class PinAction extends structures_1.Action { + // details: D & PinActionDetail; + constructor(pin, details) { + const cDetails = details; + cDetails.blockName = pin.pathData.blockName; + cDetails.index = pin.pathData.index; + super(cDetails); + // this.details = cDetails; + this.pin = pin; + } + exec(params) { + } + revertAction() { + return new PinAction(this.pin, {}); + } +} +exports.PinAction = PinAction; +class Pin { + constructor() { + this.color = 'white'; + this.line = ''; + this.style = ''; + this.pathData = { + blockName: '', + index: 0, + }; + this.refs = {}; + } + init(details, desc, blockName, index) { + this.details = details; + this.pathData.blockName = blockName; + this.pathData.index = index; + this.desc = desc; + } + exec(action) { + if (!this.$root) { + return; + } + const nodeRoot = this.$root.getRootNode(); + if (nodeRoot) { + nodeRoot.host.dispatch('dirty', { + detail: { + action, + }, + }); + } + } + onInit() { + } + onUpdate() { + } +} +exports.Pin = Pin; +Pin.type = 'unknown'; +// todo 考虑数据冲突 +function generateIcon(pin) { + if (pin.icon) { + return /*html*/ ``; + } + return ''; +} +function generateTitle(pin) { + if (pin.name) { + return /*html*/ `${pin.name}`; + } + return ''; +} +/** + * 生成 output pin 的 HTML + * @param pin + * @param details + * @returns + */ +function generateOutputPinHTML(pin, details) { + const type = pin.dataType; + const define = TYPE[type] || TYPE['unknown']; + const pinI = new define(); + const color = pinI.color ? `--param-color: ${pinI.color};` : ''; + const $pin = document.createElement('div'); + $pin.classList.add('pin'); + $pin.classList.add('out'); + $pin.classList.add(type + ''); + // @ts-ignore + $pin.__pin = pinI; + $pin.innerHTML = /*html*/ `${pinI.style ? `` : ''} +
+
+ ${generateTitle(pin)} + ${generateIcon(pin)} +
+
+ + `; + const $refList = $pin.querySelectorAll('[ref]'); + Array.prototype.forEach.call($refList, ($ref) => { + const ref = $ref.getAttribute('ref'); + if (ref) { + pinI.refs[ref] = $ref; + } + }); + pinI.details = details; + // pinI.onInit(); + // pinI.onUpdate(details); + return $pin; +} +exports.generateOutputPinHTML = generateOutputPinHTML; +/** + * 生成 input pin 的 HTML + * @param pin + * @param pinData + * @param blockName + * @param lineMap + * @returns + */ +function generateInputPinHTML(pin, pinDataList, index, blockName, lineMap) { + const type = pin.dataType; + const define = TYPE[type] || TYPE['unknown']; + const pinI = new define(); + const color = pinI.color ? `--param-color: ${pinI.color};` : ''; + let connected = false; + for (const id in lineMap) { + const line = lineMap[id]; + if (line && + line.output.node === blockName && + line.output.param === pin.tag) { + connected = true; + } + } + const $pin = document.createElement('div'); + $pin.classList.add('pin'); + $pin.classList.add('in'); + $pin.classList.add(type + ''); + // @ts-ignore + $pin.__pin = pinI; + $pin.innerHTML = /*html*/ `${pinI.style ? `` : ''} +
+
+ ${generateIcon(pin)} + ${generateTitle(pin)} +
+ ${pinI.contentSlot ? `
${pinI.contentSlot}
` : ''} +
+ + ${pinI.childrenSlot ? `
${pinI.childrenSlot.map(child => '
' + child + '
').join('')}
` : ''} + `; + const $refList = $pin.querySelectorAll('[ref]'); + Array.prototype.forEach.call($refList, ($ref) => { + const ref = $ref.getAttribute('ref'); + if (ref) { + pinI.refs[ref] = $ref; + } + }); + const pinData = pinDataList[index]; + pinI.init(pinData, pin, blockName, index); + pinI.$root = $pin; + pinI.onInit(); + pinI.onUpdate(); + return $pin; +} +exports.generateInputPinHTML = generateInputPinHTML; +/** + * 生成 pin 的样式代码 + * @param config + * @returns + */ +function generateStyle(blockDesc) { + return /*css*/ ` +.pin { + --param-color: #fff; + --line—margin: 6px; + + line-height: calc(var(--header-height) - 4px); + margin: var(--line—margin) 10px 0 10px; + position: relative; +} +.pin:last-child { + padding-bottom: var(--line—margin); +} +.pin.in { + +} +.pin.out { + text-align: right; +} +.pin.in > .point[hidden], .pin.out > .point[hidden] { + display: none; +} + +.pin.in > .point, .pin.out > .point { + display: block; + border: 1px solid var(--param-color); + transform: rotate(45deg); + width: 7px; + height: 7px; + position: absolute; + top: 6px; + transition: all 0.2s; + background: var(--background-color); + z-index: 1; + cursor: pointer; +} +.pin.in > .point { + left: -14px; +} +.pin.out > .point { + right: -14px; +} +.pin.in > .point:hover, +.pin.in > .point[active], +.pin.out > .point:hover, +.pin.out > .point[active] +{ + background: var(--param-color); +} + +.pin > .body { + display: flex; +} +.pin > .body > .name { + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.pin > .body > .name > .name { + padding: 0 6px; +} + +.pin > .body > .slot-content { + flex: 1; + display: flex; + width: 120px; +} + +.pin > .children, .pin > .children > div { + margin-top: calc(var(--line—margin) * 0.5); +} + +.pin > .body > .slot-content[hidden], .pin > .children[hidden] { + display: none; +} + `; +} +exports.generateStyle = generateStyle; +function declarePin(define) { + const type = define.type; + TYPE[type] = define; +} +exports.declarePin = declarePin; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jsb2NrLWZvcmdlL3Bpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7OztBQWFiLHNEQUcrQjtBQU0vQixNQUFNLElBQUksR0FFTixFQUFFLENBQUM7QUFPUCxNQUFhLFNBQXdCLFNBQVEsbUJBQTJCO0lBSXBFLGdDQUFnQztJQUVoQyxZQUFZLEdBQVEsRUFBRSxPQUFVO1FBQzVCLE1BQU0sUUFBUSxHQUFHLE9BQThCLENBQUM7UUFDaEQsUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUM1QyxRQUFRLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksQ0FBQyxNQUVKO0lBRUQsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNKO0FBeEJELDhCQXdCQztBQUVELE1BQWEsR0FBRztJQUFoQjtRQUdJLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFVBQUssR0FBRyxFQUFFLENBQUM7UUFHWCxhQUFRLEdBQUc7WUFDUCxTQUFTLEVBQUUsRUFBRTtZQUNiLEtBQUssRUFBRSxDQUFDO1NBQ1gsQ0FBQztRQU9GLFNBQUksR0FBbUMsRUFBRSxDQUFDO0lBK0I5QyxDQUFDO0lBNUJHLElBQUksQ0FBQyxPQUFVLEVBQUUsSUFBcUIsRUFBRSxTQUFpQixFQUFFLEtBQWE7UUFDcEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFB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QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDekI7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQixPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBckRELG9EQXFEQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsU0FBNEI7SUFDdEQsT0FBTyxPQUFPLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0E0RWIsQ0FBQztBQUNOLENBQUM7QUE5RUQsc0NBOEVDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLE1BQWtDO0lBQ3pELE1BQU0sSUFBSSxHQUFJLE1BQWdDLENBQUMsSUFBSSxDQUFDO0lBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEIsQ0FBQztBQUhELGdDQUdDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFBpbiDlvJXohJrlhoXnva7nmoTnsbvlnotcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExpbmVJbmZvIH0gZnJvbSAnQGl0aGFyYm9ycy91aS1ncmFwaCc7XG5pbXBvcnQgdHlwZSB7IEJhc2VFbGVtZW50IH0gZnJvbSAnQGl0aGFyYm9ycy91aS1jb3JlJztcbmltcG9ydCB0eXBlIHsgSVBpbkRlc2NyaXB0aW9uLCBJQmxvY2tEZXNjcmlwdGlvbiwgUGluRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHtcbiAgICBIVE1MR3JhcGhGb3JnZUVsZW1lbnQsXG59IGZyb20gJy4vZm9yZ2UnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvbixcbiAgICBBY3Rpb25MaXN0LFxufSBmcm9tICdAaXRoYXJib3JzL3N0cnVjdHVyZXMnO1xuXG5leHBvcnQgdHlwZSBEaXJ0eURldGFpbCA9IHtcbiAgICBhY3Rpb24/OiBBY3Rpb247XG59O1xuXG5jb25zdCBUWVBFOiB7XG4gICAgW2tleTogc3RyaW5nXTogbmV3KC4uLmFyZ3M6IGFueVtdKSA9PiBQaW5cbn0gPSB7fTtcblxudHlwZSBQaW5BY3Rpb25EZXRhaWwgPSB7XG4gICAgYmxvY2tOYW1lOiBzdHJpbmc7XG4gICAgaW5kZXg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5BY3Rpb248RCBleHRlbmRzIHt9PiBleHRlbmRzIEFjdGlvbjxEICYgUGluQWN0aW9uRGV0YWlsPiB7XG5cbiAgICBwaW46IFBpbjtcblxuICAgIC8vIGRldGFpbHM6IEQgJiBQaW5BY3Rpb25EZXRhaWw7XG5cbiAgICBjb25zdHJ1Y3RvcihwaW46IFBpbiwgZGV0YWlsczogRCkge1xuICAgICAgICBjb25zdCBjRGV0YWlscyA9IGRldGFpbHMgYXMgRCAmIFBpbkFjdGlvbkRldGFpbDtcbiAgICAgICAgY0RldGFpbHMuYmxvY2tOYW1lID0gcGluLnBhdGhEYXRhLmJsb2NrTmFtZTtcbiAgICAgICAgY0RldGFpbHMuaW5kZXggPSBwaW4ucGF0aERhdGEuaW5kZXg7XG4gICAgICAgIHN1cGVyKGNEZXRhaWxzKTtcbiAgICAgICAgLy8gdGhpcy5kZXRhaWxzID0gY0RldGFpbHM7XG4gICAgICAgIHRoaXMucGluID0gcGluO1xuICAgIH1cblxuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG5cbiAgICB9XG5cbiAgICByZXZlcnRBY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGluQWN0aW9uKHRoaXMucGluLCB7fSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGluPEQgPSB7IFtrZXk6IHN0cmluZ106IGFueSB9PiB7XG4gICAgc3RhdGljIHR5cGUgPSAndW5rbm93bic7XG5cbiAgICBjb2xvciA9ICd3aGl0ZSc7XG4gICAgbGluZSA9ICcnO1xuICAgIHN0eWxlID0gJyc7XG4gICAgZGV0YWlscz86IEQ7XG5cbiAgICBwYXRoRGF0YSA9IHtcbiAgICAgICAgYmxvY2tOYW1lOiAnJyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgfTtcblxuICAgIGRlc2MhOiBJUGluRGVzY3JpcHRpb247XG5cbiAgICBjb250ZW50U2xvdD86IHN0cmluZztcbiAgICBjaGlsZHJlblNsb3Q/OiBzdHJpbmdbXTtcblxuICAgIHJlZnM6IHsgW2tleTogc3RyaW5nXTogSFRNTEVsZW1lbnQgfSA9IHt9O1xuICAgICRyb290PzogSFRNTEVsZW1lbnQ7XG5cbiAgICBpbml0KGRldGFpbHM6IEQsIGRlc2M6IElQaW5EZXNjcmlwdGlvbiwgYmxvY2tOYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICAgICAgdGhpcy5wYXRoRGF0YS5ibG9ja05hbWUgPSBibG9ja05hbWU7XG4gICAgICAgIHRoaXMucGF0aERhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5kZXNjID0gZGVzYztcbiAgICB9XG5cbiAgICBleGVjKGFjdGlvbjogQWN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy4kcm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vZGVSb290ID0gdGhpcy4kcm9vdC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3Q7XG4gICAgICAgIGlmIChub2RlUm9vdCkge1xuICAgICAgICAgICAgKG5vZGVSb290Lmhvc3QgYXMgQmFzZUVsZW1lbnQpLmRpc3BhdGNoKCdkaXJ0eScsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcblxuICAgIH1cblxuICAgIG9uVXBkYXRlKCkge1xuXG4gICAgfVxufVxuXG4vLyB0b2RvIOiAg+iZkeaVsOaNruWGsueqgVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUljb24ocGluOiBJUGluRGVzY3JpcHRpb24pIHtcbiAgICBpZiAocGluLmljb24pIHtcbiAgICAgICAgcmV0dXJuIC8qaHRtbCovYDx1aS1pY29uIHZhbHVlPVwiJHtwaW4uaWNvbn1cIj48L3VpLWljb24+YDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVRpdGxlKHBpbjogSVBpbkRlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHBpbi5uYW1lKSB7XG4gICAgICAgIHJldHVybiAvKmh0bWwqL2A8c3BhbiBjbGFzcz1cIm5hbWVcIiB0aXRsZT1cIiR7cGluLm5hbWV9XCI+JHtwaW4ubmFtZX08L3NwYW4+YDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIOeUn+aIkCBvdXRwdXQgcGluIOeahCBIVE1MXG4gKiBAcGFyYW0gcGluXG4gKiBAcGFyYW0gZGV0YWlsc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlT3V0cHV0UGluSFRNTChwaW46IElQaW5EZXNjcmlwdGlvbiwgZGV0YWlsczogeyB2YWx1ZTogYW55IH0pIHtcbiAgICBjb25zdCB0eXBlID0gcGluLmRhdGFUeXBlIGFzIGtleW9mIHR5cGVvZiBUWVBFO1xuICAgIGNvbnN0IGRlZmluZSA9IFRZUEVbdHlwZV0gfHwgVFlQRVsndW5rbm93biddO1xuICAgIGNvbnN0IHBpbkkgPSBuZXcgZGVmaW5lKCk7XG4gICAgY29uc3QgY29sb3IgPSBwaW5JLmNvbG9yID8gYC0tcGFyYW0tY29sb3I6ICR7cGluSS5jb2xvcn07YCA6ICcnO1xuXG4gICAgY29uc3QgJHBpbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICRwaW4uY2xhc3NMaXN0LmFkZCgncGluJyk7XG4gICAgJHBpbi5jbGFzc0xpc3QuYWRkKCdvdXQnKTtcbiAgICAkcGluLmNsYXNzTGlzdC5hZGQodHlwZSArICcnKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAkcGluLl9fcGluID0gcGluSTtcblxuICAgICRwaW4uaW5uZXJIVE1MID0gLypodG1sKi9gJHtwaW5JLnN0eWxlID8gYDxzdHlsZT4ke3Bpbkkuc3R5bGV9PC9zdHlsZT5gIDogJyd9XG4gICAgPGRpdiBjbGFzcz1cImJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgICR7Z2VuZXJhdGVUaXRsZShwaW4pfVxuICAgICAgICAgICAgJHtnZW5lcmF0ZUljb24ocGluKX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8di1ncmFwaC1ub2RlLXBhcmFtICR7cGluLmhpZGVQaW4gPyAnaGlkZGVuJyA6ICcnfSBzdHlsZT1cIiR7Y29sb3J9XCIgY2xhc3M9XCJwb2ludFwiIGRpcmVjdGlvbj1cIm91dHB1dFwiIG5hbWU9XCIke3Bpbi50YWd9XCIgdHlwZT1cIiR7dHlwZX1cIiByb2xlPVwicmlnaHRcIj48L3YtZ3JhcGgtbm9kZS1wYXJhbT5gO1xuXG4gICAgY29uc3QgJHJlZkxpc3QgPSAkcGluLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyZWZdJyk7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCgkcmVmTGlzdCwgKCRyZWYpID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gJHJlZi5nZXRBdHRyaWJ1dGUoJ3JlZicpO1xuICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICBwaW5JLnJlZnNbcmVmXSA9ICRyZWY7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHBpbkkuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgLy8gcGluSS5vbkluaXQoKTtcbiAgICAvLyBwaW5JLm9uVXBkYXRlKGRldGFpbHMpO1xuICAgIHJldHVybiAkcGluO1xufVxuXG4vKipcbiAqIOeUn+aIkCBpbnB1dCBwaW4g55qEIEhUTUxcbiAqIEBwYXJhbSBwaW5cbiAqIEBwYXJhbSBwaW5EYXRhXG4gKiBAcGFyYW0gYmxvY2tOYW1lXG4gKiBAcGFyYW0gbGluZU1hcFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSW5wdXRQaW5IVE1MKHBpbjogSVBpbkRlc2NyaXB0aW9uLCBwaW5EYXRhTGlzdDogUGluRGF0YVtdLCBpbmRleDogbnVtYmVyLCBibG9ja05hbWU6IHN0cmluZywgbGluZU1hcDogeyBba2V5OiBzdHJpbmddOiBMaW5lSW5mbyB8IHVuZGVmaW5lZCB9KSB7XG4gICAgY29uc3QgdHlwZSA9IHBpbi5kYXRhVHlwZSBhcyBrZXlvZiB0eXBlb2YgVFlQRTtcbiAgICBjb25zdCBkZWZpbmUgPSBUWVBFW3R5cGVdIHx8IFRZUEVbJ3Vua25vd24nXTtcbiAgICBjb25zdCBwaW5JID0gbmV3IGRlZmluZSgpO1xuICAgIGNvbnN0IGNvbG9yID0gcGluSS5jb2xvciA/IGAtLXBhcmFtLWNvbG9yOiAke3BpbkkuY29sb3J9O2AgOiAnJztcblxuICAgIGxldCBjb25uZWN0ZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGlkIGluIGxpbmVNYXApIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVNYXBbaWRdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsaW5lICYmXG4gICAgICAgICAgICBsaW5lLm91dHB1dC5ub2RlID09PSBibG9ja05hbWUgJiZcbiAgICAgICAgICAgIGxpbmUub3V0cHV0LnBhcmFtID09PSBwaW4udGFnXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0ICRwaW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAkcGluLmNsYXNzTGlzdC5hZGQoJ3BpbicpO1xuICAgICRwaW4uY2xhc3NMaXN0LmFkZCgnaW4nKTtcbiAgICAkcGluLmNsYXNzTGlzdC5hZGQodHlwZSArICcnKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAkcGluLl9fcGluID0gcGluSTtcblxuICAgICRwaW4uaW5uZXJIVE1MID0gLypodG1sKi9gJHtwaW5JLnN0eWxlID8gYDxzdHlsZT4ke3Bpbkkuc3R5bGV9PC9zdHlsZT5gIDogJyd9XG4gICAgPGRpdiBjbGFzcz1cImJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgICR7Z2VuZXJhdGVJY29uKHBpbil9XG4gICAgICAgICAgICAke2dlbmVyYXRlVGl0bGUocGluKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7cGluSS5jb250ZW50U2xvdCA/IGA8ZGl2IGNsYXNzPVwic2xvdC1jb250ZW50XCIgJHtjb25uZWN0ZWQgPyAnaGlkZGVuJyA6ICcnfT4ke3BpbkkuY29udGVudFNsb3R9PC9kaXY+YCA6ICcnfVxuICAgIDwvZGl2PlxuXG4gICAgJHtwaW5JLmNoaWxkcmVuU2xvdCA/IGA8ZGl2IGNsYXNzPVwiY2hpbGRyZW5cIiAke2Nvbm5lY3RlZCA/ICdoaWRkZW4nIDogJyd9PiR7cGluSS5jaGlsZHJlblNsb3QubWFwKGNoaWxkID0+ICc8ZGl2IGNsYXNzPVwic2xvdC1jaGlsZHJlblwiPicgKyBjaGlsZCArICc8L2Rpdj4nKS5qb2luKCcnKX08L2Rpdj5gIDogJyd9XG4gICAgPHYtZ3JhcGgtbm9kZS1wYXJhbSAke3Bpbi5oaWRlUGluID8gJ2hpZGRlbicgOiAnJ30gc3R5bGU9XCIke2NvbG9yfVwiIGNsYXNzPVwicG9pbnRcIiBkaXJlY3Rpb249XCJpbnB1dFwiIG5hbWU9XCIke3Bpbi50YWd9XCIgdHlwZT1cIiR7dHlwZX1cIiByb2xlPVwibGVmdFwiPjwvdi1ncmFwaC1ub2RlLXBhcmFtPmA7XG5cbiAgICBjb25zdCAkcmVmTGlzdCA9ICRwaW4ucXVlcnlTZWxlY3RvckFsbCgnW3JlZl0nKTtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCRyZWZMaXN0LCAoJHJlZikgPT4ge1xuICAgICAgICBjb25zdCByZWYgPSAkcmVmLmdldEF0dHJpYnV0ZSgncmVmJyk7XG4gICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgIHBpbkkucmVmc1tyZWZdID0gJHJlZjtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcGluRGF0YSA9IHBpbkRhdGFMaXN0W2luZGV4XTtcblxuICAgIHBpbkkuaW5pdChwaW5EYXRhLCBwaW4sIGJsb2NrTmFtZSwgaW5kZXgpO1xuICAgIHBpbkkuJHJvb3QgPSAkcGluO1xuICAgIHBpbkkub25Jbml0KCk7XG4gICAgcGluSS5vblVwZGF0ZSgpO1xuICAgIHJldHVybiAkcGluO1xufVxuXG4vKipcbiAqIOeUn+aIkCBwaW4g55qE5qC35byP5Luj56CBXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTdHlsZShibG9ja0Rlc2M6IElCbG9ja0Rlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIC8qY3NzKi9gXG4ucGluIHtcbiAgICAtLXBhcmFtLWNvbG9yOiAjZmZmO1xuICAgIC0tbGluZeKAlG1hcmdpbjogNnB4O1xuXG4gICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgLSA0cHgpO1xuICAgIG1hcmdpbjogdmFyKC0tbGluZeKAlG1hcmdpbikgMTBweCAwIDEwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnBpbjpsYXN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tbGluZeKAlG1hcmdpbik7XG59XG4ucGluLmluIHtcblxufVxuLnBpbi5vdXQge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLnBpbi5pbiA+IC5wb2ludFtoaWRkZW5dLCAucGluLm91dCA+IC5wb2ludFtoaWRkZW5dIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4ucGluLmluID4gLnBvaW50LCAucGluLm91dCA+IC5wb2ludCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcGFyYW0tY29sb3IpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgICB3aWR0aDogN3B4O1xuICAgIGhlaWdodDogN3B4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDZweDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5waW4uaW4gPiAucG9pbnQge1xuICAgIGxlZnQ6IC0xNHB4O1xufVxuLnBpbi5vdXQgPiAucG9pbnQge1xuICAgIHJpZ2h0OiAtMTRweDtcbn1cbi5waW4uaW4gPiAucG9pbnQ6aG92ZXIsXG4ucGluLmluID4gLnBvaW50W2FjdGl2ZV0sXG4ucGluLm91dCA+IC5wb2ludDpob3Zlcixcbi5waW4ub3V0ID4gLnBvaW50W2FjdGl2ZV1cbntcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXJhbS1jb2xvcik7XG59XG5cbi5waW4gPiAuYm9keSB7XG4gICAgZGlzcGxheTogZmxleDtcbn1cbi5waW4gPiAuYm9keSA+IC5uYW1lIHtcbiAgICBmbGV4OiAxO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLnBpbiA+IC5ib2R5ID4gLm5hbWUgPiAubmFtZSB7XG4gICAgcGFkZGluZzogMCA2cHg7XG59XG5cbi5waW4gPiAuYm9keSA+IC5zbG90LWNvbnRlbnQge1xuICAgIGZsZXg6IDE7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aWR0aDogMTIwcHg7XG59XG5cbi5waW4gPiAuY2hpbGRyZW4sIC5waW4gPiAuY2hpbGRyZW4gPiBkaXYge1xuICAgIG1hcmdpbi10b3A6IGNhbGModmFyKC0tbGluZeKAlG1hcmdpbikgKiAwLjUpO1xufVxuXG4ucGluID4gLmJvZHkgPiAuc2xvdC1jb250ZW50W2hpZGRlbl0sIC5waW4gPiAuY2hpbGRyZW5baGlkZGVuXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbiAgICBgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyZVBpbihkZWZpbmU6IG5ldyguLi5hcmdzOiBhbnlbXSkgPT4gUGluKSB7XG4gICAgY29uc3QgdHlwZSA9IChkZWZpbmUgYXMgdW5rbm93biBhcyB0eXBlb2YgUGluKS50eXBlO1xuICAgIFRZUEVbdHlwZV0gPSBkZWZpbmU7XG59XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/undo.js b/extensions/shader-graph/dist/block-forge/undo.js new file mode 100644 index 0000000..6580675 --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/undo.js @@ -0,0 +1,93 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.removeSubGraph = exports.addSubGraph = exports.exitSubGraph = exports.enterSubGraph = exports.RemoveLineAction = exports.AddLineAction = exports.RemoveBlockAction = exports.AddBlockAction = exports.BlockPositionAction = exports.setCurrentGraph = exports.zoomToFit = exports.setGraphInfo = exports.setRootGraph = void 0; +const structures_1 = require("@itharbors/structures"); +// --------- +function setRootGraph() { +} +exports.setRootGraph = setRootGraph; +function setGraphInfo() { +} +exports.setGraphInfo = setGraphInfo; +function zoomToFit() { +} +exports.zoomToFit = zoomToFit; +function setCurrentGraph() { +} +exports.setCurrentGraph = setCurrentGraph; +// --------- +class BlockPositionAction extends structures_1.Action { + exec(params) { + const $node = params.forge.getBlockElement(this.detail.blockName); + if ($node) { + $node.setProperty('position', this.detail.target); + } + } + revertAction() { + return new BlockPositionAction({ + blockName: this.detail.blockName, + source: this.detail.target, + target: this.detail.source, + }); + } +} +exports.BlockPositionAction = BlockPositionAction; +class AddBlockAction extends structures_1.Action { + exec(params) { + this.detail.id = params.forge.$graph.addNode(this.detail.block, this.detail.id); + } + revertAction() { + return new RemoveBlockAction({ + id: this.detail.id, + }, this); + } +} +exports.AddBlockAction = AddBlockAction; +class RemoveBlockAction extends structures_1.Action { + exec(params) { + this.blockData = params.forge.$graph.removeNode(this.detail.id); + } + revertAction() { + return new AddBlockAction({ + block: this.blockData, + id: this.detail.id, + }, this); + } +} +exports.RemoveBlockAction = RemoveBlockAction; +class AddLineAction extends structures_1.Action { + exec(params) { + this.detail.id = params.forge.$graph.addLine(this.detail.line, this.detail.id); + } + revertAction() { + return new RemoveLineAction({ + id: this.detail.id, + }, this); + } +} +exports.AddLineAction = AddLineAction; +class RemoveLineAction extends structures_1.Action { + exec(params) { + this.lineData = params.forge.$graph.removeLine(this.detail.id); + } + revertAction() { + return new AddLineAction({ + line: this.lineData, + id: this.detail.id, + }, this); + } +} +exports.RemoveLineAction = RemoveLineAction; +function enterSubGraph() { +} +exports.enterSubGraph = enterSubGraph; +function exitSubGraph() { +} +exports.exitSubGraph = exitSubGraph; +function addSubGraph() { +} +exports.addSubGraph = addSubGraph; +function removeSubGraph() { +} +exports.removeSubGraph = removeSubGraph; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ibG9jay1mb3JnZS91bmRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBS2Isc0RBRytCO0FBRS9CLFlBQVk7QUFDWixTQUFnQixZQUFZO0FBRTVCLENBQUM7QUFGRCxvQ0FFQztBQUVELFNBQWdCLFlBQVk7QUFFNUIsQ0FBQztBQUZELG9DQUVDO0FBRUQsU0FBZ0IsU0FBUztBQUV6QixDQUFDO0FBRkQsOEJBRUM7QUFFRCxTQUFnQixlQUFlO0FBRS9CLENBQUM7QUFGRCwwQ0FFQztBQUVELFlBQVk7QUFDWixNQUFhLG1CQUFvQixTQUFRLG1CQUl2QztJQUNFLElBQUksQ0FBQyxNQUVKO1FBQ0csTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRSxJQUFJLEtBQUssRUFBRTtZQUNQLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckQ7SUFDTCxDQUFDO0lBQ0QsWUFBWTtRQUNSLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQztZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQ2hDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFwQkQsa0RBb0JDO0FBRUQsTUFBYSxjQUFlLFNBQVEsbUJBR2xDO0lBQ0UsSUFBSSxDQUFDLE1BRUo7UUFDRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsWUFBWTtRQUNSLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQztZQUN6QixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFHO1NBQ3RCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0o7QUFkRCx3Q0FjQztBQUVELE1BQWEsaUJBQWtCLFNBQVEsbUJBRXJDO0lBRUUsSUFBSSxDQUFDLE1BRUo7UUFDRyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLGNBQWMsQ0FBQztZQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVU7WUFDdEIsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtTQUNyQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztDQUNKO0FBZkQsOENBZUM7QUFFRCxNQUFhLGFBQWMsU0FBUSxtQkFHakM7SUFDRSxJQUFJLENBQUMsTUFFSjtRQUNHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLGdCQUFnQixDQUFDO1lBQ3hCLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUc7U0FDdEIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDSjtBQWRELHNDQWNDO0FBRUQsTUFBYSxnQkFBaUIsU0FBUSxtQkFFcEM7SUFFRSxJQUFJLENBQUMsTUFFSjtRQUNHLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFhLENBQUM7SUFDL0UsQ0FBQztJQUNELFlBQVk7UUFDUixPQUFPLElBQUksYUFBYSxDQUFDO1lBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUztZQUNwQixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1NBQ3JCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0o7QUFmRCw0Q0FlQztBQUVELFNBQWdCLGFBQWE7QUFFN0IsQ0FBQztBQUZELHNDQUVDO0FBQ0QsU0FBZ0IsWUFBWTtBQUU1QixDQUFDO0FBRkQsb0NBRUM7QUFDRCxTQUFnQixXQUFXO0FBRTNCLENBQUM7QUFGRCxrQ0FFQztBQUNELFNBQWdCLGNBQWM7QUFFOUIsQ0FBQztBQUZELHdDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7IEhUTUxHcmFwaEZvcmdlRWxlbWVudCB9IGZyb20gJy4vZm9yZ2UnO1xuaW1wb3J0IHR5cGUgeyBHcmFwaERhdGEsIEJsb2NrRGF0YSwgTGluZURhdGEsIElHcmFwaERlZmluZUV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvbixcbiAgICBBY3Rpb25RdWV1ZSxcbn0gZnJvbSAnQGl0aGFyYm9ycy9zdHJ1Y3R1cmVzJztcblxuLy8gLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gc2V0Um9vdEdyYXBoKCkge1xuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHcmFwaEluZm8oKSB7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHpvb21Ub0ZpdCgpIHtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q3VycmVudEdyYXBoKCkge1xuXG59XG5cbi8vIC0tLS0tLS0tLVxuZXhwb3J0IGNsYXNzIEJsb2NrUG9zaXRpb25BY3Rpb24gZXh0ZW5kcyBBY3Rpb248e1xuICAgIGJsb2NrTmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9LFxuICAgIHRhcmdldDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9LFxufT4ge1xuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0ICRub2RlID0gcGFyYW1zLmZvcmdlLmdldEJsb2NrRWxlbWVudCh0aGlzLmRldGFpbC5ibG9ja05hbWUpO1xuICAgICAgICBpZiAoJG5vZGUpIHtcbiAgICAgICAgICAgICRub2RlLnNldFByb3BlcnR5KCdwb3NpdGlvbicsIHRoaXMuZGV0YWlsLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV2ZXJ0QWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrUG9zaXRpb25BY3Rpb24oe1xuICAgICAgICAgICAgYmxvY2tOYW1lOiB0aGlzLmRldGFpbC5ibG9ja05hbWUsXG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuZGV0YWlsLnRhcmdldCxcbiAgICAgICAgICAgIHRhcmdldDogdGhpcy5kZXRhaWwuc291cmNlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRCbG9ja0FjdGlvbiBleHRlbmRzIEFjdGlvbjx7XG4gICAgYmxvY2s6IEJsb2NrRGF0YTtcbiAgICBpZD86IHN0cmluZztcbn0+IHtcbiAgICBleGVjKHBhcmFtczoge1xuICAgICAgICBmb3JnZTogSFRNTEdyYXBoRm9yZ2VFbGVtZW50XG4gICAgfSkge1xuICAgICAgICB0aGlzLmRldGFpbC5pZCA9IHBhcmFtcy5mb3JnZS4kZ3JhcGguYWRkTm9kZSh0aGlzLmRldGFpbC5ibG9jaywgdGhpcy5kZXRhaWwuaWQpO1xuICAgIH1cbiAgICByZXZlcnRBY3Rpb24oKTogUmVtb3ZlQmxvY2tBY3Rpb24ge1xuICAgICAgICByZXR1cm4gbmV3IFJlbW92ZUJsb2NrQWN0aW9uKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmRldGFpbC5pZCEsXG4gICAgICAgIH0sIHRoaXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUJsb2NrQWN0aW9uIGV4dGVuZHMgQWN0aW9uPHtcbiAgICBpZDogc3RyaW5nO1xufT4ge1xuICAgIHByaXZhdGUgYmxvY2tEYXRhPzogQmxvY2tEYXRhO1xuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIHRoaXMuYmxvY2tEYXRhID0gcGFyYW1zLmZvcmdlLiRncmFwaC5yZW1vdmVOb2RlKHRoaXMuZGV0YWlsLmlkKTtcbiAgICB9XG4gICAgcmV2ZXJ0QWN0aW9uKCk6IEFkZEJsb2NrQWN0aW9uIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBZGRCbG9ja0FjdGlvbih7XG4gICAgICAgICAgICBibG9jazogdGhpcy5ibG9ja0RhdGEhLFxuICAgICAgICAgICAgaWQ6IHRoaXMuZGV0YWlsLmlkLFxuICAgICAgICB9LCB0aGlzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRMaW5lQWN0aW9uIGV4dGVuZHMgQWN0aW9uPHtcbiAgICBsaW5lOiBMaW5lRGF0YTtcbiAgICBpZD86IHN0cmluZztcbn0+IHtcbiAgICBleGVjKHBhcmFtczoge1xuICAgICAgICBmb3JnZTogSFRNTEdyYXBoRm9yZ2VFbGVtZW50XG4gICAgfSkge1xuICAgICAgICB0aGlzLmRldGFpbC5pZCA9IHBhcmFtcy5mb3JnZS4kZ3JhcGguYWRkTGluZSh0aGlzLmRldGFpbC5saW5lLCB0aGlzLmRldGFpbC5pZCk7XG4gICAgfVxuICAgIHJldmVydEFjdGlvbigpOiBSZW1vdmVMaW5lQWN0aW9uIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZW1vdmVMaW5lQWN0aW9uKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmRldGFpbC5pZCEsXG4gICAgICAgIH0sIHRoaXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUxpbmVBY3Rpb24gZXh0ZW5kcyBBY3Rpb248e1xuICAgIGlkOiBzdHJpbmc7XG59PiB7XG4gICAgcHJpdmF0ZSBsaW5lRGF0YT86IExpbmVEYXRhO1xuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG4gICAgICAgIHRoaXMubGluZURhdGEgPSBwYXJhbXMuZm9yZ2UuJGdyYXBoLnJlbW92ZUxpbmUodGhpcy5kZXRhaWwuaWQpIGFzIExpbmVEYXRhO1xuICAgIH1cbiAgICByZXZlcnRBY3Rpb24oKTogQWRkTGluZUFjdGlvbiB7XG4gICAgICAgIHJldHVybiBuZXcgQWRkTGluZUFjdGlvbih7XG4gICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmVEYXRhISxcbiAgICAgICAgICAgIGlkOiB0aGlzLmRldGFpbC5pZCxcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW50ZXJTdWJHcmFwaCgpIHtcblxufVxuZXhwb3J0IGZ1bmN0aW9uIGV4aXRTdWJHcmFwaCgpIHtcblxufVxuZXhwb3J0IGZ1bmN0aW9uIGFkZFN1YkdyYXBoKCkge1xuXG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU3ViR3JhcGgoKSB7XG5cbn1cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/block-forge/utils.js b/extensions/shader-graph/dist/block-forge/utils.js new file mode 100644 index 0000000..db6bc5b --- /dev/null +++ b/extensions/shader-graph/dist/block-forge/utils.js @@ -0,0 +1,85 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createPin = exports.createBlock = exports.createGraph = exports.dispatch = exports.generatePin = exports.generateBlock = exports.generateGraph = exports.generateUUID = exports.completeBlockTarget = void 0; +/** + * 补全 target 上的配置对象 + * 将 extend 里的属性补充到 target 上 + * @param target + * @param extend + */ +function completeBlockTarget(target, extend) { + target.feature = Object.assign(Object.create(extend.feature || {}), target.feature || {}); + target.style = Object.assign(Object.create(extend.style || {}), target.style || {}); +} +exports.completeBlockTarget = completeBlockTarget; +function generateUUID() { + return 't_' + Date.now() + (Math.random() + '').substring(10); +} +exports.generateUUID = generateUUID; +function generateGraph(type, name) { + return { + type, + name: name || type, + nodes: {}, + lines: {}, + graphs: {}, + details: {}, + }; +} +exports.generateGraph = generateGraph; +function generateBlock(type) { + return { + type, + position: { x: 0, y: 0 }, + details: {}, + }; +} +exports.generateBlock = generateBlock; +function generatePin(type) { + return { + dataType: type, + value: {}, + details: {}, + }; +} +exports.generatePin = generatePin; +/** + * 发送一个自定义消息 + * @param elem + * @param eventName + * @param options + */ +function dispatch(elem, eventName, options) { + const targetOptions = { + bubbles: true, + cancelable: true, + }; + if (options) { + Object.assign(targetOptions, options); + } + const event = new CustomEvent(eventName, targetOptions); + elem.dispatchEvent(event); +} +exports.dispatch = dispatch; +/** + * + */ +function createGraph(forge, type) { + // TODO +} +exports.createGraph = createGraph; +/** + * + */ +function createBlock() { + // TODO +} +exports.createBlock = createBlock; +/** + * + */ +function createPin() { + // TODO +} +exports.createPin = createPin; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2stZm9yZ2UvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7QUFLYjs7Ozs7R0FLRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLE1BQXlCLEVBQUUsTUFBeUI7SUFDcEYsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN4RixDQUFDO0FBSEQsa0RBR0M7QUFFRCxTQUFnQixZQUFZO0lBQ3hCLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUZELG9DQUVDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLElBQVksRUFBRSxJQUFhO0lBQ3JELE9BQU87UUFDSCxJQUFJO1FBQ0osSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJO1FBQ2xCLEtBQUssRUFBRSxFQUFFO1FBQ1QsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLE9BQU8sRUFBRSxFQUFFO0tBQ2QsQ0FBQztBQUNOLENBQUM7QUFURCxzQ0FTQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxJQUFZO0lBQ3RDLE9BQU87UUFDSCxJQUFJO1FBQ0osUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sRUFBRSxFQUFFO0tBQ2QsQ0FBQztBQUNOLENBQUM7QUFORCxzQ0FNQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3BDLE9BQU87UUFDSCxRQUFRLEVBQUUsSUFBSTtRQUNkLEtBQUssRUFBRSxFQUFFO1FBQ1QsT0FBTyxFQUFFLEVBQUU7S0FDZCxDQUFDO0FBQ04sQ0FBQztBQU5ELGtDQU1DO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixRQUFRLENBQUksSUFBaUIsRUFBRSxTQUFpQixFQUFFLE9BQW1DO0lBQ2pHLE1BQU0sYUFBYSxHQUFHO1FBQ2xCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVSxFQUFFLElBQUk7S0FDbkIsQ0FBQztJQUNGLElBQUksT0FBTyxFQUFFO1FBQ1QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDekM7SUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBSSxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBVkQsNEJBVUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxLQUFnQixFQUFFLElBQVk7SUFDdEQsT0FBTztBQUNYLENBQUM7QUFGRCxrQ0FFQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVztJQUN2QixPQUFPO0FBQ1gsQ0FBQztBQUZELGtDQUVDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixTQUFTO0lBQ3JCLE9BQU87QUFDWCxDQUFDO0FBRkQsOEJBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0eXBlIHsgSUJsb2NrRGVzY3JpcHRpb24sIEdyYXBoRGF0YSwgQmxvY2tEYXRhLCBQaW5EYXRhLCBGb3JnZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IEdyYXBoTm9kZUVsZW1lbnQgfSBmcm9tICdAaXRoYXJib3JzL3VpLWdyYXBoL2Rpc3QvZWxlbWVudC9ncmFwaC1ub2RlJztcblxuLyoqXG4gKiDooaXlhaggdGFyZ2V0IOS4iueahOmFjee9ruWvueixoVxuICog5bCGIGV4dGVuZCDph4znmoTlsZ7mgKfooaXlhYXliLAgdGFyZ2V0IOS4ilxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIGV4dGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGxldGVCbG9ja1RhcmdldCh0YXJnZXQ6IElCbG9ja0Rlc2NyaXB0aW9uLCBleHRlbmQ6IElCbG9ja0Rlc2NyaXB0aW9uKSB7XG4gICAgdGFyZ2V0LmZlYXR1cmUgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZXh0ZW5kLmZlYXR1cmUgfHwge30pLCB0YXJnZXQuZmVhdHVyZSB8fCB7fSk7XG4gICAgdGFyZ2V0LnN0eWxlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGV4dGVuZC5zdHlsZSB8fCB7fSksIHRhcmdldC5zdHlsZSB8fCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVVVSUQoKSB7XG4gICAgcmV0dXJuICd0XycgKyBEYXRlLm5vdygpICsgKE1hdGgucmFuZG9tKCkgKyAnJykuc3Vic3RyaW5nKDEwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlR3JhcGgodHlwZTogc3RyaW5nLCBuYW1lPzogc3RyaW5nKTogR3JhcGhEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBuYW1lOiBuYW1lIHx8IHR5cGUsXG4gICAgICAgIG5vZGVzOiB7fSxcbiAgICAgICAgbGluZXM6IHt9LFxuICAgICAgICBncmFwaHM6IHt9LFxuICAgICAgICBkZXRhaWxzOiB7fSxcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVCbG9jayh0eXBlOiBzdHJpbmcpOiBCbG9ja0RhdGEge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgICAgZGV0YWlsczoge30sXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGluKHR5cGU6IHN0cmluZyk6IFBpbkRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICAgIGRhdGFUeXBlOiB0eXBlLFxuICAgICAgICB2YWx1ZToge30sXG4gICAgICAgIGRldGFpbHM6IHt9LFxuICAgIH07XG59XG5cbi8qKlxuICog5Y+R6YCB5LiA5Liq6Ieq5a6a5LmJ5raI5oGvXG4gKiBAcGFyYW0gZWxlbSBcbiAqIEBwYXJhbSBldmVudE5hbWUgXG4gKiBAcGFyYW0gb3B0aW9ucyBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoPFQ+KGVsZW06IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgb3B0aW9ucz86IEV2ZW50SW5pdCAmIHsgZGV0YWlsOiBUIH0pIHtcbiAgICBjb25zdCB0YXJnZXRPcHRpb25zID0ge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQ8VD4oZXZlbnROYW1lLCB0YXJnZXRPcHRpb25zKTtcbiAgICBlbGVtLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHcmFwaChmb3JnZTogRm9yZ2VEYXRhLCB0eXBlOiBzdHJpbmcpIHtcbiAgICAvLyBUT0RPXG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJsb2NrKCkge1xuICAgIC8vIFRPRE9cbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGluKCkge1xuICAgIC8vIFRPRE9cbn1cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/contributions/assets-menu.js b/extensions/shader-graph/dist/contributions/assets-menu.js new file mode 100644 index 0000000..0b09302 --- /dev/null +++ b/extensions/shader-graph/dist/contributions/assets-menu.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createMenu = void 0; +const shader_graph_1 = require("../shader-graph"); +function getMenu(assetInfo) { + const AssetsURL = assetInfo ? assetInfo.url : 'db://assets'; + return { + label: `i18n:${shader_graph_1.PACKAGE_NAME}.menu.import`, + submenu: [ + { + label: 'Surface', + async click() { + const url = await Editor.Message.request('asset-db', 'generate-available-url', `${AssetsURL}/${shader_graph_1.DEFAULT_ASSET_NAME}`); + const shaderGraph = await shader_graph_1.GraphDataMgr.createDefaultShaderGraph('SurfaceMasterNode', 'Graph', (0, shader_graph_1.getName)(url)); + const asset = await Editor.Message.request('asset-db', 'create-asset', url, shaderGraph); + }, + }, + { + label: 'Unlit', + async click() { + const url = await Editor.Message.request('asset-db', 'generate-available-url', `${AssetsURL}/${shader_graph_1.DEFAULT_ASSET_NAME}`); + const shaderGraph = await shader_graph_1.GraphDataMgr.createDefaultShaderGraph('UnlitMasterNode', 'Graph', (0, shader_graph_1.getName)(url)); + await Editor.Message.request('asset-db', 'create-asset', url, shaderGraph); + }, + }, + ], + }; +} +/** + * assets 扩展普通资源节点的右键菜单,能够拿到右键资源节点的信息 assetInfo 作为参数 + * @param assetInfo + */ +function createMenu(assetInfo) { + return [ + getMenu(assetInfo), + ]; +} +exports.createMenu = createMenu; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLW1lbnUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJpYnV0aW9ucy9hc3NldHMtbWVudS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxrREFBMEY7QUFFMUYsU0FBUyxPQUFPLENBQUMsU0FBd0I7SUFDckMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDNUQsT0FBTztRQUNILEtBQUssRUFBRSxRQUFRLDJCQUFZLGNBQWM7UUFDekMsT0FBTyxFQUFFO1lBQ0w7Z0JBQ0ksS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEtBQUssQ0FBQyxLQUFLO29CQUNQLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLHdCQUF3QixFQUFFLEdBQUcsU0FBUyxJQUFJLGlDQUFrQixFQUFFLENBQUMsQ0FBQztvQkFDckgsTUFBTSxXQUFXLEdBQUcsTUFBTSwyQkFBWSxDQUFDLHdCQUF3QixDQUFDLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxJQUFBLHNCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDNUcsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDN0YsQ0FBQzthQUNKO1lBQ0Q7Z0JBQ0ksS0FBSyxFQUFFLE9BQU87Z0JBQ2QsS0FBSyxDQUFDLEtBQUs7b0JBQ1AsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsR0FBRyxTQUFTLElBQUksaUNBQWtCLEVBQUUsQ0FBQyxDQUFDO29CQUNySCxNQUFNLFdBQVcsR0FBRyxNQUFNLDJCQUFZLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLElBQUEsc0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUMxRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDO2FBQ0o7U0FDSjtLQUVKLENBQUM7QUFDTixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLFNBQXdCO0lBQy9DLE9BQU87UUFDSCxPQUFPLENBQUMsU0FBUyxDQUFDO0tBQ3JCLENBQUM7QUFDTixDQUFDO0FBSkQsZ0NBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZW51QXNzZXRJbmZvIH0gZnJvbSAnQGNvY29zL2NyZWF0b3ItdHlwZXMvZWRpdG9yL3BhY2thZ2VzL3BhY2thZ2UtYXNzZXQvQHR5cGVzL3B1YmxpYyc7XG5pbXBvcnQgeyBQQUNLQUdFX05BTUUsIERFRkFVTFRfQVNTRVRfTkFNRSwgR3JhcGhEYXRhTWdyLCBnZXROYW1lIH0gZnJvbSAnLi4vc2hhZGVyLWdyYXBoJztcblxuZnVuY3Rpb24gZ2V0TWVudShhc3NldEluZm86IE1lbnVBc3NldEluZm8pIHtcbiAgICBjb25zdCBBc3NldHNVUkwgPSBhc3NldEluZm8gPyBhc3NldEluZm8udXJsIDogJ2RiOi8vYXNzZXRzJztcbiAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogYGkxOG46JHtQQUNLQUdFX05BTUV9Lm1lbnUuaW1wb3J0YCxcbiAgICAgICAgc3VibWVudTogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnU3VyZmFjZScsXG4gICAgICAgICAgICAgICAgYXN5bmMgY2xpY2soKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2dlbmVyYXRlLWF2YWlsYWJsZS11cmwnLCBgJHtBc3NldHNVUkx9LyR7REVGQVVMVF9BU1NFVF9OQU1FfWApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFkZXJHcmFwaCA9IGF3YWl0IEdyYXBoRGF0YU1nci5jcmVhdGVEZWZhdWx0U2hhZGVyR3JhcGgoJ1N1cmZhY2VNYXN0ZXJOb2RlJywgJ0dyYXBoJywgZ2V0TmFtZSh1cmwpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCB1cmwsIHNoYWRlckdyYXBoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1VubGl0JyxcbiAgICAgICAgICAgICAgICBhc3luYyBjbGljaygpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZ2VuZXJhdGUtYXZhaWxhYmxlLXVybCcsIGAke0Fzc2V0c1VSTH0vJHtERUZBVUxUX0FTU0VUX05BTUV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYWRlckdyYXBoID0gYXdhaXQgR3JhcGhEYXRhTWdyLmNyZWF0ZURlZmF1bHRTaGFkZXJHcmFwaCgnVW5saXRNYXN0ZXJOb2RlJywgJ0dyYXBoJywgZ2V0TmFtZSh1cmwpKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgdXJsLCBzaGFkZXJHcmFwaCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG5cbiAgICB9O1xufVxuXG4vKipcbiAqIGFzc2V0cyDmianlsZXmma7pgJrotYTmupDoioLngrnnmoTlj7PplK7oj5zljZXvvIzog73lpJ/mi7/liLDlj7PplK7otYTmupDoioLngrnnmoTkv6Hmga8gYXNzZXRJbmZvIOS9nOS4uuWPguaVsFxuICogQHBhcmFtIGFzc2V0SW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVudShhc3NldEluZm86IE1lbnVBc3NldEluZm8pIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBnZXRNZW51KGFzc2V0SW5mbyksXG4gICAgXTtcbn1cblxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/contributions/effect-header.js b/extensions/shader-graph/dist/contributions/effect-header.js new file mode 100644 index 0000000..3bf86e7 --- /dev/null +++ b/extensions/shader-graph/dist/contributions/effect-header.js @@ -0,0 +1,47 @@ +"use strict"; +// @ts-ignore +// import { EDITOR } from 'cc/env'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.addChunks = exports.path = exports.fs = void 0; +const effect_utils_1 = require("../effect-utils"); +const useNpm = true; //(EDITOR || (globalThis as any).electron); +exports.fs = useNpm && globalThis.require('fs-extra'); +exports.path = useNpm && globalThis.require('path'); +const { basename, dirname, extname, join, relative } = exports.path || {}; +const { readFileSync, readdirSync, statSync } = exports.fs || {}; +let _addedChunks = false; +async function addChunks() { + if (_addedChunks) { + return; + } + _addedChunks = true; + const enginePath = (await Editor.Message.request('engine', 'query-engine-info')).typescript.path; + // 添加所有 builtin 头文件 + const builtinChunkDir = join(enginePath, './editor/assets/chunks'); + const builtinChunks = (() => { + const arr = []; + function step(dir) { + const names = readdirSync(dir); + names.forEach((name) => { + const file = join(dir, name); + if (/\.chunk$/.test(name)) { + arr.push(file); + } + else if (statSync(file).isDirectory()) { + step(file); + } + }); + } + step(builtinChunkDir); + return arr; + })(); + for (let i = 0; i < builtinChunks.length; ++i) { + const name = basename(builtinChunks[i], '.chunk'); + const content = readFileSync(builtinChunks[i], { encoding: 'utf8' }); + await (0, effect_utils_1.addChunk)(name, content); + const relativeName = relative(builtinChunkDir, builtinChunks[i]).replace('.chunk', '').replace(/\\/g, '/'); + await (0, effect_utils_1.addChunk)(relativeName, content); + } +} +exports.addChunks = addChunks; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LWhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmlidXRpb25zL2VmZmVjdC1oZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGFBQWE7QUFDYixtQ0FBbUM7OztBQUVuQyxrREFBMkM7QUFFM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUEsMkNBQTJDO0FBQ2xELFFBQUEsRUFBRSxHQUFHLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLFFBQUEsSUFBSSxHQUFHLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXpELE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsWUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNsRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxVQUFFLElBQUksRUFBRSxDQUFDO0FBRXpELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztBQUNsQixLQUFLLFVBQVUsU0FBUztJQUMzQixJQUFJLFlBQVksRUFBRTtRQUNkLE9BQU87S0FDVjtJQUVELFlBQVksR0FBRyxJQUFJLENBQUM7SUFFcEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztJQUVqRyxtQkFBbUI7SUFDbkIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztRQUN6QixTQUFTLElBQUksQ0FBQyxHQUFXO1lBQ3JCLE1BQU0sS0FBSyxHQUFhLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDdkIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDbEI7cUJBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDZDtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0QixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFTCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUMzQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyRSxNQUFNLElBQUEsdUJBQVEsRUFBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0csTUFBTSxJQUFBLHVCQUFRLEVBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3pDO0FBRUwsQ0FBQztBQXBDRCw4QkFvQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG4vLyBpbXBvcnQgeyBFRElUT1IgfSBmcm9tICdjYy9lbnYnO1xuXG5pbXBvcnQgeyBhZGRDaHVuayB9IGZyb20gJy4uL2VmZmVjdC11dGlscyc7XG5cbmNvbnN0IHVzZU5wbSA9IHRydWU7Ly8oRURJVE9SIHx8IChnbG9iYWxUaGlzIGFzIGFueSkuZWxlY3Ryb24pO1xuZXhwb3J0IGNvbnN0IGZzID0gdXNlTnBtICYmIGdsb2JhbFRoaXMucmVxdWlyZSgnZnMtZXh0cmEnKTtcbmV4cG9ydCBjb25zdCBwYXRoID0gdXNlTnBtICYmIGdsb2JhbFRoaXMucmVxdWlyZSgncGF0aCcpO1xuXG5jb25zdCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBleHRuYW1lLCBqb2luLCByZWxhdGl2ZSB9ID0gcGF0aCB8fCB7fTtcbmNvbnN0IHsgcmVhZEZpbGVTeW5jLCByZWFkZGlyU3luYywgc3RhdFN5bmMgfSA9IGZzIHx8IHt9O1xuXG5sZXQgX2FkZGVkQ2h1bmtzID0gZmFsc2U7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkQ2h1bmtzKCkge1xuICAgIGlmIChfYWRkZWRDaHVua3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIF9hZGRlZENodW5rcyA9IHRydWU7XG5cbiAgICBjb25zdCBlbmdpbmVQYXRoID0gKGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2VuZ2luZScsICdxdWVyeS1lbmdpbmUtaW5mbycpKS50eXBlc2NyaXB0LnBhdGg7XG5cbiAgICAvLyDmt7vliqDmiYDmnIkgYnVpbHRpbiDlpLTmlofku7ZcbiAgICBjb25zdCBidWlsdGluQ2h1bmtEaXIgPSBqb2luKGVuZ2luZVBhdGgsICcuL2VkaXRvci9hc3NldHMvY2h1bmtzJyk7XG4gICAgY29uc3QgYnVpbHRpbkNodW5rcyA9ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFycjogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZnVuY3Rpb24gc3RlcChkaXI6IHN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gcmVhZGRpclN5bmMoZGlyKTtcbiAgICAgICAgICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gam9pbihkaXIsIG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICgvXFwuY2h1bmskLy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdFN5bmMoZmlsZSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGVwKGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0ZXAoYnVpbHRpbkNodW5rRGlyKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9KSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWlsdGluQ2h1bmtzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShidWlsdGluQ2h1bmtzW2ldLCAnLmNodW5rJyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMoYnVpbHRpbkNodW5rc1tpXSwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgICBhd2FpdCBhZGRDaHVuayhuYW1lLCBjb250ZW50KTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVOYW1lID0gcmVsYXRpdmUoYnVpbHRpbkNodW5rRGlyLCBidWlsdGluQ2h1bmtzW2ldKS5yZXBsYWNlKCcuY2h1bmsnLCAnJykucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBhd2FpdCBhZGRDaHVuayhyZWxhdGl2ZU5hbWUsIGNvbnRlbnQpO1xuICAgIH1cblxufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/contributions/internal.js b/extensions/shader-graph/dist/contributions/internal.js new file mode 100644 index 0000000..fde4f14 --- /dev/null +++ b/extensions/shader-graph/dist/contributions/internal.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJpYnV0aW9ucy9pbnRlcm5hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdDb25maWcge1xuICAgIGxpZ2h0RW5hYmxlOiBib29sZWFuO1xuICAgIHByaW1pdGl2ZTogc3RyaW5nO1xufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/contributions/preview-scene.js b/extensions/shader-graph/dist/contributions/preview-scene.js new file mode 100644 index 0000000..e4e3299 --- /dev/null +++ b/extensions/shader-graph/dist/contributions/preview-scene.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const preview_1 = tslib_1.__importDefault(require("./preview")); +const shader_graph_preview_1 = require("./preview/shader-graph-preview"); +class PreviewScene { + async init(config) { + await preview_1.default.load(); + shader_graph_preview_1.shaderGraphPreview.resetCamera(); + shader_graph_preview_1.shaderGraphPreview.setPrimitive(config.primitive); + shader_graph_preview_1.shaderGraphPreview.setLightEnable(config.lightEnable); + return true; + } + setMaterial(material) { + shader_graph_preview_1.shaderGraphPreview.setMaterial(material); + } +} +const previewScene = new PreviewScene(); +exports.default = previewScene; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy1zY2VuZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmlidXRpb25zL3ByZXZpZXctc2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsZ0VBQXVDO0FBQ3ZDLHlFQUFvRTtBQUdwRSxNQUFNLFlBQVk7SUFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQXFCO1FBQzVCLE1BQU0saUJBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1Qix5Q0FBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyx5Q0FBa0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELHlDQUFrQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFrQjtRQUMxQix5Q0FBa0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNKO0FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUN4QyxrQkFBZSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gJ2NjJztcblxuaW1wb3J0IHByZXZpZXdNYW5hZ2VyIGZyb20gJy4vcHJldmlldyc7XG5pbXBvcnQgeyBzaGFkZXJHcmFwaFByZXZpZXcgfSBmcm9tICcuL3ByZXZpZXcvc2hhZGVyLWdyYXBoLXByZXZpZXcnO1xuaW1wb3J0IHsgUHJldmlld0NvbmZpZyB9IGZyb20gJy4vaW50ZXJuYWwnO1xuXG5jbGFzcyBQcmV2aWV3U2NlbmUge1xuICAgIGFzeW5jIGluaXQoY29uZmlnOiBQcmV2aWV3Q29uZmlnKSB7XG4gICAgICAgIGF3YWl0IHByZXZpZXdNYW5hZ2VyLmxvYWQoKTtcbiAgICAgICAgc2hhZGVyR3JhcGhQcmV2aWV3LnJlc2V0Q2FtZXJhKCk7XG4gICAgICAgIHNoYWRlckdyYXBoUHJldmlldy5zZXRQcmltaXRpdmUoY29uZmlnLnByaW1pdGl2ZSk7XG4gICAgICAgIHNoYWRlckdyYXBoUHJldmlldy5zZXRMaWdodEVuYWJsZShjb25maWcubGlnaHRFbmFibGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzZXRNYXRlcmlhbChtYXRlcmlhbDogTWF0ZXJpYWwpIHtcbiAgICAgICAgc2hhZGVyR3JhcGhQcmV2aWV3LnNldE1hdGVyaWFsKG1hdGVyaWFsKTtcbiAgICB9XG59XG5cbmNvbnN0IHByZXZpZXdTY2VuZSA9IG5ldyBQcmV2aWV3U2NlbmUoKTtcbmV4cG9ydCBkZWZhdWx0IHByZXZpZXdTY2VuZTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/contributions/preview/Interactive-preview.js b/extensions/shader-graph/dist/contributions/preview/Interactive-preview.js new file mode 100644 index 0000000..abfd82f --- /dev/null +++ b/extensions/shader-graph/dist/contributions/preview/Interactive-preview.js @@ -0,0 +1,185 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.InteractivePreview = void 0; +const cc_1 = require("cc"); +const buffer_1 = require("./buffer"); +const preview_base_1 = require("./preview-base"); +const tempVec3A = new cc_1.Vec3(); +const tempVec3B = new cc_1.Vec3(); +function clamp(val, min, max) { + return val < min ? min : val > max ? max : val; +} +function makeVec3InRange(inVec3, min, max) { + inVec3.x = clamp(inVec3.x, min, max); + inVec3.y = clamp(inVec3.y, min, max); + inVec3.z = clamp(inVec3.z, min, max); + return inVec3; +} +/** + * 可交互的Preview窗口基类,可以在窗口中方便的预览场景中的元素 + */ +class InteractivePreview extends preview_base_1.PreviewBase { + constructor() { + super(); + this.isMouseDown = false; + this.viewDist = 10; + this.orbitRotateSpeed = 0.01; + this.curCameraRot = new cc_1.Quat(); + this.viewCenter = new cc_1.Vec3(); + this.node = new cc_1.Node(); + this.isMouseLeft = false; + this._flipWheelDirection = true; + this._curPos = cc.v3(); + this._curRot = new cc_1.Quat(); + this._forward = cc.v3(cc_1.Vec3.UNIT_Z); + this._v3a = cc.v3(); + this.scene = new cc_1.Scene(''); + this.cameraComp = new cc_1.Node().addComponent(cc_1.Camera); + // @ts-ignore + this.cameraComp.node.parent = this.scene; + this.cameraComp.node.setPosition(0, 1, 2.5); + this.cameraComp.node.lookAt(cc_1.Vec3.ZERO); + this.cameraComp.near = 0.01; + this.cameraComp.enabled = false; + this.createNodes(); + // @ts-ignore + this.scene._load(); // ensure scene initialized + // @ts-ignore + this.scene._activate(); + this.cameraComp.clearColor = new cc_1.Color(71, 71, 71, 255); + this.camera = this.cameraComp.camera; + this.camera.isWindowSize = false; + this.camera.cameraUsage = cc_1.renderer.scene.CameraUsage?.EDITOR; + this.camera.detachCamera(); + } + createNodes() { + } + init(registerName, queryName) { + this.scene.name = registerName; + this.cameraComp.node.name = registerName + 'camera'; + this.previewBuffer = new buffer_1.PreviewBuffer(registerName, queryName, this.scene); + } + resetCamera(modelNode) { + this.camera.changeTargetWindow(this.previewBuffer.window); + tempVec3A.set(0, 1, 2.5); + this.cameraComp.node.setPosition(tempVec3A); + this.cameraComp.node.lookAt(cc_1.Vec3.ZERO); + modelNode.getWorldPosition(tempVec3B); + cc_1.Vec3.set(this.viewCenter, 0, 0, 0); + this.viewDist = cc_1.Vec3.distance(tempVec3A, tempVec3B); + cce.Engine.repaintInEditMode(); + } + destroyNode() { + if (this.node && (0, cc_1.isValid)(this.node, true)) { + this.node.setParent(null); + this.node._destroyImmediate(); + this.node = null; + } + } + perfectCameraView(boundary) { + this.viewDist = this.getFitDistance(boundary); + this.cameraComp.node.getWorldRotation(this._curRot); + cc_1.Vec3.transformQuat(tempVec3A, cc_1.Vec3.UNIT_Z, this._curRot); + cc_1.Vec3.multiplyScalar(tempVec3A, tempVec3A, this.viewDist); + cc_1.Vec3.add(tempVec3B, this.viewCenter, tempVec3A); + this.cameraComp.node.setWorldPosition(tempVec3B); + this.cameraComp.node.lookAt(this.viewCenter); + cce.Engine.repaintInEditMode(); + } + getFitDistance(boundary) { + if (!boundary) { + return 0; + } + this.viewCenter = boundary.center; + const maxRange = boundary.halfExtents.length(); + // 为了让距离看起来更舒适 + const distScalar = 1.2; + const fov = this.cameraComp.fov; + const depthSize = Math.tan(((fov / 2) * Math.PI) / 180); + const dist = (maxRange * distScalar) / depthSize; + this.cameraComp.near = dist - maxRange; + this.cameraComp.far = dist + maxRange; + return dist; + } + onMouseDown(event) { + this.isMouseDown = true; + this.cameraComp.node.getWorldRotation(this._curRot); + this.cameraComp.node.getWorldPosition(this._curPos); + if ((event.button === cc_1.EventMouse.BUTTON_LEFT || !event.button)) { + this.isMouseLeft = true; + } + this.cameraComp.node.getWorldRotation(this.curCameraRot); + } + onMouseMove(event) { + if (!this.isMouseDown) { + return; + } + if (this.isMouseLeft) { + this.rotate(event.movementX | 0, event.movementY | 0); + } + } + onMouseUp(event) { + this.isMouseDown = false; + this.isMouseLeft = false; + } + onMouseWheel(event) { + this.scale(event.wheelDeltaY); + } + scale(delta) { + if (this._flipWheelDirection) { + delta = -delta; + } + const finalDelta = ((this.cameraComp.far - this.cameraComp.near) / 100); + const node = this.cameraComp.node; + const curPos = this._curPos; + const forward = this._forward; + const v3a = this._v3a; + node.getWorldPosition(curPos); + node.getWorldRotation(this._curRot); + cc_1.Vec3.transformQuat(forward, cc_1.Vec3.UNIT_Z, this._curRot); + cc_1.Vec3.multiplyScalar(v3a, forward, finalDelta * Math.sign(delta)); + cc_1.Vec3.add(curPos, curPos, v3a); + makeVec3InRange(curPos, -1e12, 1e12); + const tempDist = cc_1.Vec3.distance(curPos, this.viewCenter); + const min = this.cameraComp.near * 2; + const max = this.cameraComp.far / 3; + // if (tempDist > min && max > tempDist) { + this.viewDist = tempDist; + node.setWorldPosition(curPos); + // } + } + rotate(dx, dy) { + if (!this.isMouseDown && !this.isMouseLeft) { + return; + } + this.cameraComp.node.getWorldRotation(this._curRot); + const rot = this._curRot; + const euler = cc.v3(); + cc_1.Quat.rotateX(rot, rot, -dy * this.orbitRotateSpeed); + cc_1.Quat.rotateAround(rot, rot, cc_1.Vec3.UNIT_Y, -dx * this.orbitRotateSpeed); + cc_1.Quat.toEuler(euler, rot); + cc_1.Quat.fromEuler(rot, euler.x, euler.y, 0); // clear rotate of z + const offset = cc.v3(0, 0, 1); + cc_1.Vec3.transformQuat(offset, offset, rot); + cc_1.Vec3.normalize(offset, offset); + cc_1.Vec3.multiplyScalar(offset, offset, this.viewDist); + cc_1.Vec3.add(this._curPos, this.viewCenter, offset); + this.cameraComp.node.setWorldPosition(this._curPos); + const up = cc.v3(0, 1, 0); + cc_1.Vec3.transformQuat(up, up, rot); + cc_1.Vec3.normalize(up, up); + this.cameraComp.node.lookAt(this.viewCenter, up); + } + setZoom(scale) { + //向前滚动 > 0 向后滚动 < 0 + this.cameraComp.node.lookAt(this.cameraComp.camera.forward); + this.cameraComp.node.worldPosition.add(this.cameraComp.camera.forward.multiplyScalar(scale)); + this.cameraComp.node.setWorldPosition(this.cameraComp.node.worldPosition); + this.viewDist = cc_1.Vec3.distance(this.cameraComp.node.worldPosition, this.viewCenter); + } + hide() { + this.cameraComp.enabled = false; + } +} +exports.InteractivePreview = InteractivePreview; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RpdmUtcHJldmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3ByZXZpZXcvSW50ZXJhY3RpdmUtcHJldmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQkFBcUc7QUFDckcscUNBQXlDO0FBQ3pDLGlEQUE2QztBQUc3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQUksRUFBRSxDQUFDO0FBQzdCLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBSSxFQUFFLENBQUM7QUFFN0IsU0FBUyxLQUFLLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ2hELE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsTUFBWSxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQzNELE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXJDLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sa0JBQW1CLFNBQVEsMEJBQVc7SUFtQnhDO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFoQkYsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNk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O0FBRVEsZ0RBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FtZXJhLCBDb2xvciwgZ2VvbWV0cnksIGlzVmFsaWQsIE5vZGUsIFF1YXQsIHJlbmRlcmVyLCBTY2VuZSwgVmVjMywgRXZlbnRNb3VzZSB9IGZyb20gJ2NjJztcbmltcG9ydCB7IFByZXZpZXdCdWZmZXIgfSBmcm9tICcuL2J1ZmZlcic7XG5pbXBvcnQgeyBQcmV2aWV3QmFzZSB9IGZyb20gJy4vcHJldmlldy1iYXNlJztcbmRlY2xhcmUgY29uc3QgY2NlOiBhbnk7XG5kZWNsYXJlIGNvbnN0IGNjOiBhbnk7XG5jb25zdCB0ZW1wVmVjM0EgPSBuZXcgVmVjMygpO1xuY29uc3QgdGVtcFZlYzNCID0gbmV3IFZlYzMoKTtcblxuZnVuY3Rpb24gY2xhbXAodmFsOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xuICAgIHJldHVybiB2YWwgPCBtaW4gPyBtaW4gOiB2YWwgPiBtYXggPyBtYXggOiB2YWw7XG59XG5cbmZ1bmN0aW9uIG1ha2VWZWMzSW5SYW5nZShpblZlYzM6IFZlYzMsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xuICAgIGluVmVjMy54ID0gY2xhbXAoaW5WZWMzLngsIG1pbiwgbWF4KTtcbiAgICBpblZlYzMueSA9IGNsYW1wKGluVmVjMy55LCBtaW4sIG1heCk7XG4gICAgaW5WZWMzLnogPSBjbGFtcChpblZlYzMueiwgbWluLCBtYXgpO1xuXG4gICAgcmV0dXJuIGluVmVjMztcbn1cblxuLyoqXG4gKiDlj6/kuqTkupLnmoRQcmV2aWV356qX5Y+j5Z+657G777yM5Y+v5Lul5Zyo56qX5Y+j5Lit5pa55L6/55qE6aKE6KeI5Zy65pmv5Lit55qE5YWD57SgXG4gKi9cbmNsYXNzIEludGVyYWN0aXZlUHJldmlldyBleHRlbmRzIFByZXZpZXdCYXNlIHtcbiAgICBwcm90ZWN0ZWQgc2NlbmUhOiBTY2VuZTtcbiAgICBwcm90ZWN0ZWQgY2FtZXJhQ29tcCE6IENhbWVyYTtcbiAgICBwcm90ZWN0ZWQgY2FtZXJhOiByZW5kZXJlci5zY2VuZS5DYW1lcmEgfCBhbnk7XG4gICAgcHJvdGVjdGVkIGlzTW91c2VEb3duID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIHZpZXdEaXN0ID0gMTA7XG4gICAgcHJvdGVjdGVkIG9yYml0Um90YXRlU3BlZWQgPSAwLjAxO1xuICAgIHByb3RlY3RlZCBjdXJDYW1lcmFSb3QgPSBuZXcgUXVhdCgpO1xuICAgIHByb3RlY3RlZCB2aWV3Q2VudGVyID0gbmV3IFZlYzMoKTtcbiAgICBwcm90ZWN0ZWQgbm9kZTogTm9kZSB8IG51bGwgPSBuZXcgTm9kZSgpO1xuXG4gICAgcHJvdGVjdGVkIGlzTW91c2VMZWZ0ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9mbGlwV2hlZWxEaXJlY3Rpb24gPSB0cnVlO1xuICAgIHByaXZhdGUgX2N1clBvcyA9IGNjLnYzKCk7XG4gICAgcHJpdmF0ZSBfY3VyUm90ID0gbmV3IFF1YXQoKTtcbiAgICBwcml2YXRlIF9mb3J3YXJkID0gY2MudjMoVmVjMy5VTklUX1opO1xuICAgIHByaXZhdGUgX3YzYSA9IGNjLnYzKCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zY2VuZSA9IG5ldyBTY2VuZSgnJyk7XG4gICAgICAgIHRoaXMuY2FtZXJhQ29tcCA9IG5ldyBOb2RlKCkuYWRkQ29tcG9uZW50KENhbWVyYSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5jYW1lcmFDb21wLm5vZGUucGFyZW50ID0gdGhpcy5zY2VuZTtcbiAgICAgICAgdGhpcy5jYW1lcmFDb21wLm5vZGUuc2V0UG9zaXRpb24oMCwgMSwgMi41KTtcbiAgICAgICAgdGhpcy5jYW1lcmFDb21wLm5vZGUubG9va0F0KFZlYzMuWkVSTyk7XG4gICAgICAgIHRoaXMuY2FtZXJhQ29tcC5uZWFyID0gMC4wMTtcbiAgICAgICAgdGhpcy5jYW1lcmFDb21wLmVuYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNyZWF0ZU5vZGVzKCk7XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLnNjZW5lLl9sb2FkKCk7IC8vIGVuc3VyZSBzY2VuZSBpbml0aWFsaXplZFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuc2NlbmUuX2FjdGl2YXRlKCk7XG4gICAgICAgIHRoaXMuY2FtZXJhQ29tcC5jbGVhckNvbG9yID0gbmV3IENvbG9yKDcxLCA3MSwgNzEsIDI1NSk7XG4gICAgICAgIHRoaXMuY2FtZXJhID0gdGhpcy5jYW1lcmFDb21wLmNhbWVyYTtcbiAgICAgICAgdGhpcy5jYW1lcmEuaXNXaW5kb3dTaXplID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FtZXJhLmNhbWVyYVVzYWdlID0gcmVuZGVyZXIuc2NlbmUuQ2FtZXJhVXNhZ2U/LkVESVRPUjtcbiAgICAgICAgdGhpcy5jYW1lcmEuZGV0YWNoQ2FtZXJhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZU5vZGVzKCkge1xuXG4gICAgfVxuXG4gICAgcHVibGljIGluaXQocmVnaXN0ZXJOYW1lOiBzdHJpbmcsIHF1ZXJ5TmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2NlbmUubmFtZSA9IHJlZ2lzdGVyTmFtZTtcbiAgICAgICAgdGhpcy5jYW1lcmFDb21wLm5vZGUubmFtZSA9IHJlZ2lzdGVyTmFtZSArICdjYW1lcmEnO1xuXG4gICAgICAgIHRoaXMucHJldmlld0J1ZmZlciA9IG5ldyBQcmV2aWV3QnVmZmVyKHJlZ2lzdGVyTmFtZSwgcXVlcnlOYW1lLCB0aGlzLnNjZW5lKTtcbiAgICB9XG5cbiAgICByZXNldENhbWVyYShtb2RlbE5vZGU6IE5vZGUpIHtcbiAgICAgICAgdGhpcy5jYW1lcmEuY2hhbmdlVGFyZ2V0V2luZG93KHRoaXMucHJldmlld0J1ZmZlci53aW5kb3cpO1xuICAgICAgICB0ZW1wVmVjM0Euc2V0KDAsIDEsIDIuNSk7XG4gICAgICAgIHRoaXMuY2FtZXJhQ29tcC5ub2RlLnNldFBvc2l0aW9uKHRlbXBWZWMzQSk7XG4gICAgICAgIHRoaXMuY2FtZXJhQ29tcC5ub2RlLmxvb2tBdChWZWMzLlpFUk8pO1xuICAgICAgICBtb2RlbE5vZGUuZ2V0V29ybGRQb3NpdGlvbih0ZW1wVmVjM0IpO1xuICAgICAgICBWZWMzLnNldCh0aGlzLnZpZXdDZW50ZXIsIDAsIDAsIDApO1xuICAgICAgICB0aGlzLnZpZXdEaXN0ID0gVmVjMy5kaXN0YW5jZSh0ZW1wVmVjM0EsIHRlbXBWZWMzQik7XG4gICAgICAgIGNjZS5FbmdpbmUucmVwYWludEluRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZGVzdHJveU5vZGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm5vZGUgJiYgaXNWYWxpZCh0aGlzLm5vZGUsIHRydWUpKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGUuc2V0UGFyZW50KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5ub2RlLl9kZXN0cm95SW1tZWRpYXRlKCk7XG4gICAgICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHBlcmZlY3RDYW1lcmFWaWV3KGJvdW5kYXJ5OiBnZW9tZXRyeS5BQUJCIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZpZXdEaXN0ID0gdGhpcy5nZXRGaXREaXN0YW5jZShib3VuZGFyeSk7XG5cbiAgICAgICAgdGhpcy5jYW1lcmFDb21wLm5vZGUuZ2V0V29ybGRSb3RhdGlvbih0aGlzLl9jdXJSb3QpO1xuXG4gICAgICAgIFZlYzMudHJhbnNmb3JtUXVhdCh0ZW1wVmVjM0EsIFZlYzMuVU5JVF9aLCB0aGlzLl9jdXJSb3QpO1xuICAgICAgICBWZWMzLm11bHRpcGx5U2NhbGFyKHRlbXBWZWMzQSwgdGVtcFZlYzNBLCB0aGlzLnZpZXdEaXN0KTtcbiAgICAgICAgVmVjMy5hZGQodGVtcFZlYzNCLCB0aGlzLnZpZXdDZW50ZXIsIHRlbXBWZWMzQSk7XG4gICAgICAgIHRoaXMuY2FtZXJhQ29tcC5ub2RlLnNldFdvcmxkUG9zaXRpb24odGVtcFZlYzNCKTtcblxuICAgICAgICB0aGlzLmNhbWVyYUNvbXAubm9kZS5sb29rQXQodGhpcy52aWV3Q2VudGVyKTtcbiAgICAgICAgY2NlLkVuZ2luZS5yZXBhaW50SW5FZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGaXREaXN0YW5jZShib3VuZGFyeTogZ2VvbWV0cnkuQUFCQiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFib3VuZGFyeSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3Q2VudGVyID0gYm91bmRhcnkuY2VudGVyO1xuICAgICAgICBjb25zdCBtYXhSYW5nZSA9IGJvdW5kYXJ5LmhhbGZFeHRlbnRzLmxlbmd0aCgpO1xuXG4gICAgICAgIC8vICDkuLrkuoborqnot53nprvnnIvotbfmnaXmm7ToiJLpgIJcbiAgICAgICAgY29uc3QgZGlzdFNjYWxhciA9IDEuMjtcbiAgICAgICAgY29uc3QgZm92ID0gdGhpcy5jYW1lcmFDb21wLmZvdjtcbiAgICAgICAgY29uc3QgZGVwdGhTaXplID0gTWF0aC50YW4oKChmb3YgLyAyKSAqIE1hdGguUEkpIC8gMTgwKTtcbiAgICAgICAgY29uc3QgZGlzdCA9IChtYXhSYW5nZSAqIGRpc3RTY2FsYXIpIC8gZGVwdGhTaXplO1xuICAgICAgICB0aGlzLmNhbWVyYUNvbXAubmVhciA9IGRpc3QgLSBtYXhSYW5nZTtcbiAgICAgICAgdGhpcy5jYW1lcmFDb21wLmZhciA9IGRpc3QgKyBtYXhSYW5nZTtcblxuICAgICAgICByZXR1cm4gZGlzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb3VzZURvd24oZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmlzTW91c2VEb3duID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmNhbWVyYUNvbXAubm9kZS5nZXRXb3JsZFJvdGF0aW9uKHRoaXMuX2N1clJvdCk7XG4gICAgICAgIHRoaXMuY2FtZXJhQ29tcC5ub2RlLmdldFdvcmxkUG9zaXRpb24odGhpcy5fY3VyUG9zKTtcblxuICAgICAgICBpZiAoKGV2ZW50LmJ1dHRvbiA9PT0gRXZlbnRNb3VzZS5CVVRUT05fTEVGVCB8fCAhZXZlbnQuYnV0dG9uKSkge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbWVyYUNvbXAubm9kZS5nZXRXb3JsZFJvdGF0aW9uKHRoaXMuY3VyQ2FtZXJhUm90KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb3VzZU1vdmUoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNNb3VzZURvd24pIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNb3VzZUxlZnQpIHtcbiAgICAgICAgICAgIHRoaXMucm90YXRlKGV2ZW50Lm1vdmVtZW50WCB8IDAsIGV2ZW50Lm1vdmVtZW50WSB8IDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW91c2VVcChldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuaXNNb3VzZURvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc01vdXNlTGVmdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vdXNlV2hlZWwoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLnNjYWxlKGV2ZW50LndoZWVsRGVsdGFZKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2NhbGUoZGVsdGE6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5fZmxpcFdoZWVsRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBkZWx0YSA9IC1kZWx0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbmFsRGVsdGEgPSAoKHRoaXMuY2FtZXJhQ29tcC5mYXIgLSB0aGlzLmNhbWVyYUNvbXAubmVhcikgLyAxMDApO1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jYW1lcmFDb21wLm5vZGU7XG4gICAgICAgIGNvbnN0IGN1clBvcyA9IHRoaXMuX2N1clBvcztcbiAgICAgICAgY29uc3QgZm9yd2FyZCA9IHRoaXMuX2ZvcndhcmQ7XG4gICAgICAgIGNvbnN0IHYzYSA9IHRoaXMuX3YzYTtcblxuICAgICAgICBub2RlLmdldFdvcmxkUG9zaXRpb24oY3VyUG9zKTtcbiAgICAgICAgbm9kZS5nZXRXb3JsZFJvdGF0aW9uKHRoaXMuX2N1clJvdCk7XG4gICAgICAgIFZlYzMudHJhbnNmb3JtUXVhdChmb3J3YXJkLCBWZWMzLlVOSVRfWiwgdGhpcy5fY3VyUm90KTtcblxuICAgICAgICBWZWMzLm11bHRpcGx5U2NhbGFyKHYzYSwgZm9yd2FyZCwgZmluYWxEZWx0YSAqIE1hdGguc2lnbihkZWx0YSkpO1xuICAgICAgICBWZWMzLmFkZChjdXJQb3MsIGN1clBvcywgdjNhKTtcbiAgICAgICAgbWFrZVZlYzNJblJhbmdlKGN1clBvcywgLTFlMTIsIDFlMTIpO1xuICAgICAgICBjb25zdCB0ZW1wRGlzdCA9IFZlYzMuZGlzdGFuY2UoY3VyUG9zLCB0aGlzLnZpZXdDZW50ZXIpO1xuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLmNhbWVyYUNvbXAubmVhciAqIDI7XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMuY2FtZXJhQ29tcC5mYXIgLyAzO1xuXG4gICAgICAgIC8vIGlmICh0ZW1wRGlzdCA+IG1pbiAmJiBtYXggPiB0ZW1wRGlzdCkge1xuICAgICAgICB0aGlzLnZpZXdEaXN0ID0gdGVtcERpc3Q7XG4gICAgICAgIG5vZGUuc2V0V29ybGRQb3NpdGlvbihjdXJQb3MpO1xuICAgICAgICAvLyB9XG5cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcm90YXRlKGR4OiBudW1iZXIsIGR5OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTW91c2VEb3duICYmICF0aGlzLmlzTW91c2VMZWZ0KSB7IHJldHVybjsgfVxuICAgICAgICB0aGlzLmNhbWVyYUNvbXAubm9kZS5nZXRXb3JsZFJvdGF0aW9uKHRoaXMuX2N1clJvdCk7XG4gICAgICAgIGNvbnN0IHJvdCA9IHRoaXMuX2N1clJvdDtcbiAgICAgICAgY29uc3QgZXVsZXIgPSBjYy52MygpO1xuXG4gICAgICAgIFF1YXQucm90YXRlWChyb3QsIHJvdCwgLWR5ICogdGhpcy5vcmJpdFJvdGF0ZVNwZWVkKTtcbiAgICAgICAgUXVhdC5yb3RhdGVBcm91bmQocm90LCByb3QsIFZlYzMuVU5JVF9ZLCAtZHggKiB0aGlzLm9yYml0Um90YXRlU3BlZWQpO1xuICAgICAgICBRdWF0LnRvRXVsZXIoZXVsZXIsIHJvdCk7XG5cbiAgICAgICAgUXVhdC5mcm9tRXVsZXIocm90LCBldWxlci54LCBldWxlci55LCAwKTsgLy8gY2xlYXIgcm90YXRlIG9mIHpcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2MudjMoMCwgMCwgMSk7XG4gICAgICAgIFZlYzMudHJhbnNmb3JtUXVhdChvZmZzZXQsIG9mZnNldCwgcm90KTtcbiAgICAgICAgVmVjMy5ub3JtYWxpemUob2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgICAgIFZlYzMubXVsdGlwbHlTY2FsYXIob2Zmc2V0LCBvZmZzZXQsIHRoaXMudmlld0Rpc3QpO1xuICAgICAgICBWZWMzLmFkZCh0aGlzLl9jdXJQb3MsIHRoaXMudmlld0NlbnRlciwgb2Zmc2V0KTtcbiAgICAgICAgdGhpcy5jYW1lcmFDb21wLm5vZGUuc2V0V29ybGRQb3NpdGlvbih0aGlzLl9jdXJQb3MpO1xuXG4gICAgICAgIGNvbnN0IHVwID0gY2MudjMoMCwgMSwgMCk7XG4gICAgICAgIFZlYzMudHJhbnNmb3JtUXVhdCh1cCwgdXAsIHJvdCk7XG4gICAgICAgIFZlYzMubm9ybWFsaXplKHVwLCB1cCk7XG4gICAgICAgIHRoaXMuY2FtZXJhQ29tcC5ub2RlLmxvb2tBdCh0aGlzLnZpZXdDZW50ZXIsIHVwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Wm9vbShzY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIC8v5ZCR5YmN5rua5YqoID4gMCDlkJHlkI7mu5rliqggPCAwXG4gICAgICAgIHRoaXMuY2FtZXJhQ29tcC5ub2RlLmxvb2tBdCh0aGlzLmNhbWVyYUNvbXAuY2FtZXJhLmZvcndhcmQpO1xuICAgICAgICB0aGlzLmNhbWVyYUNvbXAubm9kZS53b3JsZFBvc2l0aW9uLmFkZCh0aGlzLmNhbWVyYUNvbXAuY2FtZXJhLmZvcndhcmQubXVsdGlwbHlTY2FsYXIoc2NhbGUpKTtcbiAgICAgICAgdGhpcy5jYW1lcmFDb21wLm5vZGUuc2V0V29ybGRQb3NpdGlvbih0aGlzLmNhbWVyYUNvbXAubm9kZS53b3JsZFBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy52aWV3RGlzdCA9IFZlYzMuZGlzdGFuY2UodGhpcy5jYW1lcmFDb21wLm5vZGUud29ybGRQb3NpdGlvbiwgdGhpcy52aWV3Q2VudGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZSgpIHtcbiAgICAgICAgdGhpcy5jYW1lcmFDb21wLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IEludGVyYWN0aXZlUHJldmlldyB9O1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/contributions/preview/buffer.js b/extensions/shader-graph/dist/contributions/preview/buffer.js new file mode 100644 index 0000000..e76d568 --- /dev/null +++ b/extensions/shader-graph/dist/contributions/preview/buffer.js @@ -0,0 +1,206 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PreviewBuffer = void 0; +const cc_1 = require("cc"); +// @ts-ignore +module.paths.push(AppModulePath); +class PreviewBuffer { + constructor(registerName, name, scene = null) { + this.device = cc.director.root.device; + this.width = Math.floor(cc.director.root.mainWindow.width); + this.height = Math.floor(cc.director.root.mainWindow.height); + this.data = new Uint8Array(this.width * this.height * 4); + this.renderScene = null; + this.scene = null; + this.windows = {}; + this.window = null; + // windowList: IWindowInfo[] = []; + this.regions = [new cc_1.gfx.BufferTextureCopy()]; + this.lock = false; + this.needInvertGFXApi = [ + cc_1.gfx.API.GLES2, + cc_1.gfx.API.GLES3, + cc_1.gfx.API.WEBGL, + cc_1.gfx.API.WEBGL2, + ]; + this.renderData = { + width: this.width, + height: this.height, + buffer: this.data, + }; + this._name = name; + this._registerName = registerName; + this.onLoadScene(scene); + this.regions[0].texExtent.width = this.width; + this.regions[0].texExtent.height = this.height; + this.createWindow(); + this.queue = []; + } + resize(width, height, window = null) { + window || (window = this.window); + // only resize when window is render window + if (!window) + return; + width = Math.floor(width); + height = Math.floor(height); + this.renderData.width = this.width = width; + this.renderData.height = this.height = height; + this.regions[0].texExtent.width = width; + this.regions[0].texExtent.height = height; + window.resize(width, height); + this.renderData.buffer = this.data = new Uint8Array(this.width * this.height * 4); + } + /** + * WARNING: DO'NOT USE IT BEFORE DRAW!!! + */ + clear() { + // hack: resize width and height with 0 will be clear buff,realtime clear all data + if (!isSceneNative) { + this.resize(0, 0, this.window); // 原生场景会报错 + } + this.resize(this.width, this.height, this.window); + } + createWindow(uuid = null) { + if (uuid && this.windows[uuid]) { + this.window = this.windows[uuid]; + return; + } + const root = cc.director.root; + const renderPassInfo = new cc_1.gfx.RenderPassInfo([new cc_1.gfx.ColorAttachment(root.mainWindow.swapchain.colorTexture.format)], new cc_1.gfx.DepthStencilAttachment(root.mainWindow.swapchain.depthStencilTexture.format)); + renderPassInfo.colorAttachments[0].barrier = root.device.getGeneralBarrier(new cc_1.gfx.GeneralBarrierInfo(0, cc_1.gfx.AccessFlagBit.FRAGMENT_SHADER_READ_TEXTURE)); + const window = root.createWindow({ + title: this._name, + width: this.width, + height: this.height, + renderPassInfo, + isOffscreen: true, + }); + this.window = window; + uuid && (this.windows[uuid] = window); + } + removeWindow(uuid) { + if (uuid && this.windows[uuid]) { + cc.director.root.destroyWindow(this.windows[uuid]); + if (this.windows[uuid] === this.window) + this.window = null; + delete this.windows[uuid]; + } + } + onLoadScene(scene) { + this.windows = {}; + this.scene = scene; + this.renderScene = scene.renderScene; + } + switchCameras(camera, currWindow) { + if (currWindow) { + camera.isWindowSize = false; + camera.isEnable = true; + camera.changeTargetWindow(currWindow); + cc.director.root.tempWindow = currWindow; + } + } + copyFrameBuffer(window = null) { + window || (window = this.window); + if (!window || !window.framebuffer) + return this.renderData; + this.device.copyTextureToBuffers(window.framebuffer.colorTextures[0], [new Uint8Array(this.renderData.buffer.buffer)], this.regions); + this.formatBuffer(this.renderData.buffer, !this.needInvertGFXApi.includes(this.device.gfxAPI), this.device.gfxAPI === cc_1.gfx.API.METAL); + return this.renderData; + } + formatBuffer(buffer, needInvert, conversionBGRA) { + if (!needInvert) + return buffer; + let startIndex, invertIndex; + const V_U_Vec4 = { r: 0, g: 0, b: 0, a: 0 }; + const indexArr = conversionBGRA ? PreviewBuffer.indexOfBGRA : PreviewBuffer.indexOfRGBA; + for (let w = 0; w < this.renderData.width; w++) { + for (let h = 0; h <= this.renderData.height / 2; h++) { + startIndex = (h * this.renderData.width + w) * 4; + // invert index + invertIndex = ((this.renderData.height - h) * this.renderData.width + w) * 4; + // flip Y + V_U_Vec4.r = buffer[startIndex + indexArr[0]]; + V_U_Vec4.g = buffer[startIndex + indexArr[1]]; + V_U_Vec4.b = buffer[startIndex + indexArr[2]]; + V_U_Vec4.a = buffer[startIndex + indexArr[3]]; + buffer[startIndex + 0] = buffer[invertIndex + indexArr[0]]; + buffer[startIndex + 1] = buffer[invertIndex + indexArr[1]]; + buffer[startIndex + 2] = buffer[invertIndex + indexArr[2]]; + buffer[startIndex + 3] = buffer[invertIndex + indexArr[3]]; + buffer[invertIndex + 0] = V_U_Vec4.r; + buffer[invertIndex + 1] = V_U_Vec4.g; + buffer[invertIndex + 2] = V_U_Vec4.b; + buffer[invertIndex + 3] = V_U_Vec4.a; + } + } + return buffer; + } + getImageDataInQueue(width, height, event) { + const params = { + width: Math.floor(width), + height: Math.floor(height), + }; + this.queue.push({ + params, + event, + }); + this.step(); + } + async step() { + if (this.lock) { + return; + } + this.lock = true; + const item = this.queue.shift(); + if (!item) { + this.lock = false; + return; + } + const { params, event } = item; + const data = await this.getImageData(params.width, params.height); + event.reply(null, data); + this.lock = false; + this.step(); + } + async getImageData(width, height) { + if (!this.renderScene) { + return this.renderData; + } + cce.Engine.repaintInEditMode(); + const root = this.renderScene.root; + const currWindow = this.window; + if (!currWindow) { + return this.renderData; + } + let curWindowCamera = null; + if (root) { + for (const window of root.windows) { + if (window.cameras.length > 0 && window === currWindow) { + // 对于preview可以认为一个window对应一个view + curWindowCamera = window.cameras[0]; + } + } + } + if (!curWindowCamera) { + return this.renderData; + } + const needResize = width && height && (width !== this.width || height !== this.height); + if (needResize) { + this.resize(width, height, currWindow); + } + if (curWindowCamera.width !== this.width || curWindowCamera.height !== this.height) { + curWindowCamera.resize(width, height); + } + curWindowCamera.update(true); + // 取一帧渲染完的数据 + return await new Promise((resolve) => { + cc.director.once(cc.Director.EVENT_AFTER_DRAW, () => { + resolve(this.copyFrameBuffer(this.window)); + }); + }); + } +} +exports.PreviewBuffer = PreviewBuffer; +PreviewBuffer.indexOfRGBA = [0, 1, 2, 3]; // r=>0 g=>1 b=>2 a=>3 +PreviewBuffer.indexOfBGRA = [2, 1, 0, 3]; // r=>2 g=>1 b=>0 a=>3 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvcHJldmlldy9idWZmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQW1DO0FBS25DLGFBQWE7QUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQVNqQyxNQUFhLGFBQWE7SUFnQnRCLFlBQVksWUFBb0IsRUFBRSxJQUFZLEVBQUUsUUFBYSxJQUFJO1FBZGpFLFdBQU0sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDakMsVUFBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELFdBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxTQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BELGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLFVBQUssR0FBUSxJQUFJLENBQUM7UUFDbEIsWUFBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2Qsa0NBQWtDO1FBQ2xDLFlBQU8sR0FBRyxDQUFDLElBQUksUUFBRyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUd4QyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBdUZOLHFCQUFnQixHQUFHO1lBQ3RCLFFBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSztZQUNiLFFBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSztZQUNiLFFBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSztZ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QUFPLEVBQUUsRUFBRTtZQUNqQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtnQkFDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O0FBN09MLHNDQThPQztBQWhIVSx5QkFBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQSxzQkFBc0I7QUFDakQseUJBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUEsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2Z4LCByZW5kZXJlciB9IGZyb20gJ2NjJztcblxuZGVjbGFyZSBjb25zdCBjYzogYW55O1xuZGVjbGFyZSBjb25zdCBjY2U6IGFueTtcbmRlY2xhcmUgY29uc3QgaXNTY2VuZU5hdGl2ZTogYm9vbGVhbjtcbi8vIEB0cy1pZ25vcmVcbm1vZHVsZS5wYXRocy5wdXNoKEFwcE1vZHVsZVBhdGgpO1xuXG5leHBvcnQgaW50ZXJmYWNlIElXaW5kb3dJbmZvIHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHV1aWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgd2luZG93PzogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgUHJldmlld0J1ZmZlciB7XG4gICAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICAgIGRldmljZSA9IGNjLmRpcmVjdG9yLnJvb3QuZGV2aWNlO1xuICAgIHdpZHRoID0gTWF0aC5mbG9vcihjYy5kaXJlY3Rvci5yb290Lm1haW5XaW5kb3cud2lkdGgpO1xuICAgIGhlaWdodCA9IE1hdGguZmxvb3IoY2MuZGlyZWN0b3Iucm9vdC5tYWluV2luZG93LmhlaWdodCk7XG4gICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMud2lkdGggKiB0aGlzLmhlaWdodCAqIDQpO1xuICAgIHJlbmRlclNjZW5lOiBhbnkgPSBudWxsO1xuICAgIHNjZW5lOiBhbnkgPSBudWxsO1xuICAgIHdpbmRvd3M6IGFueSA9IHt9O1xuICAgIHdpbmRvdyA9IG51bGw7XG4gICAgLy8gd2luZG93TGlzdDogSVdpbmRvd0luZm9bXSA9IFtdO1xuICAgIHJlZ2lvbnMgPSBbbmV3IGdmeC5CdWZmZXJUZXh0dXJlQ29weSgpXTtcbiAgICByZW5kZXJEYXRhOiBhbnk7XG4gICAgcXVldWU6IGFueVtdO1xuICAgIGxvY2sgPSBmYWxzZTtcbiAgICBfcmVnaXN0ZXJOYW1lPzogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdGVyTmFtZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHNjZW5lOiBhbnkgPSBudWxsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIGJ1ZmZlcjogdGhpcy5kYXRhLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fcmVnaXN0ZXJOYW1lID0gcmVnaXN0ZXJOYW1lO1xuICAgICAgICB0aGlzLm9uTG9hZFNjZW5lKHNjZW5lKTtcbiAgICAgICAgdGhpcy5yZWdpb25zWzBdLnRleEV4dGVudC53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMucmVnaW9uc1swXS50ZXhFeHRlbnQuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIHRoaXMuY3JlYXRlV2luZG93KCk7XG4gICAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCB3aW5kb3c6IGFueSA9IG51bGwpIHtcbiAgICAgICAgd2luZG93IHx8ICh3aW5kb3cgPSB0aGlzLndpbmRvdyk7XG4gICAgICAgIC8vIG9ubHkgcmVzaXplIHdoZW4gd2luZG93IGlzIHJlbmRlciB3aW5kb3dcbiAgICAgICAgaWYgKCF3aW5kb3cpIHJldHVybjtcbiAgICAgICAgd2lkdGggPSBNYXRoLmZsb29yKHdpZHRoKTtcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5mbG9vcihoZWlnaHQpO1xuICAgICAgICB0aGlzLnJlbmRlckRhdGEud2lkdGggPSB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMucmVuZGVyRGF0YS5oZWlnaHQgPSB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy5yZWdpb25zWzBdLnRleEV4dGVudC53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLnJlZ2lvbnNbMF0udGV4RXh0ZW50LmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgd2luZG93LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXJEYXRhLmJ1ZmZlciA9IHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMud2lkdGggKiB0aGlzLmhlaWdodCAqIDQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXQVJOSU5HOiBETydOT1QgVVNFIElUIEJFRk9SRSBEUkFXISEhXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICAvLyBoYWNrOiByZXNpemUgd2lkdGggYW5kIGhlaWdodCB3aXRoIDAgd2lsbCBiZSBjbGVhciBidWZmLHJlYWx0aW1lIGNsZWFyIGFsbCBkYXRhXG4gICAgICAgIGlmICghaXNTY2VuZU5hdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemUoMCwgMCwgdGhpcy53aW5kb3cpOyAvLyDljp/nlJ/lnLrmma/kvJrmiqXplJlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy53aW5kb3cpO1xuICAgIH1cblxuICAgIGNyZWF0ZVdpbmRvdyh1dWlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgICAgICBpZiAodXVpZCAmJiB0aGlzLndpbmRvd3NbdXVpZF0pIHtcbiAgICAgICAgICAgIHRoaXMud2luZG93ID0gdGhpcy53aW5kb3dzW3V1aWRdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3QgPSBjYy5kaXJlY3Rvci5yb290O1xuICAgICAgICBjb25zdCByZW5kZXJQYXNzSW5mbyA9IG5ldyBnZnguUmVuZGVyUGFzc0luZm8oXG4gICAgICAgICAgICBbbmV3IGdmeC5Db2xvckF0dGFjaG1lbnQocm9vdC5tYWluV2luZG93LnN3YXBjaGFpbi5jb2xvclRleHR1cmUuZm9ybWF0KV0sXG4gICAgICAgICAgICBuZXcgZ2Z4LkRlcHRoU3RlbmNpbEF0dGFjaG1lbnQocm9vdC5tYWluV2luZG93LnN3YXBjaGFpbi5kZXB0aFN0ZW5jaWxUZXh0dXJlLmZvcm1hdCksXG4gICAgICAgICk7XG4gICAgICAgIHJlbmRlclBhc3NJbmZvLmNvbG9yQXR0YWNobWVudHNbMF0uYmFycmllciA9IHJvb3QuZGV2aWNlLmdldEdlbmVyYWxCYXJyaWVyKG5ldyBnZnguR2VuZXJhbEJhcnJpZXJJbmZvKDAsIGdmeC5BY2Nlc3NGbGFnQml0LkZSQUdNRU5UX1NIQURFUl9SRUFEX1RFWFRVUkUpKTtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gcm9vdC5jcmVhdGVXaW5kb3coe1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX25hbWUsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICByZW5kZXJQYXNzSW5mbyxcbiAgICAgICAgICAgIGlzT2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy53aW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIHV1aWQgJiYgKHRoaXMud2luZG93c1t1dWlkXSA9IHdpbmRvdyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlV2luZG93KHV1aWQ6IHN0cmluZykge1xuICAgICAgICBpZiAodXVpZCAmJiB0aGlzLndpbmRvd3NbdXVpZF0pIHtcbiAgICAgICAgICAgIGNjLmRpcmVjdG9yLnJvb3QuZGVzdHJveVdpbmRvdyh0aGlzLndpbmRvd3NbdXVpZF0pO1xuICAgICAgICAgICAgaWYgKHRoaXMud2luZG93c1t1dWlkXSA9PT0gdGhpcy53aW5kb3cpIHRoaXMud2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLndpbmRvd3NbdXVpZF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkxvYWRTY2VuZShzY2VuZTogYW55KSB7XG4gICAgICAgIHRoaXMud2luZG93cyA9IHt9O1xuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XG4gICAgICAgIHRoaXMucmVuZGVyU2NlbmUgPSBzY2VuZS5yZW5kZXJTY2VuZTtcblxuICAgIH1cblxuICAgIHN3aXRjaENhbWVyYXMoY2FtZXJhOiBhbnksIGN1cnJXaW5kb3c6IGFueSkge1xuICAgICAgICBpZiAoY3VycldpbmRvdykge1xuICAgICAgICAgICAgY2FtZXJhLmlzV2luZG93U2l6ZSA9IGZhbHNlO1xuICAgICAgICAgICAgY2FtZXJhLmlzRW5hYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbWVyYS5jaGFuZ2VUYXJnZXRXaW5kb3coY3VycldpbmRvdyk7XG4gICAgICAgICAgICBjYy5kaXJlY3Rvci5yb290LnRlbXBXaW5kb3cgPSBjdXJyV2luZG93O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5lZWRJbnZlcnRHRlhBcGkgPSBbXG4gICAgICAgIGdmeC5BUEkuR0xFUzIsXG4gICAgICAgIGdmeC5BUEkuR0xFUzMsXG4gICAgICAgIGdmeC5BUEkuV0VCR0wsXG4gICAgICAgIGdmeC5BUEkuV0VCR0wyLFxuICAgIF07XG5cbiAgICBjb3B5RnJhbWVCdWZmZXIod2luZG93OiBhbnkgPSBudWxsKSB7XG4gICAgICAgIHdpbmRvdyB8fCAod2luZG93ID0gdGhpcy53aW5kb3cpO1xuICAgICAgICBpZiAoIXdpbmRvdyB8fCAhd2luZG93LmZyYW1lYnVmZmVyKSByZXR1cm4gdGhpcy5yZW5kZXJEYXRhO1xuICAgICAgICB0aGlzLmRldmljZS5jb3B5VGV4dHVyZVRvQnVmZmVycyhcbiAgICAgICAgICAgIHdpbmRvdy5mcmFtZWJ1ZmZlci5jb2xvclRleHR1cmVzWzBdLFxuICAgICAgICAgICAgW25ldyBVaW50OEFycmF5KHRoaXMucmVuZGVyRGF0YS5idWZmZXIuYnVmZmVyKV0sXG4gICAgICAgICAgICB0aGlzLnJlZ2lvbnNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmZvcm1hdEJ1ZmZlcihcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRGF0YS5idWZmZXIsXG4gICAgICAgICAgICAhdGhpcy5uZWVkSW52ZXJ0R0ZYQXBpLmluY2x1ZGVzKHRoaXMuZGV2aWNlLmdmeEFQSSksXG4gICAgICAgICAgICB0aGlzLmRldmljZS5nZnhBUEkgPT09IGdmeC5BUEkuTUVUQUxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJEYXRhO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbmRleE9mUkdCQSA9IFswLCAxLCAyLCAzXTsvLyByPT4wIGc9PjEgYj0+MiBhPT4zXG4gICAgc3RhdGljIGluZGV4T2ZCR1JBID0gWzIsIDEsIDAsIDNdOy8vIHI9PjIgZz0+MSBiPT4wIGE9PjNcbiAgICBmb3JtYXRCdWZmZXIoYnVmZmVyOiBVaW50OEFycmF5LCBuZWVkSW52ZXJ0OiBib29sZWFuLCBjb252ZXJzaW9uQkdSQTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIW5lZWRJbnZlcnQpIHJldHVybiBidWZmZXI7XG5cbiAgICAgICAgbGV0IHN0YXJ0SW5kZXgsIGludmVydEluZGV4O1xuICAgICAgICBjb25zdCBWX1VfVmVjNCA9IHsgcjogMCwgZzogMCwgYjogMCwgYTogMCB9O1xuXG4gICAgICAgIGNvbnN0IGluZGV4QXJyID0gY29udmVyc2lvbkJHUkEgPyBQcmV2aWV3QnVmZmVyLmluZGV4T2ZCR1JBIDogUHJldmlld0J1ZmZlci5pbmRleE9mUkdCQTtcblxuICAgICAgICBmb3IgKGxldCB3ID0gMDsgdyA8IHRoaXMucmVuZGVyRGF0YS53aWR0aDsgdysrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBoID0gMDsgaCA8PSB0aGlzLnJlbmRlckRhdGEuaGVpZ2h0IC8gMjsgaCsrKSB7XG5cbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKGggKiB0aGlzLnJlbmRlckRhdGEud2lkdGggKyB3KSAqIDQ7XG4gICAgICAgICAgICAgICAgLy8gaW52ZXJ0IGluZGV4XG4gICAgICAgICAgICAgICAgaW52ZXJ0SW5kZXggPSAoKHRoaXMucmVuZGVyRGF0YS5oZWlnaHQgLSBoKSAqIHRoaXMucmVuZGVyRGF0YS53aWR0aCArIHcpICogNDtcblxuICAgICAgICAgICAgICAgIC8vIGZsaXAgWVxuICAgICAgICAgICAgICAgIFZfVV9WZWM0LnIgPSBidWZmZXJbc3RhcnRJbmRleCArIGluZGV4QXJyWzBdXTtcbiAgICAgICAgICAgICAgICBWX1VfVmVjNC5nID0gYnVmZmVyW3N0YXJ0SW5kZXggKyBpbmRleEFyclsxXV07XG4gICAgICAgICAgICAgICAgVl9VX1ZlYzQuYiA9IGJ1ZmZlcltzdGFydEluZGV4ICsgaW5kZXhBcnJbMl1dO1xuICAgICAgICAgICAgICAgIFZfVV9WZWM0LmEgPSBidWZmZXJbc3RhcnRJbmRleCArIGluZGV4QXJyWzNdXTtcblxuICAgICAgICAgICAgICAgIGJ1ZmZlcltzdGFydEluZGV4ICsgMF0gPSBidWZmZXJbaW52ZXJ0SW5kZXggKyBpbmRleEFyclswXV07XG4gICAgICAgICAgICAgICAgYnVmZmVyW3N0YXJ0SW5kZXggKyAxXSA9IGJ1ZmZlcltpbnZlcnRJbmRleCArIGluZGV4QXJyWzFdXTtcbiAgICAgICAgICAgICAgICBidWZmZXJbc3RhcnRJbmRleCArIDJdID0gYnVmZmVyW2ludmVydEluZGV4ICsgaW5kZXhBcnJbMl1dO1xuICAgICAgICAgICAgICAgIGJ1ZmZlcltzdGFydEluZGV4ICsgM10gPSBidWZmZXJbaW52ZXJ0SW5kZXggKyBpbmRleEFyclszXV07XG5cbiAgICAgICAgICAgICAgICBidWZmZXJbaW52ZXJ0SW5kZXggKyAwXSA9IFZfVV9WZWM0LnI7XG4gICAgICAgICAgICAgICAgYnVmZmVyW2ludmVydEluZGV4ICsgMV0gPSBWX1VfVmVjNC5nO1xuICAgICAgICAgICAgICAgIGJ1ZmZlcltpbnZlcnRJbmRleCArIDJdID0gVl9VX1ZlYzQuYjtcbiAgICAgICAgICAgICAgICBidWZmZXJbaW52ZXJ0SW5kZXggKyAzXSA9IFZfVV9WZWM0LmE7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2VEYXRhSW5RdWV1ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICB3aWR0aDogTWF0aC5mbG9vcih3aWR0aCksXG4gICAgICAgICAgICBoZWlnaHQ6IE1hdGguZmxvb3IoaGVpZ2h0KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdGVwKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RlcCgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9jaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9jayA9IHRydWU7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5sb2NrID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYXJhbXMsIGV2ZW50IH0gPSBpdGVtO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRJbWFnZURhdGEocGFyYW1zLndpZHRoLCBwYXJhbXMuaGVpZ2h0KTtcbiAgICAgICAgZXZlbnQucmVwbHkobnVsbCwgZGF0YSk7XG4gICAgICAgIHRoaXMubG9jayA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0ZXAoKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJbWFnZURhdGEod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlclNjZW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJEYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNjZS5FbmdpbmUucmVwYWludEluRWRpdE1vZGUoKTtcblxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yZW5kZXJTY2VuZS5yb290O1xuICAgICAgICBjb25zdCBjdXJyV2luZG93ID0gdGhpcy53aW5kb3c7XG4gICAgICAgIGlmICghY3VycldpbmRvdykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXJXaW5kb3dDYW1lcmE6IHJlbmRlcmVyLnNjZW5lLkNhbWVyYSB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsO1xuICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB3aW5kb3cgb2Ygcm9vdC53aW5kb3dzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5jYW1lcmFzLmxlbmd0aCA+IDAgJiYgd2luZG93ID09PSBjdXJyV2luZG93KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOWvueS6jnByZXZpZXflj6/ku6XorqTkuLrkuIDkuKp3aW5kb3flr7nlupTkuIDkuKp2aWV3XG4gICAgICAgICAgICAgICAgICAgIGN1cldpbmRvd0NhbWVyYSA9IHdpbmRvdy5jYW1lcmFzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY3VyV2luZG93Q2FtZXJhKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmVlZFJlc2l6ZSA9IHdpZHRoICYmIGhlaWdodCAmJiAod2lkdGggIT09IHRoaXMud2lkdGggfHwgaGVpZ2h0ICE9PSB0aGlzLmhlaWdodCk7XG4gICAgICAgIGlmIChuZWVkUmVzaXplKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0LCBjdXJyV2luZG93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJXaW5kb3dDYW1lcmEud2lkdGggIT09IHRoaXMud2lkdGggfHwgY3VyV2luZG93Q2FtZXJhLmhlaWdodCAhPT0gdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIGN1cldpbmRvd0NhbWVyYS5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJXaW5kb3dDYW1lcmEudXBkYXRlKHRydWUpO1xuXG4gICAgICAgIC8vIOWPluS4gOW4p+a4suafk+WujOeahOaVsOaNrlxuICAgICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNjLmRpcmVjdG9yLm9uY2UoY2MuRGlyZWN0b3IuRVZFTlRfQUZURVJfRFJBVywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5jb3B5RnJhbWVCdWZmZXIodGhpcy53aW5kb3cpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/contributions/preview/index.js b/extensions/shader-graph/dist/contributions/preview/index.js new file mode 100644 index 0000000..2b2b0c6 --- /dev/null +++ b/extensions/shader-graph/dist/contributions/preview/index.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PreviewManager = void 0; +const shader_graph_preview_1 = require("./shader-graph-preview"); +class PreviewManager { + constructor() { + this.loaded = false; + } + async load() { + if (!this.loaded) { + // 要确保编辑器预览插件比这个先注册 + const ccePreview = cce.Preview; + await ccePreview.initPreview('shader-graph-preview', 'query-shader-graph-preview-data', shader_graph_preview_1.shaderGraphPreview); + this.loaded = true; + } + } + unload() { } +} +exports.PreviewManager = PreviewManager; +const previewManager = new PreviewManager(); +exports.default = previewManager; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy9wcmV2aWV3L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlFQUE0RDtBQUc1RCxNQUFhLGNBQWM7SUFBM0I7UUFDSSxXQUFNLEdBQUcsS0FBSyxDQUFDO0lBVW5CLENBQUM7SUFURyxLQUFLLENBQUMsSUFBSTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsbUJBQW1CO1lBQ25CLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDL0IsTUFBTSxVQUFVLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLGlDQUFpQyxFQUFFLHlDQUFrQixDQUFDLENBQUM7WUFDNUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBQ0QsTUFBTSxLQUFJLENBQUM7Q0FDZDtBQVhELHdDQVdDO0FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUM1QyxrQkFBZSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFkZXJHcmFwaFByZXZpZXcgfSBmcm9tICcuL3NoYWRlci1ncmFwaC1wcmV2aWV3JztcbmRlY2xhcmUgY29uc3QgY2NlOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBQcmV2aWV3TWFuYWdlciB7XG4gICAgbG9hZGVkID0gZmFsc2U7XG4gICAgYXN5bmMgbG9hZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRlZCkge1xuICAgICAgICAgICAgLy8g6KaB56Gu5L+d57yW6L6R5Zmo6aKE6KeI5o+S5Lu25q+U6L+Z5Liq5YWI5rOo5YaMXG4gICAgICAgICAgICBjb25zdCBjY2VQcmV2aWV3ID0gY2NlLlByZXZpZXc7XG4gICAgICAgICAgICBhd2FpdCBjY2VQcmV2aWV3LmluaXRQcmV2aWV3KCdzaGFkZXItZ3JhcGgtcHJldmlldycsICdxdWVyeS1zaGFkZXItZ3JhcGgtcHJldmlldy1kYXRhJywgc2hhZGVyR3JhcGhQcmV2aWV3KTtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1bmxvYWQoKSB7fVxufVxuY29uc3QgcHJldmlld01hbmFnZXIgPSBuZXcgUHJldmlld01hbmFnZXIoKTtcbmV4cG9ydCBkZWZhdWx0IHByZXZpZXdNYW5hZ2VyO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/contributions/preview/preview-base.js b/extensions/shader-graph/dist/contributions/preview/preview-base.js new file mode 100644 index 0000000..d177e0e --- /dev/null +++ b/extensions/shader-graph/dist/contributions/preview/preview-base.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PreviewBase = void 0; +class PreviewBase { + async queryPreviewData(info) { + return (await this.previewBuffer.getImageData(info.width, info.height)); + } + queryPreviewDataQueue(info, event) { + this.previewBuffer.getImageDataInQueue(info.width, info.height, event); + } + clearPreviewBuffer() { + this.previewBuffer.clear(); + } + init(registerName, queryName) { } +} +exports.PreviewBase = PreviewBase; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvcHJldmlldy9wcmV2aWV3LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsTUFBTSxXQUFXO0lBRU4sS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQVM7UUFDbkMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRU0scUJBQXFCLENBQUMsSUFBUyxFQUFFLEtBQVU7UUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELGtCQUFrQjtRQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVNLElBQUksQ0FBQyxZQUFvQixFQUFFLFNBQWlCLElBQUksQ0FBQztDQUMzRDtBQUVRLGtDQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJldmlld0J1ZmZlciB9IGZyb20gJy4vYnVmZmVyJztcblxuY2xhc3MgUHJldmlld0Jhc2Uge1xuICAgIHByb3RlY3RlZCBwcmV2aWV3QnVmZmVyITogUHJldmlld0J1ZmZlcjtcbiAgICBwdWJsaWMgYXN5bmMgcXVlcnlQcmV2aWV3RGF0YShpbmZvOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLnByZXZpZXdCdWZmZXIuZ2V0SW1hZ2VEYXRhKCBpbmZvLndpZHRoLCBpbmZvLmhlaWdodCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBxdWVyeVByZXZpZXdEYXRhUXVldWUoaW5mbzogYW55LCBldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMucHJldmlld0J1ZmZlci5nZXRJbWFnZURhdGFJblF1ZXVlKCBpbmZvLndpZHRoLCBpbmZvLmhlaWdodCwgZXZlbnQpO1xuICAgIH1cbiAgICBjbGVhclByZXZpZXdCdWZmZXIoKSB7XG4gICAgICAgIHRoaXMucHJldmlld0J1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0KHJlZ2lzdGVyTmFtZTogc3RyaW5nLCBxdWVyeU5hbWU6IHN0cmluZykgeyB9XG59XG5cbmV4cG9ydCB7IFByZXZpZXdCYXNlIH07XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/contributions/preview/shader-graph-preview.js b/extensions/shader-graph/dist/contributions/preview/shader-graph-preview.js new file mode 100644 index 0000000..ab82d97 --- /dev/null +++ b/extensions/shader-graph/dist/contributions/preview/shader-graph-preview.js @@ -0,0 +1,185 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.shaderGraphPreview = void 0; +const cc_1 = require("cc"); +const Interactive_preview_1 = require("./Interactive-preview"); +const regions = [new cc_1.gfx.BufferTextureCopy()]; +regions[0].texExtent.depth = 1; +function insertAdditionals(geometry) { + if (!geometry.customAttributes) { + geometry.customAttributes = []; + } + geometry.customAttributes.push({ + attr: new cc_1.gfx.Attribute(cc_1.gfx.AttributeName.ATTR_TANGENT, cc_1.gfx.Format.RGBA32F), + values: EditorExtends.GeometryUtils.calculateTangents(geometry.positions, geometry.indices, geometry.normals, geometry.uvs), + }); + return geometry; +} +const primitiveData = { + box: { + mesh: cc_1.utils.createMesh(insertAdditionals(cc_1.primitives.box())), + scale: new cc_1.Vec3(1, 1, 1), + }, + sphere: { + mesh: cc_1.utils.createMesh(insertAdditionals(cc_1.primitives.sphere())), + scale: new cc_1.Vec3(1, 1, 1), + }, + capsule: { + mesh: cc_1.utils.createMesh(insertAdditionals(cc_1.primitives.capsule())), + scale: new cc_1.Vec3(0.8, 0.8, 0.8), + }, + cylinder: { + mesh: cc_1.utils.createMesh(insertAdditionals(cc_1.primitives.cylinder())), + scale: new cc_1.Vec3(0.8, 0.8, 0.8), + }, + torus: { + mesh: cc_1.utils.createMesh(insertAdditionals(cc_1.primitives.torus())), + scale: new cc_1.Vec3(1, 1, 1), + }, + cone: { + mesh: cc_1.utils.createMesh(insertAdditionals(cc_1.primitives.cone())), + scale: new cc_1.Vec3(1, 1, 1), + }, + quad: { + mesh: cc_1.utils.createMesh(insertAdditionals(cc_1.primitives.quad())), + scale: new cc_1.Vec3(1, 1, 1), + }, +}; +const tempVec3A = new cc_1.Vec3(); +const tempVec3B = new cc_1.Vec3(); +const tempQuatA = new cc_1.Quat(); +const _matInsInfo = { + parent: null, + owner: null, + subModelIdx: 0, +}; +class ShaderGraphPreview extends Interactive_preview_1.InteractivePreview { + constructor() { + super(...arguments); + this.primitive = 'sphere'; + this.material = null; + this.cacheMeshs = {}; + } + init(registerName, queryName) { + super.init(registerName, queryName); + const device = cc_1.director.root.device; + this.uniformBuffer = device.createBuffer(new cc_1.gfx.BufferInfo(cc_1.gfx.BufferUsageBit.UNIFORM, cc_1.gfx.MemoryUsageBit.HOST | cc_1.gfx.MemoryUsageBit.DEVICE, 16)); + this.dummyUniformBuffer = device.createBuffer(new cc_1.gfx.BufferViewInfo(this.uniformBuffer, 0, this.uniformBuffer.size)); + this.storageBuffer = !isSceneNative ? this.uniformBuffer : device.createBuffer(new cc_1.gfx.BufferInfo(cc_1.gfx.BufferUsageBit.STORAGE, cc_1.gfx.MemoryUsageBit.HOST | cc_1.gfx.MemoryUsageBit.DEVICE, 16)); + this.dummyStorageBuffer = !isSceneNative ? this.dummyUniformBuffer : + device.createBuffer(new cc_1.gfx.BufferViewInfo(this.storageBuffer, 0, this.storageBuffer.size)); + this.dummySampleTexture = device.createTexture(new cc_1.gfx.TextureInfo(cc_1.gfx.TextureType.TEX2D, cc_1.gfx.TextureUsageBit.SAMPLED, cc_1.gfx.Format.RGBA8, 4, 4)); + this.dummyStorageTexture = !isSceneNative ? this.dummySampleTexture : device.createTexture(new cc_1.gfx.TextureInfo(cc_1.gfx.TextureType.TEX2D, cc_1.gfx.TextureUsageBit.STORAGE, cc_1.gfx.Format.RGBA8, 4, 4)); + this.dummySampler = device.getSampler(new cc_1.gfx.SamplerInfo()); + } + createNodes() { + this.lightComp = new cc.Node('Shader Graph Preview Light').addComponent(cc_1.DirectionalLight); + this.lightComp.node.setRotationFromEuler(-45, -45, 0); + this.lightComp.node.setParent(this.scene); + this.modelComp = new cc_1.Node('Shader Graph Preview Model').addComponent(cc_1.MeshRenderer); + this.modelComp.mesh = primitiveData.sphere.mesh; + const material = new cc_1.Material(); + material.initialize({ effectName: 'builtin-standard' }); + this.modelComp.material = material; + this.setMaterial(material); + this.modelComp.node.setParent(this.scene); + } + setMaterial(material) { + if (material && material !== this.material) { + const comp = this.modelComp; + _matInsInfo.parent = material; + _matInsInfo.owner = comp; + const instantiated = new cc_1.renderer.MaterialInstance(_matInsInfo); + comp.material = instantiated; + this.material = material; + this.updateDs(); + this.cameraComp.enabled = true; + this.cameraComp.node.getWorldPosition(tempVec3A); + this.modelComp.node.getWorldPosition(tempVec3B); + this.viewDist = cc_1.Vec3.distance(tempVec3A, tempVec3B); + } + } + // 部分材质如果没有调用该方法会有报错,如spine相关材质 + // 大部分材质不需要调用也会正常预览 + updateDs() { + const model = this.modelComp.model; + if (model) { + for (let i = 0; i < model.subModels.length; i++) { + const ds = model.subModels[i].descriptorSet; + const bindings = ds.layout.bindings; + const device = cc_1.director.root.device; + for (let j = 0; j < bindings.length; j++) { + const desc = bindings[j]; + const binding = desc.binding; + const dsType = desc.descriptorType; + // bind buffer + if (dsType & cc_1.gfx.DescriptorType.UNIFORM_BUFFER || + dsType & cc_1.gfx.DescriptorType.DYNAMIC_UNIFORM_BUFFER) { + if (!ds.getBuffer(binding)) { + ds.bindBuffer(binding, this.dummyUniformBuffer); + } + } + else if (dsType & cc_1.gfx.DescriptorType.STORAGE_BUFFER || + dsType & cc_1.gfx.DescriptorType.DYNAMIC_STORAGE_BUFFER) { + if (!ds.getBuffer(binding)) { + ds.bindBuffer(binding, this.dummyStorageBuffer); + } + } + // binde texture + else if (dsType & cc_1.gfx.DESCRIPTOR_SAMPLER_TYPE) { + if (!ds.getTexture(binding)) { + if (dsType & cc_1.gfx.DescriptorType.SAMPLER_TEXTURE || + dsType & cc_1.gfx.DescriptorType.TEXTURE) { + ds.bindTexture(binding, this.dummySampleTexture); + } + else if (dsType & cc_1.gfx.DescriptorType.STORAGE_IMAGE) { + ds.bindTexture(binding, this.dummyStorageTexture); + } + } + if (!ds.getSampler(binding)) { + ds.bindSampler(binding, this.dummySampler); + } + } + } + ds.update(); + } + } + } + setMesh(primitive, mesh, scale = cc_1.Vec3.ONE) { + this.modelComp.mesh = mesh; + // 在部分情况下,该接口会先于setMaterial调用 #12259 + // 如果上个材质刚好和目标材质类型不同,就会导致引擎底层无法正确绑定纹理,从而报错 + this.updateDs(); + this.modelComp.node.setScale(scale); + this.primitive = primitive; + this.cameraComp.enabled = true; + } + setPrimitive(primitive) { + if (primitive && primitive !== this.primitive) { + const cacheMesh = this.cacheMeshs[primitive]; + if (!cacheMesh) { + cc.assetManager.loadAny(primitive, (err, mesh) => { + if (err) { + return console.error(err); + } + this.cacheMeshs[primitive] = mesh; + this.setMesh(primitive, mesh); + }); + } + else { + this.setMesh(primitive, cacheMesh); + } + } + } + setLightEnable(enable) { + if (this.lightComp.enabled !== enable) { + this.lightComp.enabled = enable; + } + } + resetCamera() { + super.resetCamera(this.modelComp.node); + } +} +const shaderGraphPreview = new ShaderGraphPreview(); +exports.shaderGraphPreview = shaderGraphPreview; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZGVyLWdyYXBoLXByZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy9wcmV2aWV3L3NoYWRlci1ncmFwaC1wcmV2aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsMkJBY1k7QUFNWiwrREFBMkQ7QUFDM0QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLFFBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFDOUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBRS9CLFNBQVMsaUJBQWlCLENBQUMsUUFBOEI7SUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUM1QixRQUFRLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0tBQ2xDO0lBQ0QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQUMzQixJQUFJLEVBQUUsSUFBSSxRQUFHLENBQUMsU0FBUyxDQUFDLFFBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLFFBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzNFLE1BQU0sRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLE9BQVEsRUFBRSxRQUFRLENBQUMsT0FBUSxFQUFFLFFBQVEsQ0FBQyxHQUFJLENBQWE7S0FDN0ksQ0FBQyxDQUFDO0lBQ0gsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQU9ELE1BQU0sYUFBYSxHQUFtQztJQUNsRCxHQUFHLEVBQUU7UUFDRCxJQUFJLEVBQUUsVUFBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzRCxLQUFLLEVBQUUsSUFBSSxTQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDM0I7SUFDRCxNQUFNLEVBQUU7UUFDSixJQUFJLEVBQUUsVUFBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM5RCxLQUFLLEVBQUUsSUFBSSxTQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDM0I7SUFDRCxPQUFPLEVBQUU7UUFDTCxJQUFJLEVBQUUsVUFBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMvRCxLQUFLLEVBQUUsSUFBSSxTQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7S0FDakM7SUFDRCxRQUFRLEVBQUU7UUFDTixJQUFJLEVBQUUsVUFBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRSxLQUFLLEVBQUUsSUFBSSxTQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7S0FDakM7SUFDRCxLQUFLLEVBQUU7UUFDSCxJQUFJLEVBQUUsVUFBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM3RCxLQUFLLEVBQUUsSUFBSSxTQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDM0I7SUFDRCxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUUsVUFBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RCxLQUFLLEVBQUUsSUFBSSxTQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDM0I7SUFDRCxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUUsVUFBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFVLENBQUMsSUFBSSxF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LENBQUMsQ0FBQztxQkFDN0I7b0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNO2dCQUNILElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0o7SUFDTCxDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQWU7UUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1NBQ25DO0lBQ0wsQ0FBQztJQUVNLFdBQVc7UUFDZCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNKO0FBRUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7QUFFM0MsZ0RBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge1xuICAgIERpcmVjdGlvbmFsTGlnaHQsXG4gICAgZ2Z4LFxuICAgIE1hdGVyaWFsLFxuICAgIE1lc2gsXG4gICAgTWVzaFJlbmRlcmVyLFxuICAgIHByaW1pdGl2ZXMsXG4gICAgUXVhdCxcbiAgICBSZW5kZXJlcixcbiAgICByZW5kZXJlcixcbiAgICB1dGlscyxcbiAgICBWZWMzLFxuICAgIGRpcmVjdG9yLFxuICAgIE5vZGUsXG59IGZyb20gJ2NjJztcblxuZGVjbGFyZSBjb25zdCBjYzogYW55O1xuZGVjbGFyZSBjb25zdCBFZGl0b3JFeHRlbmRzOiBhbnk7XG5kZWNsYXJlIGNvbnN0IGlzU2NlbmVOYXRpdmU6IGJvb2xlYW47XG5cbmltcG9ydCB7IEludGVyYWN0aXZlUHJldmlldyB9IGZyb20gJy4vSW50ZXJhY3RpdmUtcHJldmlldyc7XG5jb25zdCByZWdpb25zID0gW25ldyBnZnguQnVmZmVyVGV4dHVyZUNvcHkoKV07XG5yZWdpb25zWzBdLnRleEV4dGVudC5kZXB0aCA9IDE7XG5cbmZ1bmN0aW9uIGluc2VydEFkZGl0aW9uYWxzKGdlb21ldHJ5OiBwcmltaXRpdmVzLklHZW9tZXRyeSkge1xuICAgIGlmICghZ2VvbWV0cnkuY3VzdG9tQXR0cmlidXRlcykge1xuICAgICAgICBnZW9tZXRyeS5jdXN0b21BdHRyaWJ1dGVzID0gW107XG4gICAgfVxuICAgIGdlb21ldHJ5LmN1c3RvbUF0dHJpYnV0ZXMucHVzaCh7XG4gICAgICAgIGF0dHI6IG5ldyBnZnguQXR0cmlidXRlKGdmeC5BdHRyaWJ1dGVOYW1lLkFUVFJfVEFOR0VOVCwgZ2Z4LkZvcm1hdC5SR0JBMzJGKSxcbiAgICAgICAgdmFsdWVzOiBFZGl0b3JFeHRlbmRzLkdlb21ldHJ5VXRpbHMuY2FsY3VsYXRlVGFuZ2VudHMoZ2VvbWV0cnkucG9zaXRpb25zLCBnZW9tZXRyeS5pbmRpY2VzISwgZ2VvbWV0cnkubm9ybWFscyEsIGdlb21ldHJ5LnV2cyEpIGFzIG51bWJlcltdLFxuICAgIH0pO1xuICAgIHJldHVybiBnZW9tZXRyeTtcbn1cblxuaW50ZXJmYWNlIElQcmltaXRpdmVJbmZvIHtcbiAgICBtZXNoOiBNZXNoO1xuICAgIHNjYWxlOiBWZWMzO1xufVxuXG5jb25zdCBwcmltaXRpdmVEYXRhOiBSZWNvcmQ8c3RyaW5nLCBJUHJpbWl0aXZlSW5mbz4gPSB7XG4gICAgYm94OiB7XG4gICAgICAgIG1lc2g6IHV0aWxzLmNyZWF0ZU1lc2goaW5zZXJ0QWRkaXRpb25hbHMocHJpbWl0aXZlcy5ib3goKSkpLFxuICAgICAgICBzY2FsZTogbmV3IFZlYzMoMSwgMSwgMSksXG4gICAgfSxcbiAgICBzcGhlcmU6IHtcbiAgICAgICAgbWVzaDogdXRpbHMuY3JlYXRlTWVzaChpbnNlcnRBZGRpdGlvbmFscyhwcmltaXRpdmVzLnNwaGVyZSgpKSksXG4gICAgICAgIHNjYWxlOiBuZXcgVmVjMygxLCAxLCAxKSxcbiAgICB9LFxuICAgIGNhcHN1bGU6IHtcbiAgICAgICAgbWVzaDogdXRpbHMuY3JlYXRlTWVzaChpbnNlcnRBZGRpdGlvbmFscyhwcmltaXRpdmVzLmNhcHN1bGUoKSkpLFxuICAgICAgICBzY2FsZTogbmV3IFZlYzMoMC44LCAwLjgsIDAuOCksXG4gICAgfSxcbiAgICBjeWxpbmRlcjoge1xuICAgICAgICBtZXNoOiB1dGlscy5jcmVhdGVNZXNoKGluc2VydEFkZGl0aW9uYWxzKHByaW1pdGl2ZXMuY3lsaW5kZXIoKSkpLFxuICAgICAgICBzY2FsZTogbmV3IFZlYzMoMC44LCAwLjgsIDAuOCksXG4gICAgfSxcbiAgICB0b3J1czoge1xuICAgICAgICBtZXNoOiB1dGlscy5jcmVhdGVNZXNoKGluc2VydEFkZGl0aW9uYWxzKHByaW1pdGl2ZXMudG9ydXMoKSkpLFxuICAgICAgICBzY2FsZTogbmV3IFZlYzMoMSwgMSwgMSksXG4gICAgfSxcbiAgICBjb25lOiB7XG4gICAgICAgIG1lc2g6IHV0aWxzLmNyZWF0ZU1lc2goaW5zZXJ0QWRkaXRpb25hbHMocHJpbWl0aXZlcy5jb25lKCkpKSxcbiAgICAgICAgc2NhbGU6IG5ldyBWZWMzKDEsIDEsIDEpLFxuICAgIH0sXG4gICAgcXVhZDoge1xuICAgICAgICBtZXNoOiB1dGlscy5jcmVhdGVNZXNoKGluc2VydEFkZGl0aW9uYWxzKHByaW1pdGl2ZXMucXVhZCgpKSksXG4gICAgICAgIHNjYWxlOiBuZXcgVmVjMygxLCAxLCAxKSxcbiAgICB9LFxufTtcblxuY29uc3QgdGVtcFZlYzNBID0gbmV3IFZlYzMoKTtcbmNvbnN0IHRlbXBWZWMzQiA9IG5ldyBWZWMzKCk7XG5jb25zdCB0ZW1wUXVhdEEgPSBuZXcgUXVhdCgpO1xuXG5jb25zdCBfbWF0SW5zSW5mbyA9IHtcbiAgICBwYXJlbnQ6IG51bGwhIGFzIE1hdGVyaWFsLFxuICAgIG93bmVyOiBudWxsISBhcyBSZW5kZXJlcixcbiAgICBzdWJNb2RlbElkeDogMCxcbn07XG5cbmNsYXNzIFNoYWRlckdyYXBoUHJldmlldyBleHRlbmRzIEludGVyYWN0aXZlUHJldmlldyB7XG4gICAgcHJpdmF0ZSBsaWdodENvbXAhOiBEaXJlY3Rpb25hbExpZ2h0O1xuICAgIHByaXZhdGUgbW9kZWxDb21wITogTWVzaFJlbmRlcmVyO1xuICAgIHByaXZhdGUgcHJpbWl0aXZlID0gJ3NwaGVyZSc7XG4gICAgcHJpdmF0ZSBtYXRlcmlhbDogTWF0ZXJpYWwgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgZHVtbXlVbmlmb3JtQnVmZmVyITogZ2Z4LkJ1ZmZlcjtcblxuICAgIHByaXZhdGUgZHVtbXlTdG9yYWdlVGV4dHVyZSE6IGdmeC5UZXh0dXJlO1xuICAgIHByaXZhdGUgZHVtbXlTYW1wbGVUZXh0dXJlITogZ2Z4LlRleHR1cmU7XG4gICAgcHJpdmF0ZSBkdW1teVNhbXBsZXIhOiBnZnguU2FtcGxlcjtcblxuICAgIHByaXZhdGUgZHVtbXlTdG9yYWdlQnVmZmVyITogZ2Z4LkJ1ZmZlcjtcbiAgICBwcml2YXRlIHVuaWZvcm1CdWZmZXIhOiBnZnguQnVmZmVyO1xuICAgIHByaXZhdGUgc3RvcmFnZUJ1ZmZlciE6IGdmeC5CdWZmZXI7XG5cbiAgICBwcml2YXRlIGNhY2hlTWVzaHM6IFJlY29yZDxzdHJpbmcsIE1lc2g+ID0ge307XG5cbiAgICBwdWJsaWMgaW5pdChyZWdpc3Rlck5hbWU6IHN0cmluZywgcXVlcnlOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIuaW5pdChyZWdpc3Rlck5hbWUsIHF1ZXJ5TmFtZSk7XG5cbiAgICAgICAgY29uc3QgZGV2aWNlID0gZGlyZWN0b3Iucm9vdCEuZGV2aWNlO1xuXG4gICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIobmV3IGdmeC5CdWZmZXJJbmZvKFxuICAgICAgICAgICAgZ2Z4LkJ1ZmZlclVzYWdlQml0LlVOSUZPUk0sXG4gICAgICAgICAgICBnZnguTWVtb3J5VXNhZ2VCaXQuSE9TVCB8IGdmeC5NZW1vcnlVc2FnZUJpdC5ERVZJQ0UsXG4gICAgICAgICAgICAxNixcbiAgICAgICAgKSk7XG4gICAgICAgIHRoaXMuZHVtbXlVbmlmb3JtQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihuZXcgZ2Z4LkJ1ZmZlclZpZXdJbmZvKHRoaXMudW5pZm9ybUJ1ZmZlciwgMCwgdGhpcy51bmlmb3JtQnVmZmVyLnNpemUpKTtcblxuICAgICAgICB0aGlzLnN0b3JhZ2VCdWZmZXIgPSAhaXNTY2VuZU5hdGl2ZSA/IHRoaXMudW5pZm9ybUJ1ZmZlciA6IGRldmljZS5jcmVhdGVCdWZmZXIobmV3IGdmeC5CdWZmZXJJbmZvKFxuICAgICAgICAgICAgZ2Z4LkJ1ZmZlclVzYWdlQml0LlNUT1JBR0UsXG4gICAgICAgICAgICBnZnguTWVtb3J5VXNhZ2VCaXQuSE9TVCB8IGdmeC5NZW1vcnlVc2FnZUJpdC5ERVZJQ0UsXG4gICAgICAgICAgICAxNixcbiAgICAgICAgKSk7XG4gICAgICAgIHRoaXMuZHVtbXlTdG9yYWdlQnVmZmVyID0gIWlzU2NlbmVOYXRpdmUgPyB0aGlzLmR1bW15VW5pZm9ybUJ1ZmZlciA6XG4gICAgICAgICAgICBkZXZpY2UuY3JlYXRlQnVmZmVyKG5ldyBnZnguQnVmZmVyVmlld0luZm8odGhpcy5zdG9yYWdlQnVmZmVyLCAwLCB0aGlzLnN0b3JhZ2VCdWZmZXIuc2l6ZSkpO1xuXG4gICAgICAgIHRoaXMuZHVtbXlTYW1wbGVUZXh0dXJlID0gZGV2aWNlLmNyZWF0ZVRleHR1cmUobmV3IGdmeC5UZXh0dXJlSW5mbyhcbiAgICAgICAgICAgIGdmeC5UZXh0dXJlVHlwZS5URVgyRCxcbiAgICAgICAgICAgIGdmeC5UZXh0dXJlVXNhZ2VCaXQuU0FNUExFRCxcbiAgICAgICAgICAgIGdmeC5Gb3JtYXQuUkdCQTgsXG4gICAgICAgICAgICA0LCA0LFxuICAgICAgICApKTtcbiAgICAgICAgdGhpcy5kdW1teVN0b3JhZ2VUZXh0dXJlID0gIWlzU2NlbmVOYXRpdmUgPyB0aGlzLmR1bW15U2FtcGxlVGV4dHVyZSA6IGRldmljZS5jcmVhdGVUZXh0dXJlKG5ldyBnZnguVGV4dHVyZUluZm8oXG4gICAgICAgICAgICBnZnguVGV4dHVyZVR5cGUuVEVYMkQsXG4gICAgICAgICAgICBnZnguVGV4dHVyZVVzYWdlQml0LlNUT1JBR0UsXG4gICAgICAgICAgICBnZnguRm9ybWF0LlJHQkE4LFxuICAgICAgICAgICAgNCwgNCxcbiAgICAgICAgKSk7XG4gICAgICAgIHRoaXMuZHVtbXlTYW1wbGVyID0gZGV2aWNlLmdldFNhbXBsZXIobmV3IGdmeC5TYW1wbGVySW5mbygpKTtcblxuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVOb2RlcygpIHtcbiAgICAgICAgdGhpcy5saWdodENvbXAgPSBuZXcgY2MuTm9kZSgnU2hhZGVyIEdyYXBoIFByZXZpZXcgTGlnaHQnKS5hZGRDb21wb25lbnQoRGlyZWN0aW9uYWxMaWdodCk7XG4gICAgICAgIHRoaXMubGlnaHRDb21wLm5vZGUuc2V0Um90YXRpb25Gcm9tRXVsZXIoLTQ1LCAtNDUsIDApO1xuICAgICAgICB0aGlzLmxpZ2h0Q29tcC5ub2RlLnNldFBhcmVudCh0aGlzLnNjZW5lKTtcblxuICAgICAgICB0aGlzLm1vZGVsQ29tcCA9IG5ldyBOb2RlKCdTaGFkZXIgR3JhcGggUHJldmlldyBNb2RlbCcpLmFkZENvbXBvbmVudChNZXNoUmVuZGVyZXIpO1xuICAgICAgICB0aGlzLm1vZGVsQ29tcC5tZXNoID0gcHJpbWl0aXZlRGF0YS5zcGhlcmUubWVzaDtcbiAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoKTtcbiAgICAgICAgbWF0ZXJpYWwuaW5pdGlhbGl6ZSh7IGVmZmVjdE5hbWU6ICdidWlsdGluLXN0YW5kYXJkJyB9KTtcbiAgICAgICAgdGhpcy5tb2RlbENvbXAubWF0ZXJpYWwgPSBtYXRlcmlhbDtcbiAgICAgICAgdGhpcy5zZXRNYXRlcmlhbChtYXRlcmlhbCk7XG5cbiAgICAgICAgdGhpcy5tb2RlbENvbXAubm9kZS5zZXRQYXJlbnQodGhpcy5zY2VuZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCB8IG51bGwpIHtcbiAgICAgICAgaWYgKG1hdGVyaWFsICYmIG1hdGVyaWFsICE9PSB0aGlzLm1hdGVyaWFsKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wID0gdGhpcy5tb2RlbENvbXA7XG4gICAgICAgICAgICBfbWF0SW5zSW5mby5wYXJlbnQgPSBtYXRlcmlhbDtcbiAgICAgICAgICAgIF9tYXRJbnNJbmZvLm93bmVyID0gY29tcDtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbnRpYXRlZCA9IG5ldyByZW5kZXJlci5NYXRlcmlhbEluc3RhbmNlKF9tYXRJbnNJbmZvKTtcbiAgICAgICAgICAgIGNvbXAubWF0ZXJpYWwgPSBpbnN0YW50aWF0ZWQ7XG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURzKCk7XG4gICAgICAgICAgICB0aGlzLmNhbWVyYUNvbXAuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhbWVyYUNvbXAubm9kZS5nZXRXb3JsZFBvc2l0aW9uKHRlbXBWZWMzQSk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsQ29tcC5ub2RlLmdldFdvcmxkUG9zaXRpb24odGVtcFZlYzNCKTtcbiAgICAgICAgICAgIHRoaXMudmlld0Rpc3QgPSBWZWMzLmRpc3RhbmNlKHRlbXBWZWMzQSwgdGVtcFZlYzNCKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOmDqOWIhuadkOi0qOWmguaenOayoeacieiwg+eUqOivpeaWueazleS8muacieaKpemUme+8jOWmgnNwaW5l55u45YWz5p2Q6LSoXG4gICAgLy8g5aSn6YOo5YiG5p2Q6LSo5LiN6ZyA6KaB6LCD55So5Lmf5Lya5q2j5bi46aKE6KeIXG4gICAgcHVibGljIHVwZGF0ZURzKCkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxDb21wLm1vZGVsO1xuICAgICAgICBpZiAobW9kZWwpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kZWwuc3ViTW9kZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHMgPSBtb2RlbC5zdWJNb2RlbHNbaV0uZGVzY3JpcHRvclNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5kaW5ncyA9IGRzLmxheW91dC5iaW5kaW5ncztcbiAgICAgICAgICAgICAgICBjb25zdCBkZXZpY2UgPSBkaXJlY3Rvci5yb290IS5kZXZpY2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBiaW5kaW5ncy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gYmluZGluZ3Nbal07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBkZXNjLmJpbmRpbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRzVHlwZSA9IGRlc2MuZGVzY3JpcHRvclR5cGU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbmQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkc1R5cGUgJiBnZnguRGVzY3JpcHRvclR5cGUuVU5JRk9STV9CVUZGRVIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRzVHlwZSAmIGdmeC5EZXNjcmlwdG9yVHlwZS5EWU5BTUlDX1VOSUZPUk1fQlVGRkVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRzLmdldEJ1ZmZlcihiaW5kaW5nKSkgeyBkcy5iaW5kQnVmZmVyKGJpbmRpbmcsIHRoaXMuZHVtbXlVbmlmb3JtQnVmZmVyKTsgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRzVHlwZSAmIGdmeC5EZXNjcmlwdG9yVHlwZS5TVE9SQUdFX0JVRkZFUiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZHNUeXBlICYgZ2Z4LkRlc2NyaXB0b3JUeXBlLkRZTkFNSUNfU1RPUkFHRV9CVUZGRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZHMuZ2V0QnVmZmVyKGJpbmRpbmcpKSB7IGRzLmJpbmRCdWZmZXIoYmluZGluZywgdGhpcy5kdW1teVN0b3JhZ2VCdWZmZXIpOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gYmluZGUgdGV4dHVyZVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkc1R5cGUgJiBnZnguREVTQ1JJUFRPUl9TQU1QTEVSX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZHMuZ2V0VGV4dHVyZShiaW5kaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkc1R5cGUgJiBnZnguRGVzY3JpcHRvclR5cGUuU0FNUExFUl9URVhUVVJFIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzVHlwZSAmIGdmeC5EZXNjcmlwdG9yVHlwZS5URVhUVVJFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzLmJpbmRUZXh0dXJlKGJpbmRpbmcsIHRoaXMuZHVtbXlTYW1wbGVUZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRzVHlwZSAmIGdmeC5EZXNjcmlwdG9yVHlwZS5TVE9SQUdFX0lNQUdFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzLmJpbmRUZXh0dXJlKGJpbmRpbmcsIHRoaXMuZHVtbXlTdG9yYWdlVGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRzLmdldFNhbXBsZXIoYmluZGluZykpIHsgZHMuYmluZFNhbXBsZXIoYmluZGluZywgdGhpcy5kdW1teVNhbXBsZXIpOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZHMudXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE1lc2gocHJpbWl0aXZlOiBzdHJpbmcsIG1lc2g6IE1lc2gsIHNjYWxlOiBWZWMzID0gVmVjMy5PTkUpIHtcbiAgICAgICAgdGhpcy5tb2RlbENvbXAubWVzaCA9IG1lc2g7XG4gICAgICAgIC8vIOWcqOmDqOWIhuaDheWGteS4i++8jOivpeaOpeWPo+S8muWFiOS6jnNldE1hdGVyaWFs6LCD55SoICMxMjI1OVxuICAgICAgICAvLyDlpoLmnpzkuIrkuKrmnZDotKjliJrlpb3lkoznm67moIfmnZDotKjnsbvlnovkuI3lkIzvvIzlsLHkvJrlr7zoh7TlvJXmk47lupXlsYLml6Dms5XmraPnoa7nu5HlrprnurnnkIbvvIzku47ogIzmiqXplJlcbiAgICAgICAgdGhpcy51cGRhdGVEcygpO1xuICAgICAgICB0aGlzLm1vZGVsQ29tcC5ub2RlLnNldFNjYWxlKHNjYWxlKTtcbiAgICAgICAgdGhpcy5wcmltaXRpdmUgPSBwcmltaXRpdmU7XG4gICAgICAgIHRoaXMuY2FtZXJhQ29tcC5lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UHJpbWl0aXZlKHByaW1pdGl2ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChwcmltaXRpdmUgJiYgcHJpbWl0aXZlICE9PSB0aGlzLnByaW1pdGl2ZSkge1xuICAgICAgICAgICAgY29uc3QgY2FjaGVNZXNoID0gdGhpcy5jYWNoZU1lc2hzW3ByaW1pdGl2ZV07XG4gICAgICAgICAgICBpZiAoIWNhY2hlTWVzaCkge1xuICAgICAgICAgICAgICAgIGNjLmFzc2V0TWFuYWdlci5sb2FkQW55KHByaW1pdGl2ZSwgKGVycjogRXJyb3IsIG1lc2g6IE1lc2gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlTWVzaHNbcHJpbWl0aXZlXSA9IG1lc2g7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TWVzaChwcmltaXRpdmUsIG1lc2gpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1lc2gocHJpbWl0aXZlLCBjYWNoZU1lc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldExpZ2h0RW5hYmxlKGVuYWJsZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5saWdodENvbXAuZW5hYmxlZCAhPT0gZW5hYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmxpZ2h0Q29tcC5lbmFibGVkID0gZW5hYmxlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0Q2FtZXJhKCkge1xuICAgICAgICBzdXBlci5yZXNldENhbWVyYSh0aGlzLm1vZGVsQ29tcC5ub2RlKTtcbiAgICB9XG59XG5cbmNvbnN0IHNoYWRlckdyYXBoUHJldmlldyA9IG5ldyBTaGFkZXJHcmFwaFByZXZpZXcoKTtcblxuZXhwb3J0IHsgc2hhZGVyR3JhcGhQcmV2aWV3IH07XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/contributions/scene.js b/extensions/shader-graph/dist/contributions/scene.js new file mode 100644 index 0000000..2e513e3 --- /dev/null +++ b/extensions/shader-graph/dist/contributions/scene.js @@ -0,0 +1,112 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const preview_scene_1 = tslib_1.__importDefault(require("./preview-scene")); +const shader_graph_1 = tslib_1.__importDefault(require("../importer/shader-graph")); +const effect_header_1 = require("./effect-header"); +const effect_utils_1 = require("../effect-utils"); +function createSlot(slot) { + const valueDump = cce.Dump.encode.encodeObject(slot.default, { default: slot.default }); + return { + default: valueDump.value, + type: slot.type, + connectType: slot.connectType, + display: slot.display, + enum: slot.enum, + registerEnumType: slot.registerEnumType, + registerEnum: slot.registerEnum, + }; +} +exports.methods = { + async queryShaderNode() { + const { shaderNodeMap, shaderPropertyMap } = await Editor.Module.importProjectModule('db://shader-graph/graph/index.ts'); + const shaderNodeList = new Map(); + shaderNodeMap.forEach((nodeDefine) => { + const newNodeDefine = { + type: nodeDefine.type, + extend: nodeDefine.extend, + details: nodeDefine.details, + node: {}, + }; + nodeDefine.node.inputs?.forEach((slot) => { + if (!newNodeDefine.node.inputs) { + newNodeDefine.node.inputs = []; + } + newNodeDefine.node.inputs.push(createSlot(slot)); + }); + nodeDefine.node.props?.forEach((slot) => { + if (!newNodeDefine.node.props) { + newNodeDefine.node.props = []; + } + newNodeDefine.node.props.push(createSlot(slot)); + }); + nodeDefine.node.outputs?.forEach((slot) => { + if (!newNodeDefine.node.outputs) { + newNodeDefine.node.outputs = []; + } + newNodeDefine.node.outputs.push(createSlot(slot)); + }); + shaderNodeList.set(newNodeDefine.type, newNodeDefine); + }); + const shaderPropertyList = new Map(); + shaderPropertyMap.forEach((propertyDefine) => { + const valueDump = cce.Dump.encode.encodeObject(propertyDefine.default, { default: propertyDefine.default }); + const newPropertyDefine = { + name: propertyDefine.name, + type: propertyDefine.type, + declareType: propertyDefine.declareType, + default: valueDump.value, + details: propertyDefine.details, + outputs: [], + }; + propertyDefine.outputs.forEach((slot) => { + newPropertyDefine.outputs.push(createSlot(slot)); + }); + shaderPropertyList.set(newPropertyDefine.type, newPropertyDefine); + }); + return { + shaderNodeList: [...shaderNodeList], + shaderPropertyList: [...shaderPropertyList], + }; + }, + async queryPropertyValueDumpByType(type, value) { + const { shaderPropertyMap } = await Editor.Module.importProjectModule('db://shader-graph/graph/index.ts'); + const propertyDefine = shaderPropertyMap.get(type); + const valueDump = cce.Dump.encode.encodeObject(propertyDefine.default, {}); + valueDump.value = value; + return valueDump; + }, + async initPreview(config) { + try { + await (0, effect_header_1.addChunks)(); + await preview_scene_1.default.init(config); + return true; + } + catch (e) { + console.error(e); + return false; + } + }, + async updateMaterial(graphData) { + if (!graphData) + return; + const time = Date.now(); + const masterNode = await shader_graph_1.default.generateMasterNode(graphData); + const material = await masterNode.createMaterial(effect_utils_1.buildEffect); + preview_scene_1.default.setMaterial(material); + console.debug('update shader graph material : ' + (Date.now() - time) / 1000); + }, + registerEffects(uuid) { + console.debug('registerEffects: ' + uuid); + cce.SceneFacadeManager.registerEffects([uuid]); + }, + removeEffects(uuid) { + console.debug('removeEffects:' + uuid); + cce.SceneFacadeManager.removeEffects([uuid]); + }, + updateEffect(uuid) { + console.debug('updateEffect:' + uuid); + cce.SceneFacadeManager.updateEffect([uuid]); + }, +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJpYnV0aW9ucy9zY2VuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw0RUFBMkM7QUFJM0Msb0ZBQW1EO0FBRW5ELG1EQUE0QztBQUM1QyxrREFBOEM7QUFJOUMsU0FBUyxVQUFVLENBQUMsSUFBZ0I7SUFDaEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDeEYsT0FBTztRQUNILE9BQU8sRUFBRSxTQUFTLENBQUMsS0FBSztRQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7UUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1FBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtRQUNmLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7UUFDdkMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO0tBQ2xDLENBQUM7QUFDTixDQUFDO0FBRUQsT0FBTyxDQUFDLE9BQU8sR0FBRztJQUNkLEtBQUssQ0FBQyxlQUFlO1FBQ2pCLE1BQU0sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsa0NBQWtDLENBQW1CLENBQUM7UUFFM0ksTUFBTSxjQUFjLEdBQTRCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDMUQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQXNCLEVBQUUsRUFBRTtZQUM3QyxNQUFNLGFBQWEsR0FBZTtnQkFDOUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO2dCQUNyQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07Z0JBQ3pCLE9B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QUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxhQUFhLENBQUMsSUFBWTtRQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN0QyxHQUFHLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSU1vZHVsZU9wdGlvbnMgfSBmcm9tICcuLi9zaGFkZXItZ3JhcGgnO1xuaW1wb3J0IHR5cGUgeyBOb2RlRGVmaW5lLCBQcm9wZXJ0eURlZmluZSwgU2xvdERlZmluZSB9IGZyb20gJy4uLy4uL0B0eXBlcy9zaGFkZXItbm9kZS10eXBlJztcbmltcG9ydCBwcmV2aWV3U2NlbmUgZnJvbSAnLi9wcmV2aWV3LXNjZW5lJztcbmltcG9ydCB7IFByZXZpZXdDb25maWcgfSBmcm9tICcuL2ludGVybmFsJztcbmltcG9ydCB7IEdyYXBoRGF0YSB9IGZyb20gJy4uL2Jsb2NrLWZvcmdlL2ludGVyZmFjZSc7XG5cbmltcG9ydCBzaGFkZXJHcmFwaCBmcm9tICcuLi9pbXBvcnRlci9zaGFkZXItZ3JhcGgnO1xuXG5pbXBvcnQgeyBhZGRDaHVua3MgfSBmcm9tICcuL2VmZmVjdC1oZWFkZXInO1xuaW1wb3J0IHsgYnVpbGRFZmZlY3QgfSBmcm9tICcuLi9lZmZlY3QtdXRpbHMnO1xuXG5kZWNsYXJlIGNvbnN0IGNjZTogYW55O1xuXG5mdW5jdGlvbiBjcmVhdGVTbG90KHNsb3Q6IFNsb3REZWZpbmUpIHtcbiAgICBjb25zdCB2YWx1ZUR1bXAgPSBjY2UuRHVtcC5lbmNvZGUuZW5jb2RlT2JqZWN0KHNsb3QuZGVmYXVsdCwgeyBkZWZhdWx0OiBzbG90LmRlZmF1bHQgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVmYXVsdDogdmFsdWVEdW1wLnZhbHVlLFxuICAgICAgICB0eXBlOiBzbG90LnR5cGUsXG4gICAgICAgIGNvbm5lY3RUeXBlOiBzbG90LmNvbm5lY3RUeXBlLFxuICAgICAgICBkaXNwbGF5OiBzbG90LmRpc3BsYXksXG4gICAgICAgIGVudW06IHNsb3QuZW51bSxcbiAgICAgICAgcmVnaXN0ZXJFbnVtVHlwZTogc2xvdC5yZWdpc3RlckVudW1UeXBlLFxuICAgICAgICByZWdpc3RlckVudW06IHNsb3QucmVnaXN0ZXJFbnVtLFxuICAgIH07XG59XG5cbmV4cG9ydHMubWV0aG9kcyA9IHtcbiAgICBhc3luYyBxdWVyeVNoYWRlck5vZGUoKSB7XG4gICAgICAgIGNvbnN0IHsgc2hhZGVyTm9kZU1hcCwgc2hhZGVyUHJvcGVydHlNYXAgfSA9IGF3YWl0IEVkaXRvci5Nb2R1bGUuaW1wb3J0UHJvamVjdE1vZHVsZSgnZGI6Ly9zaGFkZXItZ3JhcGgvZ3JhcGgvaW5kZXgudHMnKSBhcyBJTW9kdWxlT3B0aW9ucztcblxuICAgICAgICBjb25zdCBzaGFkZXJOb2RlTGlzdDogTWFwPHN0cmluZywgTm9kZURlZmluZT4gPSBuZXcgTWFwKCk7XG4gICAgICAgIHNoYWRlck5vZGVNYXAuZm9yRWFjaCgobm9kZURlZmluZTogTm9kZURlZmluZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Tm9kZURlZmluZTogTm9kZURlZmluZSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBub2RlRGVmaW5lLnR5cGUsXG4gICAgICAgICAgICAgICAgZXh0ZW5kOiBub2RlRGVmaW5lLmV4dGVuZCxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiBub2RlRGVmaW5lLmRldGFpbHMsXG4gICAgICAgICAgICAgICAgbm9kZToge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBub2RlRGVmaW5lLm5vZGUuaW5wdXRzPy5mb3JFYWNoKChzbG90KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXdOb2RlRGVmaW5lLm5vZGUuaW5wdXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld05vZGVEZWZpbmUubm9kZS5pbnB1dHMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3Tm9kZURlZmluZS5ub2RlLmlucHV0cy5wdXNoKGNyZWF0ZVNsb3Qoc2xvdCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBub2RlRGVmaW5lLm5vZGUucHJvcHM/LmZvckVhY2goKHNsb3QpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW5ld05vZGVEZWZpbmUubm9kZS5wcm9wcykge1xuICAgICAgICAgICAgICAgICAgICBuZXdOb2RlRGVmaW5lLm5vZGUucHJvcHMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3Tm9kZURlZmluZS5ub2RlLnByb3BzLnB1c2goY3JlYXRlU2xvdChzbG90KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGVEZWZpbmUubm9kZS5vdXRwdXRzPy5mb3JFYWNoKChzbG90KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXdOb2RlRGVmaW5lLm5vZGUub3V0cHV0cykge1xuICAgICAgICAgICAgICAgICAgICBuZXdOb2RlRGVmaW5lLm5vZGUub3V0cHV0cyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdOb2RlRGVmaW5lLm5vZGUub3V0cHV0cy5wdXNoKGNyZWF0ZVNsb3Qoc2xvdCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzaGFkZXJOb2RlTGlzdC5zZXQobmV3Tm9kZURlZmluZS50eXBlLCBuZXdOb2RlRGVmaW5lKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2hhZGVyUHJvcGVydHlMaXN0OiBNYXA8c3RyaW5nLCBQcm9wZXJ0eURlZmluZT4gPSBuZXcgTWFwKCk7XG4gICAgICAgIHNoYWRlclByb3BlcnR5TWFwLmZvckVhY2goKHByb3BlcnR5RGVmaW5lOiBQcm9wZXJ0eURlZmluZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVEdW1wID0gY2NlLkR1bXAuZW5jb2RlLmVuY29kZU9iamVjdChwcm9wZXJ0eURlZmluZS5kZWZhdWx0LCB7IGRlZmF1bHQ6IHByb3BlcnR5RGVmaW5lLmRlZmF1bHQgfSk7XG4gICAgICAgICAgICBjb25zdCBuZXdQcm9wZXJ0eURlZmluZTogUHJvcGVydHlEZWZpbmUgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogcHJvcGVydHlEZWZpbmUubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBwcm9wZXJ0eURlZmluZS50eXBlLFxuICAgICAgICAgICAgICAgIGRlY2xhcmVUeXBlOiBwcm9wZXJ0eURlZmluZS5kZWNsYXJlVHlwZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB2YWx1ZUR1bXAudmFsdWUsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogcHJvcGVydHlEZWZpbmUuZGV0YWlscyxcbiAgICAgICAgICAgICAgICBvdXRwdXRzOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwcm9wZXJ0eURlZmluZS5vdXRwdXRzLmZvckVhY2goKHNsb3Q6IFNsb3REZWZpbmUpID0+IHtcbiAgICAgICAgICAgICAgICBuZXdQcm9wZXJ0eURlZmluZS5vdXRwdXRzLnB1c2goY3JlYXRlU2xvdChzbG90KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNoYWRlclByb3BlcnR5TGlzdC5zZXQobmV3UHJvcGVydHlEZWZpbmUudHlwZSwgbmV3UHJvcGVydHlEZWZpbmUpO1xuXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hhZGVyTm9kZUxpc3Q6IFsuLi5zaGFkZXJOb2RlTGlzdF0sXG4gICAgICAgICAgICBzaGFkZXJQcm9wZXJ0eUxpc3Q6IFsuLi5zaGFkZXJQcm9wZXJ0eUxpc3RdLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBxdWVyeVByb3BlcnR5VmFsdWVEdW1wQnlUeXBlKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCB7IHNoYWRlclByb3BlcnR5TWFwIH0gPSBhd2FpdCBFZGl0b3IuTW9kdWxlLmltcG9ydFByb2plY3RNb2R1bGUoJ2RiOi8vc2hhZGVyLWdyYXBoL2dyYXBoL2luZGV4LnRzJykgYXMgSU1vZHVsZU9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5RGVmaW5lOiBQcm9wZXJ0eURlZmluZSA9IHNoYWRlclByb3BlcnR5TWFwLmdldCh0eXBlKSE7XG4gICAgICAgIGNvbnN0IHZhbHVlRHVtcCA9IGNjZS5EdW1wLmVuY29kZS5lbmNvZGVPYmplY3QocHJvcGVydHlEZWZpbmUuZGVmYXVsdCwge30pO1xuICAgICAgICB2YWx1ZUR1bXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlRHVtcDtcbiAgICB9LFxuXG4gICAgYXN5bmMgaW5pdFByZXZpZXcoY29uZmlnOiBQcmV2aWV3Q29uZmlnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBhZGRDaHVua3MoKTtcbiAgICAgICAgICAgIGF3YWl0IHByZXZpZXdTY2VuZS5pbml0KGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVNYXRlcmlhbChncmFwaERhdGE6IEdyYXBoRGF0YSkge1xuICAgICAgICBpZiAoIWdyYXBoRGF0YSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBtYXN0ZXJOb2RlID0gYXdhaXQgc2hhZGVyR3JhcGguZ2VuZXJhdGVNYXN0ZXJOb2RlKGdyYXBoRGF0YSk7XG5cbiAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSBhd2FpdCBtYXN0ZXJOb2RlLmNyZWF0ZU1hdGVyaWFsKGJ1aWxkRWZmZWN0KTtcbiAgICAgICAgcHJldmlld1NjZW5lLnNldE1hdGVyaWFsKG1hdGVyaWFsKTtcblxuICAgICAgICBjb25zb2xlLmRlYnVnKCd1cGRhdGUgc2hhZGVyIGdyYXBoIG1hdGVyaWFsIDogJyArIChEYXRlLm5vdygpIC0gdGltZSkgLyAxMDAwKTtcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJFZmZlY3RzKHV1aWQ6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdyZWdpc3RlckVmZmVjdHM6ICcgKyB1dWlkKTtcbiAgICAgICAgY2NlLlNjZW5lRmFjYWRlTWFuYWdlci5yZWdpc3RlckVmZmVjdHMoW3V1aWRdKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlRWZmZWN0cyh1dWlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygncmVtb3ZlRWZmZWN0czonICsgdXVpZCk7XG4gICAgICAgIGNjZS5TY2VuZUZhY2FkZU1hbmFnZXIucmVtb3ZlRWZmZWN0cyhbdXVpZF0pO1xuICAgIH0sXG5cbiAgICB1cGRhdGVFZmZlY3QodXVpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ3VwZGF0ZUVmZmVjdDonICsgdXVpZCk7XG4gICAgICAgIGNjZS5TY2VuZUZhY2FkZU1hbmFnZXIudXBkYXRlRWZmZWN0KFt1dWlkXSk7XG4gICAgfSxcbn07XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/effect-utils.js b/extensions/shader-graph/dist/effect-utils.js new file mode 100644 index 0000000..bfb95d7 --- /dev/null +++ b/extensions/shader-graph/dist/effect-utils.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.addChunk = exports.buildEffect = void 0; +const semver_1 = require("semver"); +async function buildEffect(name, content) { + if ((0, semver_1.gte)(Editor.App.version, '3.8.3')) { + return await Editor.Message.request('asset-db', 'execute-custom-operation', 'effect', 'build-effect', name, content); + } + else { + return await Editor.Message.request('engine-extends', 'build-effect', name, content); + } +} +exports.buildEffect = buildEffect; +async function addChunk(name, content) { + if ((0, semver_1.gte)(Editor.App.version, '3.8.3')) { + await Editor.Message.request('asset-db', 'execute-custom-operation', 'effect', 'add-chunk', name, content); + } + else { + return await Editor.Message.request('engine-extends', 'add-chunk', name, content); + } +} +exports.addChunk = addChunk; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2VmZmVjdC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBNkI7QUFFdEIsS0FBSyxVQUFVLFdBQVcsQ0FBQyxJQUFZLEVBQUUsT0FBZTtJQUMzRCxJQUFJLElBQUEsWUFBRyxFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ2xDLE9BQU8sTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDeEg7U0FBTTtRQUNILE9BQU8sTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3hGO0FBQ0wsQ0FBQztBQU5ELGtDQU1DO0FBRU0sS0FBSyxVQUFVLFFBQVEsQ0FBQyxJQUFZLEVBQUUsT0FBZTtJQUN4RCxJQUFJLElBQUEsWUFBRyxFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLDBCQUEwQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzlHO1NBQU07UUFDSCxPQUFPLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNyRjtBQUNMLENBQUM7QUFORCw0QkFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGd0ZSB9IGZyb20gJ3NlbXZlcic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEVmZmVjdChuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xuICAgIGlmIChndGUoRWRpdG9yLkFwcC52ZXJzaW9uLCAnMy44LjMnKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZXhlY3V0ZS1jdXN0b20tb3BlcmF0aW9uJywgJ2VmZmVjdCcsICdidWlsZC1lZmZlY3QnLCBuYW1lLCBjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnZW5naW5lLWV4dGVuZHMnLCAnYnVpbGQtZWZmZWN0JywgbmFtZSwgY29udGVudCk7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkQ2h1bmsobmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoZ3RlKEVkaXRvci5BcHAudmVyc2lvbiwgJzMuOC4zJykpIHtcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZXhlY3V0ZS1jdXN0b20tb3BlcmF0aW9uJywgJ2VmZmVjdCcsICdhZGQtY2h1bmsnLCBuYW1lLCBjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnZW5naW5lLWV4dGVuZHMnLCAnYWRkLWNodW5rJywgbmFtZSwgY29udGVudCk7XG4gICAgfVxufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/hooks.js b/extensions/shader-graph/dist/hooks.js new file mode 100644 index 0000000..eb582fc --- /dev/null +++ b/extensions/shader-graph/dist/hooks.js @@ -0,0 +1,21 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const semver_1 = require("semver"); +/** + * 插件 register 的时候,触发这个钩子 + * 钩子内可以动态更改 package.json 内定义的数据 + * + * @param info + */ +exports.register = async function (info) { + const version = Editor.App.version; + // 3.8.3 使用新版本的添加菜单方式,移除旧的方式 + if ((0, semver_1.gte)(version, '3.8.3')) { + delete info.contributions.assets.menu; + // 移除旧的导入器 + if (info.contributions['asset-db']) { + delete info.contributions['asset-db'].importer; + } + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLG1DQUE2QjtBQUU3Qjs7Ozs7R0FLRztBQUNILE9BQU8sQ0FBQyxRQUFRLEdBQUcsS0FBSyxXQUFVLElBQTJCO0lBQ3pELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ25DLDRCQUE0QjtJQUM1QixJQUFJLElBQUEsWUFBRyxFQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRTtRQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN0QyxVQUFVO1FBQ1YsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUM7U0FDbEQ7S0FDSjtBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgZ3RlIH0gZnJvbSAnc2VtdmVyJztcblxuLyoqXG4gKiDmj5Lku7YgcmVnaXN0ZXIg55qE5pe25YCZ77yM6Kem5Y+R6L+Z5Liq6ZKp5a2QXG4gKiDpkqnlrZDlhoXlj6/ku6XliqjmgIHmm7TmlLkgcGFja2FnZS5qc29uIOWGheWumuS5ieeahOaVsOaNrlxuICpcbiAqIEBwYXJhbSBpbmZvXG4gKi9cbmV4cG9ydHMucmVnaXN0ZXIgPSBhc3luYyBmdW5jdGlvbihpbmZvOiB7IFtrZXk6IHN0cmluZ106IGFueX0pIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gRWRpdG9yLkFwcC52ZXJzaW9uO1xuICAgIC8vIDMuOC4zIOS9v+eUqOaWsOeJiOacrOeahOa3u+WKoOiPnOWNleaWueW8j++8jOenu+mZpOaXp+eahOaWueW8j1xuICAgIGlmIChndGUodmVyc2lvbiwgJzMuOC4zJykpIHtcbiAgICAgICAgZGVsZXRlIGluZm8uY29udHJpYnV0aW9ucy5hc3NldHMubWVudTtcbiAgICAgICAgLy8g56e76Zmk5pen55qE5a+85YWl5ZmoXG4gICAgICAgIGlmIChpbmZvLmNvbnRyaWJ1dGlvbnNbJ2Fzc2V0LWRiJ10pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBpbmZvLmNvbnRyaWJ1dGlvbnNbJ2Fzc2V0LWRiJ10uaW1wb3J0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/importer/index.js b/extensions/shader-graph/dist/importer/index.js new file mode 100644 index 0000000..da924b1 --- /dev/null +++ b/extensions/shader-graph/dist/importer/index.js @@ -0,0 +1,39 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.methods = void 0; +exports.methods = { + async registerShaderGraphImporter380() { + const { ShaderGraph380 } = await Promise.resolve().then(() => __importStar(require('./shader-graph-3.8'))); + return { + extname: ['.shadergraph'], + importer: ShaderGraph380, + }; + }, + async registerShaderGraphImporter() { + return (await Promise.resolve().then(() => __importStar(require('./shader-graph-handler')))).default; + }, +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wb3J0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFYSxRQUFBLE9BQU8sR0FBRztJQUNuQixLQUFLLENBQUMsOEJBQThCO1FBQ2hDLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyx3REFBYSxvQkFBb0IsR0FBQyxDQUFDO1FBQzlELE9BQU87WUFDSCxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7WUFDekIsUUFBUSxFQUFFLGNBQWM7U0FDM0IsQ0FBQztJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsMkJBQTJCO1FBQzdCLE9BQU8sQ0FBQyx3REFBYSx3QkFBd0IsR0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzVELENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2hhZGVyR3JhcGgzODAgfSBmcm9tICcuL3NoYWRlci1ncmFwaC0zLjgnO1xuXG5leHBvcnQgY29uc3QgbWV0aG9kcyA9IHtcbiAgICBhc3luYyByZWdpc3RlclNoYWRlckdyYXBoSW1wb3J0ZXIzODAoKSB7XG4gICAgICAgIGNvbnN0IHsgU2hhZGVyR3JhcGgzODAgfSA9IGF3YWl0IGltcG9ydCgnLi9zaGFkZXItZ3JhcGgtMy44Jyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleHRuYW1lOiBbJy5zaGFkZXJncmFwaCddLFxuICAgICAgICAgICAgaW1wb3J0ZXI6IFNoYWRlckdyYXBoMzgwLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyByZWdpc3RlclNoYWRlckdyYXBoSW1wb3J0ZXIoKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgaW1wb3J0KCcuL3NoYWRlci1ncmFwaC1oYW5kbGVyJykpLmRlZmF1bHQ7XG4gICAgfSxcbn07XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/importer/shader-graph-3.8.js b/extensions/shader-graph/dist/importer/shader-graph-3.8.js new file mode 100644 index 0000000..1915540 --- /dev/null +++ b/extensions/shader-graph/dist/importer/shader-graph-3.8.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ShaderGraph380 = void 0; +const tslib_1 = require("tslib"); +const path_1 = require("path"); +module.paths.push((0, path_1.join)(Editor.App.path, 'node_modules')); +const { Asset, Importer } = require('@editor/asset-db'); +const shader_graph_1 = tslib_1.__importDefault(require("./shader-graph")); +const utils_3_8_1 = require("./utils-3.8"); +class ShaderGraph380 extends Importer { + // 引擎内对应的类型 + get assetType() { + return shader_graph_1.default.assetType; + } + get version() { + return shader_graph_1.default.version; + } + get name() { + return shader_graph_1.default.name; + } + get migrations() { + return shader_graph_1.default.migrations; + } + /** + * 返回是否导入成功的标记 + * 如果返回 false,则 imported 标记不会变成 true + * 后续的一系列操作都不会执行 + * @param asset + */ + // @ts-expect-error + async import(asset) { + try { + await (0, utils_3_8_1.generateEffectAsset)(asset, await shader_graph_1.default.generateEffectByAsset(asset)); + return true; + } + catch (e) { + console.error(e); + return false; + } + } +} +exports.ShaderGraph380 = ShaderGraph380; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZGVyLWdyYXBoLTMuOC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBvcnRlci9zaGFkZXItZ3JhcGgtMy44LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSwrQkFBNEI7QUFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBQSxXQUFJLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUV6RCxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRXhELDBFQUF5QztBQUN6QywyQ0FBa0Q7QUFFbEQsTUFBYSxjQUFlLFNBQVEsUUFBUTtJQUV4QyxXQUFXO0lBQ1gsSUFBSSxTQUFTO1FBQ1QsT0FBTyxzQkFBVyxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxzQkFBVyxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxzQkFBVyxDQUFDLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxzQkFBVyxDQUFDLFVBQVUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtQkFBbUI7SUFDWixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQVk7UUFDNUIsSUFBSTtZQUNBLE1BQU0sSUFBQSwrQkFBbUIsRUFBQyxLQUFLLEVBQUUsTUFBTSxzQkFBVyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakYsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7Q0FDSjtBQW5DRCx3Q0FtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbm1vZHVsZS5wYXRocy5wdXNoKGpvaW4oRWRpdG9yLkFwcC5wYXRoLCAnbm9kZV9tb2R1bGVzJykpO1xuXG5jb25zdCB7IEFzc2V0LCBJbXBvcnRlciB9ID0gcmVxdWlyZSgnQGVkaXRvci9hc3NldC1kYicpO1xuXG5pbXBvcnQgc2hhZGVyR3JhcGggZnJvbSAnLi9zaGFkZXItZ3JhcGgnO1xuaW1wb3J0IHsgZ2VuZXJhdGVFZmZlY3RBc3NldCB9IGZyb20gJy4vdXRpbHMtMy44JztcblxuZXhwb3J0IGNsYXNzIFNoYWRlckdyYXBoMzgwIGV4dGVuZHMgSW1wb3J0ZXIge1xuXG4gICAgLy8g5byV5pOO5YaF5a+55bqU55qE57G75Z6LXG4gICAgZ2V0IGFzc2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHNoYWRlckdyYXBoLmFzc2V0VHlwZTtcbiAgICB9XG5cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHNoYWRlckdyYXBoLnZlcnNpb247XG4gICAgfVxuXG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiBzaGFkZXJHcmFwaC5uYW1lO1xuICAgIH1cblxuICAgIGdldCBtaWdyYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gc2hhZGVyR3JhcGgubWlncmF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDov5Tlm57mmK/lkKblr7zlhaXmiJDlip/nmoTmoIforrBcbiAgICAgKiDlpoLmnpzov5Tlm54gZmFsc2XvvIzliJkgaW1wb3J0ZWQg5qCH6K6w5LiN5Lya5Y+Y5oiQIHRydWVcbiAgICAgKiDlkI7nu63nmoTkuIDns7vliJfmk43kvZzpg73kuI3kvJrmiafooYxcbiAgICAgKiBAcGFyYW0gYXNzZXRcbiAgICAgKi9cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcHVibGljIGFzeW5jIGltcG9ydChhc3NldDogQXNzZXQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGdlbmVyYXRlRWZmZWN0QXNzZXQoYXNzZXQsIGF3YWl0IHNoYWRlckdyYXBoLmdlbmVyYXRlRWZmZWN0QnlBc3NldChhc3NldCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/importer/shader-graph-handler.js b/extensions/shader-graph/dist/importer/shader-graph-handler.js new file mode 100644 index 0000000..7482221 --- /dev/null +++ b/extensions/shader-graph/dist/importer/shader-graph-handler.js @@ -0,0 +1,93 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const fs_extra_1 = require("fs-extra"); +const path_1 = require("path"); +const shader_graph_1 = tslib_1.__importDefault(require("./shader-graph")); +const shader_graph_2 = require("../shader-graph"); +module.paths.push((0, path_1.join)(Editor.App.path, 'node_modules')); +const { Asset } = require('@editor/asset-db'); +const ShaderGraphHandler = { + name: shader_graph_1.default.name, + extends: 'effect', + assetType: shader_graph_1.default.assetType, + iconInfo: { + default: { + type: 'image', + value: 'packages://shader-graph/static/asset-icon.png', + }, + }, + createInfo: { + generateMenuInfo() { + return [ + { + label: `i18n:${shader_graph_2.PACKAGE_NAME}.menu.import`, + fullFileName: 'New Shader Graph.shadergraph', + template: 'db://test.shadergraph', + submenu: [ + { + label: 'Surface', + fullFileName: 'New Shader Graph.shadergraph', + template: 'Surface', // 无用 + }, + { + label: 'Unlit', + fullFileName: 'New Shader Graph.shadergraph', + template: 'Unlit', // 无用 + }, + ], + }, + ]; + }, + async create(options) { + try { + let shaderGraph = ''; + const name = (0, shader_graph_2.getName)(options.target); + switch (options.template) { + case 'Surface': + shaderGraph = await shader_graph_2.GraphDataMgr.createDefaultShaderGraph('SurfaceMasterNode', 'Graph', name); + break; + case 'Unlit': + shaderGraph = await shader_graph_2.GraphDataMgr.createDefaultShaderGraph('UnlitMasterNode', 'Graph', name); + break; + } + (0, fs_extra_1.writeFileSync)(options.target, shaderGraph); + } + catch (e) { + console.error(e); + } + return options.target; + }, + }, + // @ts-expect-error + async open(asset) { + Editor.Message.send('shader-graph', 'open', asset.uuid); + return true; + }, + importer: { + version: shader_graph_1.default.version, + migrations: [], + // @ts-expect-error + async before(asset) { + if (!shader_graph_1.default.existsCacheEffect(asset)) { + await shader_graph_1.default.generateEffectByAsset(asset); + } + shader_graph_1.default.cacheSourceMap.set(asset.uuid, asset._source); + // @ts-ignore + asset._source = shader_graph_1.default.getTempEffectCodePath(asset); + return true; + }, + // @ts-expect-error + async after(asset) { + const source = shader_graph_1.default.cacheSourceMap.get(asset.uuid); + if (source) { + // @ts-ignore + asset._source = source; + shader_graph_1.default.cacheSourceMap.delete(asset.uuid); + } + return true; + }, + }, +}; +exports.default = ShaderGraphHandler; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZGVyLWdyYXBoLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wb3J0ZXIvc2hhZGVyLWdyYXBoLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQXlDO0FBQ3pDLCtCQUE0QjtBQUU1QiwwRUFBeUM7QUFDekMsa0RBQXNFO0FBRXRFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUEsV0FBSSxFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFFekQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTlDLE1BQU0sa0JBQWtCLEdBQUc7SUFFdkIsSUFBSSxFQUFFLHNCQUFXLENBQUMsSUFBSTtJQUV0QixPQUFPLEVBQUUsUUFBUTtJQUVqQixTQUFTLEVBQUUsc0JBQVcsQ0FBQyxTQUFTO0lBRWhDLFFBQVEsRUFBRTtRQUNOLE9BQU8sRUFBRTtZQUNMLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLCtDQUErQztTQUN6RDtLQUNKO0lBRUQsVUFBVSxFQUFFO1FBQ1IsZ0JBQWdCO1lBQ1osT0FBTztnQkFDSDtvQkFDSSxLQUFLLEVBQUUsUUFBUSwyQkFBWSxjQUFjO29CQUN6QyxZQUFZLEVBQUUsOEJBQThCO29CQUM1QyxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxPQUFPLEVBQUU7d0JBQ0w7NEJBQ0ksS0FBSyxFQUFFLFNBQVM7NEJBQ2hCLFlBQVksRUFBRSw4QkFBOEI7NEJBQzVDLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSzt5QkFDN0I7d0JBQ0Q7NEJBQ0ksS0FBSyxFQUFFLE9BQU87NEJBQ2QsWUFBWSxFQUFFLDhCQUE4Qjs0QkFDNUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLO3lCQUMzQjtxQkFDSjtpQkFDSjthQUNKLENBQUM7UUFDTixDQUFDO1FBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUE2QztZQUN0RCxJQUFJO2dCQUNBLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxJQUFJLEdBQUcsSUFBQSxzQkFBTyxFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckMsUUFBUSxPQUFPLENBQUMsUUFBUSxFQUFFO29CQUN0QixLQUFLLFNBQVM7d0JBQ1YsV0FBVyxHQUFHLE1BQU0sMkJBQVksQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQzlGLE1BQU07b0JBQ1YsS0FBSyxPQUFPO3dCQUNSLFdBQVcsR0FBRyxNQUFNLDJCQUFZLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUM1RixNQUFNO2lCQUNiO2dCQUNELElBQUEsd0JBQWEsRUFBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQzlDO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwQjtZQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUMxQixDQUFDO0tBQ0o7SUFFRCxtQkFBbUI7SUFDbkIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFZO1FBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxRQUFRLEVBQUU7UUFDTixPQUFPLEVBQUUsc0JBQVcsQ0FBQyxPQUFPO1FBRTVCLFVBQVUsRUFBRSxFQUFFO1FBRWQsbUJBQW1CO1FBQ25CLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBWTtZQUNyQixJQUFJLENBQUMsc0JBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdkMsTUFBTSxzQkFBVyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xEO1lBQ0Qsc0JBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFELGFBQWE7WUFDYixLQUFLLENBQUMsT0FBTyxHQUFHLHNCQUFXLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixLQUFLLENBQUMsS0FBSyxDQUFDLEtBQVk7WUFDcEIsTUFBTSxNQUFNLEdBQUcsc0JBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRCxJQUFJLE1BQU0sRUFBRTtnQkFDUixhQUFhO2dCQUNiLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2dCQUN2QixzQkFBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUNKO0NBQ0osQ0FBQztBQUVGLGtCQUFlLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHNoYWRlckdyYXBoIGZyb20gJy4vc2hhZGVyLWdyYXBoJztcbmltcG9ydCB7IFBBQ0tBR0VfTkFNRSwgR3JhcGhEYXRhTWdyLCBnZXROYW1lIH0gZnJvbSAnLi4vc2hhZGVyLWdyYXBoJztcblxubW9kdWxlLnBhdGhzLnB1c2goam9pbihFZGl0b3IuQXBwLnBhdGgsICdub2RlX21vZHVsZXMnKSk7XG5cbmNvbnN0IHsgQXNzZXQgfSA9IHJlcXVpcmUoJ0BlZGl0b3IvYXNzZXQtZGInKTtcblxuY29uc3QgU2hhZGVyR3JhcGhIYW5kbGVyID0ge1xuXG4gICAgbmFtZTogc2hhZGVyR3JhcGgubmFtZSxcblxuICAgIGV4dGVuZHM6ICdlZmZlY3QnLFxuXG4gICAgYXNzZXRUeXBlOiBzaGFkZXJHcmFwaC5hc3NldFR5cGUsXG5cbiAgICBpY29uSW5mbzoge1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICAgICAgdmFsdWU6ICdwYWNrYWdlczovL3NoYWRlci1ncmFwaC9zdGF0aWMvYXNzZXQtaWNvbi5wbmcnLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBjcmVhdGVJbmZvOiB7XG4gICAgICAgIGdlbmVyYXRlTWVudUluZm8oKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGBpMThuOiR7UEFDS0FHRV9OQU1FfS5tZW51LmltcG9ydGAsXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxGaWxlTmFtZTogJ05ldyBTaGFkZXIgR3JhcGguc2hhZGVyZ3JhcGgnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogJ2RiOi8vdGVzdC5zaGFkZXJncmFwaCcsIC8vIOaXoOeUqFxuICAgICAgICAgICAgICAgICAgICBzdWJtZW51OiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdTdXJmYWNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsRmlsZU5hbWU6ICdOZXcgU2hhZGVyIEdyYXBoLnNoYWRlcmdyYXBoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogJ1N1cmZhY2UnLCAvLyDml6DnlKhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdVbmxpdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbEZpbGVOYW1lOiAnTmV3IFNoYWRlciBHcmFwaC5zaGFkZXJncmFwaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6ICdVbmxpdCcsIC8vIOaXoOeUqFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgY3JlYXRlKG9wdGlvbnM6IHsgdGFyZ2V0OiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcgfSk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgc2hhZGVyR3JhcGggPSAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gZ2V0TmFtZShvcHRpb25zLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChvcHRpb25zLnRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N1cmZhY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyR3JhcGggPSBhd2FpdCBHcmFwaERhdGFNZ3IuY3JlYXRlRGVmYXVsdFNoYWRlckdyYXBoKCdTdXJmYWNlTWFzdGVyTm9kZScsICdHcmFwaCcsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1VubGl0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlckdyYXBoID0gYXdhaXQgR3JhcGhEYXRhTWdyLmNyZWF0ZURlZmF1bHRTaGFkZXJHcmFwaCgnVW5saXRNYXN0ZXJOb2RlJywgJ0dyYXBoJywgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhvcHRpb25zLnRhcmdldCwgc2hhZGVyR3JhcGgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy50YXJnZXQ7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBhc3luYyBvcGVuKGFzc2V0OiBBc3NldCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBFZGl0b3IuTWVzc2FnZS5zZW5kKCdzaGFkZXItZ3JhcGgnLCAnb3BlbicsIGFzc2V0LnV1aWQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgaW1wb3J0ZXI6IHtcbiAgICAgICAgdmVyc2lvbjogc2hhZGVyR3JhcGgudmVyc2lvbixcblxuICAgICAgICBtaWdyYXRpb25zOiBbXSxcblxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGFzeW5jIGJlZm9yZShhc3NldDogQXNzZXQpIHtcbiAgICAgICAgICAgIGlmICghc2hhZGVyR3JhcGguZXhpc3RzQ2FjaGVFZmZlY3QoYXNzZXQpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2hhZGVyR3JhcGguZ2VuZXJhdGVFZmZlY3RCeUFzc2V0KGFzc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWRlckdyYXBoLmNhY2hlU291cmNlTWFwLnNldChhc3NldC51dWlkLCBhc3NldC5fc291cmNlKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGFzc2V0Ll9zb3VyY2UgPSBzaGFkZXJHcmFwaC5nZXRUZW1wRWZmZWN0Q29kZVBhdGgoYXNzZXQpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBhc3luYyBhZnRlcihhc3NldDogQXNzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNoYWRlckdyYXBoLmNhY2hlU291cmNlTWFwLmdldChhc3NldC51dWlkKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgYXNzZXQuX3NvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICBzaGFkZXJHcmFwaC5jYWNoZVNvdXJjZU1hcC5kZWxldGUoYXNzZXQudXVpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2hhZGVyR3JhcGhIYW5kbGVyO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/importer/shader-graph.js b/extensions/shader-graph/dist/importer/shader-graph.js new file mode 100644 index 0000000..f724cb8 --- /dev/null +++ b/extensions/shader-graph/dist/importer/shader-graph.js @@ -0,0 +1,234 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ShaderGraph = void 0; +const path_1 = require("path"); +const js_yaml_1 = require("js-yaml"); +const fs_extra_1 = require("fs-extra"); +module.paths.push((0, path_1.join)(Editor.App.path, 'node_modules')); +const { Asset } = require('@editor/asset-db'); +const block_forge_1 = require("../block-forge"); +const shader_graph_1 = require("../shader-graph"); +const utils_3_8_1 = require("./utils-3.8"); +const VectorDataType = [ + 'float', + 'vec2', + 'vec3', + 'vec4', + 'color', + 'enum', + 'boolean', +]; +class ShaderGraph { + constructor() { + this.shaderNodeClassMap = new Map; + /** + * 用于存储每个 asset 对应的 source + * 导入前先换成,把 source 替换成 temp 路径下的 effect + * 导入后在替换成原本的 source + */ + this.cacheSourceMap = new Map(); + this._initedGraph = false; + } + get assetType() { + return 'cc.EffectAsset'; + } + get version() { + return '1.0.0'; + } + get name() { + return 'shader-graph'; + } + get migrations() { + return []; + } + async initGraph() { + if (this._initedGraph && this.shaderContext?.shaderTemplatesDir) { + return; + } + await Editor.Module.importProjectModule('db://shader-graph/operation/index.ts'); + const { ShaderProperty } = await Editor.Module.importProjectModule('db://shader-graph/operation/property.ts'); + this.ShaderProperty = ShaderProperty; + const { shaderNodeMap, shaderPropertyMap, shaderNodeClassMap } = await Editor.Module.importProjectModule('db://shader-graph/graph/index.ts'); + const { shaderContext } = await Editor.Module.importProjectModule('db://shader-graph/operation/context.ts'); + (0, shader_graph_1.declareShaderNodeBlock)(shaderNodeMap); + this.shaderNodeClassMap = shaderNodeClassMap; + this.shaderContext = shaderContext; + shaderContext.shaderTemplatesDir = await Editor.Message.request('asset-db', 'query-path', 'db://shader-graph/../compile-shader/shader-templates'); + // shaderContext.shaderTemplatesDir = queryPath('db://shader-graph/../compile-shader/shader-templates'); + this._initedGraph = true; + } + createShaderNodes(blockMap) { + const shaderNodeClassMap = this.shaderNodeClassMap; + const shaderContext = this.shaderContext; + for (const uuid in blockMap) { + const block = blockMap[uuid]; + if (!block.desc) + continue; + const type = block.desc.type; + let shaderNode = block.shaderNode; + if (!shaderNode) { + const cls = shaderNodeClassMap.get(type); + if (!cls) { + console.error(`Can not find type for ${type}`); + } + shaderNode = new cls(); + shaderNode.init(); + shaderNode.block = block; + if (!shaderContext.allNodes.includes(shaderNode)) { + shaderContext.allNodes.push(shaderNode); + } + if (type === 'RegisterLocalVar') { + if (!shaderContext.localVars.includes(shaderNode)) { + shaderNode.name = block.getInputPinsList()[1].value.value; + shaderContext.localVars.push(shaderNode); + } + } + if (type === 'GetLocalVar') { + if (!shaderContext.getLocalVars.includes(shaderNode)) { + shaderNode.name = block.getInputPinsList()[0].value.value; + shaderContext.getLocalVars.push(shaderNode); + } + } + if (type === 'PropertyNode') { + shaderNode.name = block.block.details.title; + } + const inputPins = block.getInputPinsList(); + for (let i = 0; i < inputPins.length; i++) { + const pin = inputPins[i]; + const value = pin.value; + const input = shaderNode.inputs[i]; + let slot = shaderNode.getSlotWithSlotName(pin.desc.name); + if (!slot) { + slot = shaderNode.getPropWithName(pin.desc.name); + } + if (VectorDataType.includes(value.dataType)) { + if (slot) { + if (typeof value.value === 'number' || typeof value.value === 'boolean') { + slot.value = value.value; + } + else if (value.dataType === 'color') { + // srgb to linear + slot.value.set(value.value.x * value.value.x, value.value.y * value.value.y, value.value.z * value.value.z, value.value.w); + } + else if (value.dataType === 'enum') { + slot.value = value.value; + } + else if (value.dataType === 'dynamicEnum') { + // TODO + } + else { + slot.value.set(value.value); + } + } + } + } + block.shaderNode = shaderNode; + } + } + } + searchInputs(block) { + const shaderNode = block.shaderNode; + const inputList = block.getInputPinsList(); + for (let i = 0; i < inputList.length; i++) { + const pin = inputList[i]; + if (!shaderNode.inputs[i]) { + continue; + } + const connectPin = pin.connectPins[0]; + if (connectPin) { + const connectBlock = connectPin.block; + const connectShaderNode = connectBlock.shaderNode; + const connectOutIdx = connectPin.block.getOutputPinsList().indexOf(connectPin); + const connectSlot = connectShaderNode.outputs[connectOutIdx]; + shaderNode.inputs[i].connectSlots[0] = connectSlot; + connectSlot.connectSlots.push(shaderNode.inputs[i]); + this.searchInputs(connectBlock); + } + else { + shaderNode.inputs[i].connectSlots.length = 0; + } + } + } + async generateMasterNode(graphData) { + await this.initGraph(); + const forge = new block_forge_1.Forge(graphData); + const graph = forge.getGraph(); + this.shaderContext.reset(); + // TODO 这里还需要处理子图的 properties + const properties = graph.details.properties; + if (properties) { + properties.forEach((v) => { + const prop = new this.ShaderProperty(v.type); + prop.name = v.name; + prop.setValue(v.outputPins[0].value); + this.shaderContext.properties.push(prop); + }); + } + const blockMap = graph.getBlockMap(); + await this.createShaderNodes(blockMap); + let masterBlock; + for (const uuid in blockMap) { + const block = blockMap[uuid]; + if (!block.desc) + continue; + const type = block.desc.type; + if (type.includes('MasterNode')) { + masterBlock = block; + } + } + if (!masterBlock) { + throw new Error('Can not find MasterBlock'); + } + for (let i = 0; i < this.shaderContext.localVars.length; i++) { + const locVar = this.shaderContext.localVars[i]; + await this.searchInputs(locVar.block); + } + await this.searchInputs(masterBlock); + const masterNode = masterBlock.shaderNode; + return masterNode; + } + async generateEffectByGraphData(graphData) { + const masterNode = await this.generateMasterNode(graphData); + return masterNode.generateCode(); + } + // @ts-expect-error + async generateEffectByAsset(asset) { + const serializeYAML = await (0, fs_extra_1.readFile)(asset.source, 'utf8'); + const graphData = (0, js_yaml_1.load)(serializeYAML); + const code = await this.generateEffectByGraphData(graphData); + (0, fs_extra_1.ensureDirSync)(this.tempEffectCodeDir); + await (0, fs_extra_1.writeFile)(this.getTempEffectCodePath(asset), code); + return code; + } + // @ts-expect-error + existsCacheEffect(asset) { + return (0, fs_extra_1.existsSync)(this.getTempEffectCodePath(asset)); + } + /** + * 获取存储 effect code 文件夹 + */ + // @ts-expect-error + getTempEffectCodePath(asset) { + return (0, path_1.join)(this.tempEffectCodeDir, `${asset.uuid}.effect`); + } + /** + * 获取存储 effect code 路径 + */ + get tempEffectCodeDir() { + return (0, path_1.join)(Editor.Project.tmpDir, `shader-graph`); + } + /** + * 返回是否导入成功的标记 + * 如果返回 false,则 imported 标记不会变成 true + * 后续的一系列操作都不会执行 + * @param asset + */ + // @ts-expect-error + async import(asset) { + await (0, utils_3_8_1.generateEffectAsset)(asset, await this.generateEffectByAsset(asset)); + return true; + } +} +exports.ShaderGraph = ShaderGraph; +exports.default = new ShaderGraph(); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZGVyLWdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydGVyL3NoYWRlci1ncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBNEI7QUFDNUIscUNBQStCO0FBQy9CLHVDQUEwRTtBQUUxRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFBLFdBQUksRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBRXpELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUU5QyxnREFBOEM7QUFFOUMsa0RBQXlFO0FBQ3pFLDJDQUFrRDtBQUVsRCxNQUFNLGNBQWMsR0FBRztJQUNuQixPQUFPO0lBQ1AsTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0lBQ04sT0FBTztJQUNQLE1BQU07SUFDTixTQUFTO0NBQ1osQ0FBQztBQUVGLE1BQWEsV0FBVztJQUF4QjtRQWtCSSx1QkFBa0IsR0FBcUIsSUFBSSxHQUFHLENBQUM7UUFJL0M7Ozs7V0FJRztRQUNJLG1CQUFjLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFdkQsaUJBQVksR0FBRyxLQUFLLENBQUM7SUF3T3pCLENBQUM7SUFuUUcsSUFBSSxTQUFTO1FBQ1QsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFjRCxLQUFLLENBQUMsU0FBUztRQUNYLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFO1lBQzdELE9BQU87U0FDVjtRQUVE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SSxFQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBQSxXQUFJLEVBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbUJBQW1CO0lBQ1osS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFZO1FBQzVCLE1BQU0sSUFBQSwrQkFBbUIsRUFBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFyUUQsa0NBcVFDO0FBRUQsa0JBQWUsSUFBSSxXQUFXLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGxvYWQgfSBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7IGVuc3VyZURpclN5bmMsIHJlYWRGaWxlLCB3cml0ZUZpbGUsIGV4aXN0c1N5bmMgfSBmcm9tICdmcy1leHRyYSc7XG5cbm1vZHVsZS5wYXRocy5wdXNoKGpvaW4oRWRpdG9yLkFwcC5wYXRoLCAnbm9kZV9tb2R1bGVzJykpO1xuXG5jb25zdCB7IEFzc2V0IH0gPSByZXF1aXJlKCdAZWRpdG9yL2Fzc2V0LWRiJyk7XG5cbmltcG9ydCB7IEJsb2NrLCBGb3JnZSB9IGZyb20gJy4uL2Jsb2NrLWZvcmdlJztcbmltcG9ydCB7IEdyYXBoRGF0YSB9IGZyb20gJy4uL2Jsb2NrLWZvcmdlL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBJTW9kdWxlT3B0aW9ucywgZGVjbGFyZVNoYWRlck5vZGVCbG9jayB9IGZyb20gJy4uL3NoYWRlci1ncmFwaCc7XG5pbXBvcnQgeyBnZW5lcmF0ZUVmZmVjdEFzc2V0IH0gZnJvbSAnLi91dGlscy0zLjgnO1xuXG5jb25zdCBWZWN0b3JEYXRhVHlwZSA9IFtcbiAgICAnZmxvYXQnLFxuICAgICd2ZWMyJyxcbiAgICAndmVjMycsXG4gICAgJ3ZlYzQnLFxuICAgICdjb2xvcicsXG4gICAgJ2VudW0nLFxuICAgICdib29sZWFuJyxcbl07XG5cbmV4cG9ydCBjbGFzcyBTaGFkZXJHcmFwaCB7XG5cbiAgICBnZXQgYXNzZXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ2NjLkVmZmVjdEFzc2V0JztcbiAgICB9XG5cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuICcxLjAuMCc7XG4gICAgfVxuXG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiAnc2hhZGVyLWdyYXBoJztcbiAgICB9XG5cbiAgICBnZXQgbWlncmF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHNoYWRlck5vZGVDbGFzc01hcDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXA7XG4gICAgc2hhZGVyQ29udGV4dDogYW55O1xuICAgIFNoYWRlclByb3BlcnR5OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiDnlKjkuo7lrZjlgqjmr4/kuKogYXNzZXQg5a+55bqU55qEIHNvdXJjZVxuICAgICAqIOWvvOWFpeWJjeWFiOaNouaIkO+8jOaKiiBzb3VyY2Ug5pu/5o2i5oiQIHRlbXAg6Lev5b6E5LiL55qEIGVmZmVjdFxuICAgICAqIOWvvOWFpeWQjuWcqOabv+aNouaIkOWOn+acrOeahCBzb3VyY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgY2FjaGVTb3VyY2VNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG5cbiAgICBfaW5pdGVkR3JhcGggPSBmYWxzZTtcbiAgICBhc3luYyBpbml0R3JhcGgoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pbml0ZWRHcmFwaCAmJiB0aGlzLnNoYWRlckNvbnRleHQ/LnNoYWRlclRlbXBsYXRlc0Rpcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgRWRpdG9yLk1vZHVsZS5pbXBvcnRQcm9qZWN0TW9kdWxlKCdkYjovL3NoYWRlci1ncmFwaC9vcGVyYXRpb24vaW5kZXgudHMnKTtcblxuICAgICAgICBjb25zdCB7IFNoYWRlclByb3BlcnR5IH0gPSBhd2FpdCBFZGl0b3IuTW9kdWxlLmltcG9ydFByb2plY3RNb2R1bGUoJ2RiOi8vc2hhZGVyLWdyYXBoL29wZXJhdGlvbi9wcm9wZXJ0eS50cycpIGFzIGFueTtcbiAgICAgICAgdGhpcy5TaGFkZXJQcm9wZXJ0eSA9IFNoYWRlclByb3BlcnR5O1xuXG4gICAgICAgIGNvbnN0IHsgc2hhZGVyTm9kZU1hcCwgc2hhZGVyUHJvcGVydHlNYXAsIHNoYWRlck5vZGVDbGFzc01hcCB9ID0gYXdhaXQgRWRpdG9yLk1vZHVsZS5pbXBvcnRQcm9qZWN0TW9kdWxlKCdkYjovL3NoYWRlci1ncmFwaC9ncmFwaC9pbmRleC50cycpIGFzIElNb2R1bGVPcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IHsgc2hhZGVyQ29udGV4dCB9ID0gYXdhaXQgRWRpdG9yLk1vZHVsZS5pbXBvcnRQcm9qZWN0TW9kdWxlKCdkYjovL3NoYWRlci1ncmFwaC9vcGVyYXRpb24vY29udGV4dC50cycpIGFzIGFueTtcbiAgICAgICAgZGVjbGFyZVNoYWRlck5vZGVCbG9jayhzaGFkZXJOb2RlTWFwKTtcblxuICAgICAgICB0aGlzLnNoYWRlck5vZGVDbGFzc01hcCA9IHNoYWRlck5vZGVDbGFzc01hcDtcbiAgICAgICAgdGhpcy5zaGFkZXJDb250ZXh0ID0gc2hhZGVyQ29udGV4dDtcblxuICAgICAgICBzaGFkZXJDb250ZXh0LnNoYWRlclRlbXBsYXRlc0RpciA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LXBhdGgnLCAnZGI6Ly9zaGFkZXItZ3JhcGgvLi4vY29tcGlsZS1zaGFkZXIvc2hhZGVyLXRlbXBsYXRlcycpIGFzIHN0cmluZztcbiAgICAgICAgLy8gc2hhZGVyQ29udGV4dC5zaGFkZXJUZW1wbGF0ZXNEaXIgPSBxdWVyeVBhdGgoJ2RiOi8vc2hhZGVyLWdyYXBoLy4uL2NvbXBpbGUtc2hhZGVyL3NoYWRlci10ZW1wbGF0ZXMnKTtcbiAgICAgICAgdGhpcy5faW5pdGVkR3JhcGggPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZVNoYWRlck5vZGVzKGJsb2NrTWFwOiB7XG4gICAgICAgIFt1dWlkOiBzdHJpbmddOiBCbG9jaztcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0IHNoYWRlck5vZGVDbGFzc01hcCA9IHRoaXMuc2hhZGVyTm9kZUNsYXNzTWFwO1xuICAgICAgICBjb25zdCBzaGFkZXJDb250ZXh0ID0gdGhpcy5zaGFkZXJDb250ZXh0O1xuXG4gICAgICAgIGZvciAoY29uc3QgdXVpZCBpbiBibG9ja01hcCkge1xuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja01hcFt1dWlkXTtcbiAgICAgICAgICAgIGlmICghYmxvY2suZGVzYykgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gYmxvY2suZGVzYy50eXBlO1xuXG4gICAgICAgICAgICBsZXQgc2hhZGVyTm9kZSA9IChibG9jayBhcyBhbnkpLnNoYWRlck5vZGU7XG4gICAgICAgICAgICBpZiAoIXNoYWRlck5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbHMgPSBzaGFkZXJOb2RlQ2xhc3NNYXAuZ2V0KHR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghY2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbiBub3QgZmluZCB0eXBlIGZvciAke3R5cGV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNoYWRlck5vZGUgPSBuZXcgY2xzKCk7XG4gICAgICAgICAgICAgICAgc2hhZGVyTm9kZS5pbml0KCk7XG4gICAgICAgICAgICAgICAgc2hhZGVyTm9kZS5ibG9jayA9IGJsb2NrO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzaGFkZXJDb250ZXh0LmFsbE5vZGVzLmluY2x1ZGVzKHNoYWRlck5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRlckNvbnRleHQuYWxsTm9kZXMucHVzaChzaGFkZXJOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdSZWdpc3RlckxvY2FsVmFyJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNoYWRlckNvbnRleHQubG9jYWxWYXJzLmluY2x1ZGVzKHNoYWRlck5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJOb2RlLm5hbWUgPSBibG9jay5nZXRJbnB1dFBpbnNMaXN0KClbMV0udmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJDb250ZXh0LmxvY2FsVmFycy5wdXNoKHNoYWRlck5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnR2V0TG9jYWxWYXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2hhZGVyQ29udGV4dC5nZXRMb2NhbFZhcnMuaW5jbHVkZXMoc2hhZGVyTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlck5vZGUubmFtZSA9IGJsb2NrLmdldElucHV0UGluc0xpc3QoKVswXS52YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlckNvbnRleHQuZ2V0TG9jYWxWYXJzLnB1c2goc2hhZGVyTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdQcm9wZXJ0eU5vZGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRlck5vZGUubmFtZSA9IGJsb2NrLmJsb2NrLmRldGFpbHMudGl0bGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRQaW5zID0gYmxvY2suZ2V0SW5wdXRQaW5zTGlzdCgpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFBpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGluID0gaW5wdXRQaW5zW2ldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBpbi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBzaGFkZXJOb2RlLmlucHV0c1tpXTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgc2xvdCA9IHNoYWRlck5vZGUuZ2V0U2xvdFdpdGhTbG90TmFtZShwaW4uZGVzYy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzbG90KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbG90ID0gc2hhZGVyTm9kZS5nZXRQcm9wV2l0aE5hbWUocGluLmRlc2MubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoVmVjdG9yRGF0YVR5cGUuaW5jbHVkZXModmFsdWUuZGF0YVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUudmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QudmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3JnYiB0byBsaW5lYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC52YWx1ZS5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZS54ICogdmFsdWUudmFsdWUueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLnkgKiB2YWx1ZS52YWx1ZS55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWUueiAqIHZhbHVlLnZhbHVlLnosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZS53LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5kYXRhVHlwZSA9PT0gJ2VudW0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QudmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPT09ICdkeW5hbWljRW51bScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC52YWx1ZS5zZXQodmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIChibG9jayBhcyBhbnkpLnNoYWRlck5vZGUgPSBzaGFkZXJOb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VhcmNoSW5wdXRzKGJsb2NrOiBCbG9jaykge1xuICAgICAgICBjb25zdCBzaGFkZXJOb2RlID0gKGJsb2NrIGFzIGFueSkuc2hhZGVyTm9kZTtcbiAgICAgICAgY29uc3QgaW5wdXRMaXN0ID0gYmxvY2suZ2V0SW5wdXRQaW5zTGlzdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGluID0gaW5wdXRMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKCFzaGFkZXJOb2RlLmlucHV0c1tpXSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb25uZWN0UGluID0gcGluLmNvbm5lY3RQaW5zWzBdO1xuICAgICAgICAgICAgaWYgKGNvbm5lY3RQaW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0QmxvY2sgPSBjb25uZWN0UGluLmJsb2NrO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RTaGFkZXJOb2RlID0gKGNvbm5lY3RCbG9jayBhcyBhbnkpLnNoYWRlck5vZGU7XG4gICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdE91dElkeCA9IGNvbm5lY3RQaW4uYmxvY2suZ2V0T3V0cHV0UGluc0xpc3QoKS5pbmRleE9mKGNvbm5lY3RQaW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RTbG90ID0gY29ubmVjdFNoYWRlck5vZGUub3V0cHV0c1tjb25uZWN0T3V0SWR4XTtcblxuICAgICAgICAgICAgICAgIHNoYWRlck5vZGUuaW5wdXRzW2ldLmNvbm5lY3RTbG90c1swXSA9IGNvbm5lY3RTbG90O1xuICAgICAgICAgICAgICAgIGNvbm5lY3RTbG90LmNvbm5lY3RTbG90cy5wdXNoKHNoYWRlck5vZGUuaW5wdXRzW2ldKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRzKGNvbm5lY3RCbG9jayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaGFkZXJOb2RlLmlucHV0c1tpXS5jb25uZWN0U2xvdHMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZW5lcmF0ZU1hc3Rlck5vZGUoZ3JhcGhEYXRhOiBHcmFwaERhdGEpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0R3JhcGgoKTtcblxuICAgICAgICBjb25zdCBmb3JnZSA9IG5ldyBGb3JnZShncmFwaERhdGEpO1xuXG4gICAgICAgIGNvbnN0IGdyYXBoID0gZm9yZ2UuZ2V0R3JhcGgoKTtcblxuICAgICAgICB0aGlzLnNoYWRlckNvbnRleHQucmVzZXQoKTtcblxuICAgICAgICAvLyBUT0RPIOi/memHjOi/mOmcgOimgeWkhOeQhuWtkOWbvueahCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBncmFwaC5kZXRhaWxzLnByb3BlcnRpZXM7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2goKHY6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3AgPSBuZXcgdGhpcy5TaGFkZXJQcm9wZXJ0eSh2LnR5cGUpO1xuICAgICAgICAgICAgICAgIHByb3AubmFtZSA9IHYubmFtZTtcbiAgICAgICAgICAgICAgICBwcm9wLnNldFZhbHVlKHYub3V0cHV0UGluc1swXS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkZXJDb250ZXh0LnByb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmxvY2tNYXAgPSBncmFwaC5nZXRCbG9ja01hcCgpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU2hhZGVyTm9kZXMoYmxvY2tNYXApO1xuXG4gICAgICAgIGxldCBtYXN0ZXJCbG9jaztcbiAgICAgICAgZm9yIChjb25zdCB1dWlkIGluIGJsb2NrTWFwKSB7XG4gICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrTWFwW3V1aWRdO1xuICAgICAgICAgICAgaWYgKCFibG9jay5kZXNjKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9jay5kZXNjLnR5cGU7XG4gICAgICAgICAgICBpZiAodHlwZS5pbmNsdWRlcygnTWFzdGVyTm9kZScpKSB7XG4gICAgICAgICAgICAgICAgbWFzdGVyQmxvY2sgPSBibG9jaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbWFzdGVyQmxvY2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIE1hc3RlckJsb2NrJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2hhZGVyQ29udGV4dC5sb2NhbFZhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY1ZhciA9IHRoaXMuc2hhZGVyQ29udGV4dC5sb2NhbFZhcnNbaV07XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNlYXJjaElucHV0cyhsb2NWYXIuYmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuc2VhcmNoSW5wdXRzKG1hc3RlckJsb2NrKTtcblxuICAgICAgICBjb25zdCBtYXN0ZXJOb2RlID0gKG1hc3RlckJsb2NrIGFzIGFueSkuc2hhZGVyTm9kZTtcbiAgICAgICAgcmV0dXJuIG1hc3Rlck5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdlbmVyYXRlRWZmZWN0QnlHcmFwaERhdGEoZ3JhcGhEYXRhOiBHcmFwaERhdGEpIHtcbiAgICAgICAgY29uc3QgbWFzdGVyTm9kZSA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVNYXN0ZXJOb2RlKGdyYXBoRGF0YSk7XG4gICAgICAgIHJldHVybiBtYXN0ZXJOb2RlLmdlbmVyYXRlQ29kZSgpO1xuICAgIH1cblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGVFZmZlY3RCeUFzc2V0KGFzc2V0OiBBc3NldCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVZQU1MID0gYXdhaXQgcmVhZEZpbGUoYXNzZXQuc291cmNlLCAndXRmOCcpO1xuXG4gICAgICAgIGNvbnN0IGdyYXBoRGF0YSA9IGxvYWQoc2VyaWFsaXplWUFNTCkgYXMgR3JhcGhEYXRhO1xuXG4gICAgICAgIGNvbnN0IGNvZGUgPSBhd2FpdCB0aGlzLmdlbmVyYXRlRWZmZWN0QnlHcmFwaERhdGEoZ3JhcGhEYXRhKTtcblxuICAgICAgICBlbnN1cmVEaXJTeW5jKHRoaXMudGVtcEVmZmVjdENvZGVEaXIpO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGhpcy5nZXRUZW1wRWZmZWN0Q29kZVBhdGgoYXNzZXQpLCBjb2RlKTtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHB1YmxpYyBleGlzdHNDYWNoZUVmZmVjdChhc3NldDogQXNzZXQpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0c1N5bmModGhpcy5nZXRUZW1wRWZmZWN0Q29kZVBhdGgoYXNzZXQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blrZjlgqggZWZmZWN0IGNvZGUg5paH5Lu25aS5XG4gICAgICovXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHB1YmxpYyBnZXRUZW1wRWZmZWN0Q29kZVBhdGgoYXNzZXQ6IEFzc2V0KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGpvaW4odGhpcy50ZW1wRWZmZWN0Q29kZURpciwgYCR7YXNzZXQudXVpZH0uZWZmZWN0YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5a2Y5YKoIGVmZmVjdCBjb2RlIOi3r+W+hFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGVtcEVmZmVjdENvZGVEaXIoKSB7XG4gICAgICAgIHJldHVybiBqb2luKEVkaXRvci5Qcm9qZWN0LnRtcERpciwgYHNoYWRlci1ncmFwaGApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi/lOWbnuaYr+WQpuWvvOWFpeaIkOWKn+eahOagh+iusFxuICAgICAqIOWmguaenOi/lOWbniBmYWxzZe+8jOWImSBpbXBvcnRlZCDmoIforrDkuI3kvJrlj5jmiJAgdHJ1ZVxuICAgICAqIOWQjue7reeahOS4gOezu+WIl+aTjeS9nOmDveS4jeS8muaJp+ihjFxuICAgICAqIEBwYXJhbSBhc3NldFxuICAgICAqL1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0KGFzc2V0OiBBc3NldCkge1xuICAgICAgICBhd2FpdCBnZW5lcmF0ZUVmZmVjdEFzc2V0KGFzc2V0LCBhd2FpdCB0aGlzLmdlbmVyYXRlRWZmZWN0QnlBc3NldChhc3NldCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTaGFkZXJHcmFwaCgpO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/importer/utils-3.8.js b/extensions/shader-graph/dist/importer/utils-3.8.js new file mode 100644 index 0000000..2be4095 --- /dev/null +++ b/extensions/shader-graph/dist/importer/utils-3.8.js @@ -0,0 +1,121 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getDeserializeResult = exports.getDependUUIDList = exports.generateEffectAsset = void 0; +const path_1 = require("path"); +module.paths.push((0, path_1.join)(Editor.App.path, 'node_modules')); +const { AssetDB, forEach, Asset } = require('@editor/asset-db'); +const effect_utils_1 = require("../effect-utils"); +async function loadTexture(assetId) { + return new Promise((resolve) => { + cc.assetManager.loadAny(assetId, (error, asset) => { + if (!error) { + resolve(asset); + } + else { + resolve(null); + } + }); + }); +} +/** + * 在 library 里生成对应的 effectAsset 对象 + * @param asset 资源数据 + * @param code + */ +// @ts-expect-error +async function generateEffectAsset(asset, code) { + const name = (0, path_1.basename)(asset.source, (0, path_1.extname)(asset.source)); + const effect = await (0, effect_utils_1.buildEffect)(name, code); + // 记录 effect 的头文件依赖 + // @ts-expect-error + forEach((db) => { + for (const header of effect.dependencies) { + asset.depend((0, path_1.resolve)(db.options.target, 'chunks', header + '.chunk')); + } + }); + const result = new cc.EffectAsset(); + Object.assign(result, effect); + // 引擎数据结构不变,保留 hideInEditor 属性 + if (effect.editor && effect.editor.hide) { + result.hideInEditor = true; + } + for (let n = 0; n < result.techniques.length; n++) { + const technique = result.techniques[n]; + for (let i = 0; i < technique.passes.length; i++) { + const pass = technique.passes[i]; + for (const key in pass.properties) { + const propInfo = pass.properties[key]; + if (typeof propInfo.value === 'string') { + const assetId = propInfo.value; + if (Editor.Utils.UUID.isUUID(assetId)) { + const asset = await loadTexture(assetId); + if (asset) { + propInfo.value = asset; + } + } + } + } + } + } + // 添加 meta 文件中的 combinations + if (asset.userData) { + if (asset.userData.combinations) { + result.combinations = asset.userData.combinations; + } + if (effect.editor) { + asset.userData.editor = effect.editor; + } + else { + // 已存在的需要清空 + asset.userData.editor = undefined; + } + } + const serializeJSON = EditorExtends.serialize(result); + await asset.saveToLibrary('.json', serializeJSON); + const depends = getDependUUIDList(serializeJSON); + asset.setData('depends', depends); +} +exports.generateEffectAsset = generateEffectAsset; +function getDependUUIDList(content, uuid) { + if (typeof content === 'string') { + // 注意:此方法无法匹配出脚本引用的 uuid + let arr = content.match(/[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}(@[a-z0-9]+){0,}/g); + if (arr) { + // https://stackoverflow.com/questions/32813720/nodejs-profiling-parent-in-sliced-string + arr = JSON.parse(JSON.stringify(Array.from(new Set(arr)).filter((id) => id !== uuid))); + } + // const arr = content.match(/"__uuid__":( )?"[^"]+/g); + return arr || []; + } + // console.warn('Unable to extract dependencies properly'); + return getDeserializeResult(content).uuids; +} +exports.getDependUUIDList = getDependUUIDList; +function getDeserializeResult(json) { + const deserializeDetails = new cc.deserialize.Details(); + deserializeDetails.reset(); + const MissingClass = EditorExtends.MissingReporter.classInstance; + MissingClass.reset(); + MissingClass.hasMissingClass = false; + const dependScriptID = new Set(); + function classFinder(classId) { + if (Editor.Utils.UUID.isUUID(classId)) { + dependScriptID.add(Editor.Utils.UUID.decompressUUID(classId)); + } + return MissingClass.classFinder(classId); + } + const deserializedAsset = cc.deserialize(json, deserializeDetails, { + classFinder, + }); + deserializeDetails.assignAssetsBy(function (uuid, options) { + return EditorExtends.serialize.asAsset(uuid); + }); + return { + instance: deserializedAsset, + uuids: deserializeDetails.uuidList, + dependScriptUuids: Array.from(dependScriptID), + classFinder: MissingClass.classFinder, + }; +} +exports.getDeserializeResult = getDeserializeResult; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtMy44LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydGVyL3V0aWxzLTMuOC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBd0Q7QUFFeEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBQSxXQUFJLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUV6RCxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUloRSxrREFBOEM7QUFLOUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxPQUFlO0lBQ3RDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUMzQixFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFVLEVBQUUsS0FBVSxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDUixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7aUJBQU07Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsbUJBQW1CO0FBQ1osS0FBSyxVQUFVLG1CQUFtQixDQUFDLEtBQVksRUFBRSxJQUFZO0lBQ2hFLE1BQU0sSUFBSSxHQUFHLElBQUEsZUFBUSxFQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBQSxjQUFPLEVBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLDBCQUFXLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTdDLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFD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TSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtRQUMvRCxXQUFXO0tBQ2QsQ0FBQyxDQUFDO0lBQ0gsa0JBQWtCLENBQUMsY0FBYyxDQUFDLFVBQVMsSUFBWSxFQUFFLE9BQXdEO1FBQzdHLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPO1FBQ0gsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQixLQUFLLEVBQUUsa0JBQWtCLENBQUMsUUFBUTtRQUNsQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM3QyxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7S0FDeEMsQ0FBQztBQUNOLENBQUM7QUF6QkQsb0RBeUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmFzZW5hbWUsIGV4dG5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcblxubW9kdWxlLnBhdGhzLnB1c2goam9pbihFZGl0b3IuQXBwLnBhdGgsICdub2RlX21vZHVsZXMnKSk7XG5cbmNvbnN0IHsgQXNzZXREQiwgZm9yRWFjaCwgQXNzZXQgfSA9IHJlcXVpcmUoJ0BlZGl0b3IvYXNzZXQtZGInKTtcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQ0NPTiB9IGZyb20gJ2NjL2VkaXRvci9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGJ1aWxkRWZmZWN0IH0gZnJvbSAnLi4vZWZmZWN0LXV0aWxzJztcblxuZGVjbGFyZSBjb25zdCBFZGl0b3JFeHRlbmRzOiBhbnk7XG5kZWNsYXJlIGNvbnN0IGNjOiBhbnk7XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRUZXh0dXJlKGFzc2V0SWQ6IHN0cmluZyk6IFByb21pc2U8YW55IHwgbnVsbD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjYy5hc3NldE1hbmFnZXIubG9hZEFueShhc3NldElkLCAoZXJyb3I6IGFueSwgYXNzZXQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoYXNzZXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiDlnKggbGlicmFyeSDph4znlJ/miJDlr7nlupTnmoQgZWZmZWN0QXNzZXQg5a+56LGhXG4gKiBAcGFyYW0gYXNzZXQg6LWE5rqQ5pWw5o2uXG4gKiBAcGFyYW0gY29kZVxuICovXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFZmZlY3RBc3NldChhc3NldDogQXNzZXQsIGNvZGU6IHN0cmluZyl7XG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKGFzc2V0LnNvdXJjZSwgZXh0bmFtZShhc3NldC5zb3VyY2UpKTtcblxuICAgIGNvbnN0IGVmZmVjdCA9IGF3YWl0IGJ1aWxkRWZmZWN0KG5hbWUsIGNvZGUpO1xuXG4gICAgLy8g6K6w5b2VIGVmZmVjdCDnmoTlpLTmlofku7bkvp3otZZcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgZm9yRWFjaCgoZGI6IEFzc2V0REIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgb2YgZWZmZWN0LmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgYXNzZXQuZGVwZW5kKHJlc29sdmUoZGIub3B0aW9ucy50YXJnZXQsICdjaHVua3MnLCBoZWFkZXIgKyAnLmNodW5rJykpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgY2MuRWZmZWN0QXNzZXQoKTtcbiAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgZWZmZWN0KTtcblxuICAgIC8vIOW8leaTjuaVsOaNrue7k+aehOS4jeWPmO+8jOS/neeVmSBoaWRlSW5FZGl0b3Ig5bGe5oCnXG4gICAgaWYgKGVmZmVjdC5lZGl0b3IgJiYgZWZmZWN0LmVkaXRvci5oaWRlKSB7XG4gICAgICAgIHJlc3VsdC5oaWRlSW5FZGl0b3IgPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcmVzdWx0LnRlY2huaXF1ZXMubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgY29uc3QgdGVjaG5pcXVlID0gcmVzdWx0LnRlY2huaXF1ZXNbbl07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVjaG5pcXVlLnBhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFzcyA9IHRlY2huaXF1ZS5wYXNzZXNbaV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXNzLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wSW5mbyA9IHBhc3MucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcEluZm8udmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzc2V0SWQgPSBwcm9wSW5mby52YWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChFZGl0b3IuVXRpbHMuVVVJRC5pc1VVSUQoYXNzZXRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgbG9hZFRleHR1cmUoYXNzZXRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wSW5mby52YWx1ZSA9IGFzc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5re75YqgIG1ldGEg5paH5Lu25Lit55qEIGNvbWJpbmF0aW9uc1xuICAgIGlmIChhc3NldC51c2VyRGF0YSkge1xuICAgICAgICBpZiAoYXNzZXQudXNlckRhdGEuY29tYmluYXRpb25zKSB7XG4gICAgICAgICAgICByZXN1bHQuY29tYmluYXRpb25zID0gYXNzZXQudXNlckRhdGEuY29tYmluYXRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVmZmVjdC5lZGl0b3IpIHtcbiAgICAgICAgICAgIGFzc2V0LnVzZXJEYXRhLmVkaXRvciA9IGVmZmVjdC5lZGl0b3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDlt7LlrZjlnKjnmoTpnIDopoHmuIXnqbpcbiAgICAgICAgICAgIGFzc2V0LnVzZXJEYXRhLmVkaXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNlcmlhbGl6ZUpTT04gPSBFZGl0b3JFeHRlbmRzLnNlcmlhbGl6ZShyZXN1bHQpO1xuICAgIGF3YWl0IGFzc2V0LnNhdmVUb0xpYnJhcnkoJy5qc29uJywgc2VyaWFsaXplSlNPTik7XG5cbiAgICBjb25zdCBkZXBlbmRzID0gZ2V0RGVwZW5kVVVJRExpc3Qoc2VyaWFsaXplSlNPTik7XG4gICAgYXNzZXQuc2V0RGF0YSgnZGVwZW5kcycsIGRlcGVuZHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVwZW5kVVVJRExpc3QoY29udGVudDogc3RyaW5nIHwgQ0NPTiB8IE9iamVjdCwgdXVpZD86IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8g5rOo5oSP77ya5q2k5pa55rOV5peg5rOV5Yy56YWN5Ye66ISa5pys5byV55So55qEIHV1aWRcbiAgICAgICAgbGV0IGFyciA9IGNvbnRlbnQubWF0Y2goL1thLXowLTldezh9LVthLXowLTldezR9LVthLXowLTldezR9LVthLXowLTldezR9LVthLXowLTldezEyfShAW2EtejAtOV0rKXswLH0vZyk7XG4gICAgICAgIGlmIChhcnIpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMyODEzNzIwL25vZGVqcy1wcm9maWxpbmctcGFyZW50LWluLXNsaWNlZC1zdHJpbmdcbiAgICAgICAgICAgIGFyciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShuZXcgU2V0KGFycikpLmZpbHRlcigoaWQpID0+IGlkICE9PSB1dWlkKSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IGFyciA9IGNvbnRlbnQubWF0Y2goL1wiX191dWlkX19cIjooICk/XCJbXlwiXSsvZyk7XG4gICAgICAgIHJldHVybiBhcnIgfHwgW107XG4gICAgfVxuICAgIC8vIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGV4dHJhY3QgZGVwZW5kZW5jaWVzIHByb3Blcmx5Jyk7XG5cbiAgICByZXR1cm4gZ2V0RGVzZXJpYWxpemVSZXN1bHQoY29udGVudCkudXVpZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNlcmlhbGl6ZVJlc3VsdChqc29uOiBDQ09OIHwgT2JqZWN0KSB7XG4gICAgY29uc3QgZGVzZXJpYWxpemVEZXRhaWxzID0gbmV3IGNjLmRlc2VyaWFsaXplLkRldGFpbHMoKTtcbiAgICBkZXNlcmlhbGl6ZURldGFpbHMucmVzZXQoKTtcbiAgICBjb25zdCBNaXNzaW5nQ2xhc3MgPSBFZGl0b3JFeHRlbmRzLk1pc3NpbmdSZXBvcnRlci5jbGFzc0luc3RhbmNlO1xuICAgIE1pc3NpbmdDbGFzcy5yZXNldCgpO1xuICAgIE1pc3NpbmdDbGFzcy5oYXNNaXNzaW5nQ2xhc3MgPSBmYWxzZTtcbiAgICBjb25zdCBkZXBlbmRTY3JpcHRJRCA9IG5ldyBTZXQoKTtcbiAgICBmdW5jdGlvbiBjbGFzc0ZpbmRlcihjbGFzc0lkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKEVkaXRvci5VdGlscy5VVUlELmlzVVVJRChjbGFzc0lkKSkge1xuICAgICAgICAgICAgZGVwZW5kU2NyaXB0SUQuYWRkKEVkaXRvci5VdGlscy5VVUlELmRlY29tcHJlc3NVVUlEKGNsYXNzSWQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWlzc2luZ0NsYXNzLmNsYXNzRmluZGVyKGNsYXNzSWQpO1xuICAgIH1cbiAgICBjb25zdCBkZXNlcmlhbGl6ZWRBc3NldCA9IGNjLmRlc2VyaWFsaXplKGpzb24sIGRlc2VyaWFsaXplRGV0YWlscywge1xuICAgICAgICBjbGFzc0ZpbmRlcixcbiAgICB9KTtcbiAgICBkZXNlcmlhbGl6ZURldGFpbHMuYXNzaWduQXNzZXRzQnkoZnVuY3Rpb24odXVpZDogc3RyaW5nLCBvcHRpb25zOiB7IG93bmVyOiBvYmplY3Q7IHByb3A6IHN0cmluZzsgdHlwZTogRnVuY3Rpb24gfSkge1xuICAgICAgICByZXR1cm4gRWRpdG9yRXh0ZW5kcy5zZXJpYWxpemUuYXNBc3NldCh1dWlkKTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbnN0YW5jZTogZGVzZXJpYWxpemVkQXNzZXQsXG4gICAgICAgIHV1aWRzOiBkZXNlcmlhbGl6ZURldGFpbHMudXVpZExpc3QsXG4gICAgICAgIGRlcGVuZFNjcmlwdFV1aWRzOiBBcnJheS5mcm9tKGRlcGVuZFNjcmlwdElEKSxcbiAgICAgICAgY2xhc3NGaW5kZXI6IE1pc3NpbmdDbGFzcy5jbGFzc0ZpbmRlcixcbiAgICB9O1xufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/main.js b/extensions/shader-graph/dist/main.js new file mode 100644 index 0000000..de76929 --- /dev/null +++ b/extensions/shader-graph/dist/main.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.unload = exports.load = exports.methods = void 0; +const global_exports_1 = require("./shader-graph/global-exports"); +/** + * @en + * @zh 为扩展的主进程的注册方法 + */ +exports.methods = { + openPanel() { + Editor.Panel.open(global_exports_1.PACKAGE_NAME); + }, + async openShaderGraph(assetUuid) { + const lastAssetUuid = await Editor.Profile.getConfig(global_exports_1.PACKAGE_NAME, 'asset-uuid', 'local'); + await Editor.Profile.setConfig(global_exports_1.PACKAGE_NAME, 'asset-uuid', assetUuid, 'local'); + if (await Editor.Panel.has(global_exports_1.PANEL_NAME)) { + Editor.Message.send(global_exports_1.PACKAGE_NAME, 'open-asset', assetUuid, lastAssetUuid); + return; + } + await Editor.Panel.open(global_exports_1.PANEL_NAME); + }, +}; +/** + * @en Hooks triggered after extension loading is complete + * @zh 扩展加载完成后触发的钩子 + */ +function load() { +} +exports.load = load; +/** + * @en Hooks triggered after extension uninstallation is complete + * @zh 扩展卸载完成后触发的钩子 + */ +function unload() { } +exports.unload = unload; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGtFQUF5RTtBQUV6RTs7O0dBR0c7QUFDVSxRQUFBLE9BQU8sR0FBNEM7SUFDNUQsU0FBUztRQUNMLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDZCQUFZLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxTQUFpQjtRQUNuQyxNQUFNLGFBQWEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLDZCQUFZLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFGLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsNkJBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRS9FLElBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQywyQkFBVSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzFFLE9BQU87U0FDVjtRQUVELE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsMkJBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDSixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBZ0IsSUFBSTtBQUVwQixDQUFDO0FBRkQsb0JBRUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixNQUFNLEtBQUssQ0FBQztBQUE1Qix3QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQQUNLQUdFX05BTUUsIFBBTkVMX05BTUUgfSBmcm9tICcuL3NoYWRlci1ncmFwaC9nbG9iYWwtZXhwb3J0cyc7XG5cbi8qKlxuICogQGVuXG4gKiBAemgg5Li65omp5bGV55qE5Li76L+b56iL55qE5rOo5YaM5pa55rOVXG4gKi9cbmV4cG9ydCBjb25zdCBtZXRob2RzOiB7IFtrZXk6IHN0cmluZ106ICguLi5hbnk6IGFueSkgPT4gYW55IH0gPSB7XG4gICAgb3BlblBhbmVsKCkge1xuICAgICAgICBFZGl0b3IuUGFuZWwub3BlbihQQUNLQUdFX05BTUUpO1xuICAgIH0sXG5cbiAgICBhc3luYyBvcGVuU2hhZGVyR3JhcGgoYXNzZXRVdWlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGFzdEFzc2V0VXVpZCA9IGF3YWl0IEVkaXRvci5Qcm9maWxlLmdldENvbmZpZyhQQUNLQUdFX05BTUUsICdhc3NldC11dWlkJywgJ2xvY2FsJyk7XG4gICAgICAgIGF3YWl0IEVkaXRvci5Qcm9maWxlLnNldENvbmZpZyhQQUNLQUdFX05BTUUsICdhc3NldC11dWlkJywgYXNzZXRVdWlkLCAnbG9jYWwnKTtcblxuICAgICAgICBpZiAoYXdhaXQgRWRpdG9yLlBhbmVsLmhhcyhQQU5FTF9OQU1FKSkge1xuICAgICAgICAgICAgRWRpdG9yLk1lc3NhZ2Uuc2VuZChQQUNLQUdFX05BTUUsICdvcGVuLWFzc2V0JywgYXNzZXRVdWlkLCBsYXN0QXNzZXRVdWlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IEVkaXRvci5QYW5lbC5vcGVuKFBBTkVMX05BTUUpO1xuICAgIH0sXG59O1xuXG4vKipcbiAqIEBlbiBIb29rcyB0cmlnZ2VyZWQgYWZ0ZXIgZXh0ZW5zaW9uIGxvYWRpbmcgaXMgY29tcGxldGVcbiAqIEB6aCDmianlsZXliqDovb3lrozmiJDlkI7op6blj5HnmoTpkqnlrZBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoKSB7XG5cbn1cblxuLyoqXG4gKiBAZW4gSG9va3MgdHJpZ2dlcmVkIGFmdGVyIGV4dGVuc2lvbiB1bmluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZVxuICogQHpoIOaJqeWxleWNuOi9veWujOaIkOWQjuinpuWPkeeahOmSqeWtkFxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5sb2FkKCkgeyB9XG5cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/const.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/const.js new file mode 100644 index 0000000..66ca220 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/const.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getMinSize = exports.setMinSize = void 0; +let minWidth = 0; +let minHeight = 0; +function setMinSize(width, height) { + minWidth = width; + minHeight = height; +} +exports.setMinSize = setMinSize; +function getMinSize() { + return { + width: minWidth, + height: minHeight, + }; +} +exports.getMinSize = getMinSize; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGFuZWxzL3NoYWRlci1ncmFwaC9jb21wb25lbnRzL2Zsb2F0LXdpbmRvdy9iYXNlL2NvbnN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNqQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFbEIsU0FBZ0IsVUFBVSxDQUFDLEtBQWEsRUFBRSxNQUFjO0lBQ3BELFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDO0FBSEQsZ0NBR0M7QUFFRCxTQUFnQixVQUFVO0lBQ3RCLE9BQU87UUFDSCxLQUFLLEVBQUUsUUFBUTtRQUNmLE1BQU0sRUFBRSxTQUFTO0tBQ3BCLENBQUM7QUFDTixDQUFDO0FBTEQsZ0NBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgbWluV2lkdGggPSAwO1xubGV0IG1pbkhlaWdodCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRNaW5TaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgbWluV2lkdGggPSB3aWR0aDtcbiAgICBtaW5IZWlnaHQgPSBoZWlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaW5TaXplKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBtaW5XaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBtaW5IZWlnaHQsXG4gICAgfTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/header.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/header.js new file mode 100644 index 0000000..f288330 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/header.js @@ -0,0 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.useDragEvent = void 0; +let onDragStartHeaderEvent; +/** + * 添加 header 拖动时间 + * @param options + */ +function useDragEvent(options) { + const { target, $window, config } = options; + if (!config.events.drag) { + target.removeEventListener('mousedown', onDragStartHeaderEvent, false); + target.removeAttribute('style'); + return; + } + if (target.getAttribute('has-drag-event') !== null) + return; + const parentElement = $window.parentElement; + onDragStartHeaderEvent = function (event) { + event.stopPropagation(); + const parentElementRect = parentElement.getBoundingClientRect(); + const windowRect = $window.getBoundingClientRect(); + const pointX = event.clientX; + const pointY = event.clientY; + const uiGraphForge = parentElement.parentElement?.querySelector('ui-graph-forge')?.shadowRoot; + const uiGraphForgeHeaderHeight = uiGraphForge?.querySelector('header')?.clientHeight || 28; + // 当前窗口的位置 + const start = { + left: $window.offsetLeft, + top: $window.offsetTop, + }; + const minX = 0; + const minY = uiGraphForgeHeaderHeight; + const maxX = parentElement.offsetWidth + parentElement.offsetLeft - windowRect.width; + const maxY = parentElement.offsetHeight - parentElement.offsetTop - windowRect.height; + const tabs = $window.parentNode?.parentNode?.querySelector('.right-tabs'); + const tabsRect = tabs?.getBoundingClientRect(); + function drag(event) { + const x = start.left + (event.clientX - pointX); + const y = start.top + (event.clientY - pointY); + let newX = 0, newY = 0; + if (config.events.limitless) { + newX = x; + newY = y; + } + else { + newY = Math.min(Math.max(minY, y), maxY); + newX = Math.min(Math.max(minX, x), maxX - (tabsRect?.width || 0)); + } + $window.style.left = `${newX}px`; + $window.style.top = `${newY}px`; + options.onChange && options.onChange($window.style); + } + function dragEnd() { + document.removeEventListener('mousemove', drag, true); + document.removeEventListener('mouseup', dragEnd, true); + } + document.addEventListener('mousemove', drag, true); + document.addEventListener('mouseup', dragEnd, true); + }; + target.addEventListener('mousedown', onDragStartHeaderEvent, false); + target.setAttribute('style', 'cursor: move;'); + target.setAttribute('has-drag-event', ''); +} +exports.useDragEvent = useDragEvent; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3BhbmVscy9zaGFkZXItZ3JhcGgvY29tcG9uZW50cy9mbG9hdC13aW5kb3cvYmFzZS9oZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBa0JBLElBQUksc0JBQW1ELENBQUM7QUFFeEQ7OztHQUdHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE9BQTJCO0lBQ3BELE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUU1QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDckIsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLE9BQU87S0FDVjtJQUVELElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUk7UUFBRSxPQUFPO0lBRTNELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFjLENBQUM7SUFFN0Msc0JBQXNCLEdBQUcsVUFBUyxLQUFpQjtRQUMvQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNoRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNuRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFN0IsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxVQUFVLENBQUM7UUFDOUYsTUFBTSx3QkFBd0Is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IEZsb2F0V2luZG93Q29uZmlnIH0gZnJvbSAnLi4vaW50ZXJuYWwnO1xuXG4vKipcbiAqIEBwYXJhbSBoZWFkZXJcbiAqIEBwYXJhbSBsaW1pdGVkQXJlYUVsZW1lbnRcbiAqIEBwYXJhbSAkd2luZG93IC0g5b2T5YmN56qX5Y+j5a+56LGhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUhlYWRlckRyYWdPcHRpb25zIHtcbiAgICAvLyDpnIDopoHmi5bliqjnmoTlr7nosaFcbiAgICB0YXJnZXQ6IEhUTUxEaXZFbGVtZW50O1xuICAgIC8vIOW9k+WJjeeql+WPo+WvueixoVxuICAgICR3aW5kb3c6IEhUTUxEaXZFbGVtZW50O1xuICAgIC8vIOmFjee9rlxuICAgIGNvbmZpZzogRmxvYXRXaW5kb3dDb25maWc7XG4gICAgb25DaGFuZ2U/OiAoc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24pID0+IHZvaWQ7XG5cbn1cblxubGV0IG9uRHJhZ1N0YXJ0SGVhZGVyRXZlbnQ6IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcblxuLyoqXG4gKiDmt7vliqAgaGVhZGVyIOaLluWKqOaXtumXtFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURyYWdFdmVudChvcHRpb25zOiBJSGVhZGVyRHJhZ09wdGlvbnMpIHtcbiAgICBjb25zdCB7IHRhcmdldCwgJHdpbmRvdywgY29uZmlnIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKCFjb25maWcuZXZlbnRzLmRyYWcpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uRHJhZ1N0YXJ0SGVhZGVyRXZlbnQsIGZhbHNlKTtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXQuZ2V0QXR0cmlidXRlKCdoYXMtZHJhZy1ldmVudCcpICE9PSBudWxsKSByZXR1cm47XG5cbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gJHdpbmRvdy5wYXJlbnRFbGVtZW50ITtcblxuICAgIG9uRHJhZ1N0YXJ0SGVhZGVyRXZlbnQgPSBmdW5jdGlvbihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50UmVjdCA9IHBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHdpbmRvd1JlY3QgPSAkd2luZG93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBwb2ludFggPSBldmVudC5jbGllbnRYO1xuICAgICAgICBjb25zdCBwb2ludFkgPSBldmVudC5jbGllbnRZO1xuXG4gICAgICAgIGNvbnN0IHVpR3JhcGhGb3JnZSA9IHBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudD8ucXVlcnlTZWxlY3RvcigndWktZ3JhcGgtZm9yZ2UnKT8uc2hhZG93Um9vdDtcbiAgICAgICAgY29uc3QgdWlHcmFwaEZvcmdlSGVhZGVySGVpZ2h0ID0gdWlHcmFwaEZvcmdlPy5xdWVyeVNlbGVjdG9yKCdoZWFkZXInKT8uY2xpZW50SGVpZ2h0IHx8IDI4O1xuXG4gICAgICAgIC8vIOW9k+WJjeeql+WPo+eahOS9jee9rlxuICAgICAgICBjb25zdCBzdGFydCA9IHtcbiAgICAgICAgICAgIGxlZnQ6ICR3aW5kb3cub2Zmc2V0TGVmdCxcbiAgICAgICAgICAgIHRvcDogJHdpbmRvdy5vZmZzZXRUb3AsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWluWCA9IDA7XG4gICAgICAgIGNvbnN0IG1pblkgPSB1aUdyYXBoRm9yZ2VIZWFkZXJIZWlnaHQ7XG4gICAgICAgIGNvbnN0IG1heFggPSBwYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoICsgcGFyZW50RWxlbWVudC5vZmZzZXRMZWZ0IC0gd2luZG93UmVjdC53aWR0aDtcbiAgICAgICAgY29uc3QgbWF4WSA9IHBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gcGFyZW50RWxlbWVudC5vZmZzZXRUb3AgLSB3aW5kb3dSZWN0LmhlaWdodDtcblxuICAgICAgICBjb25zdCB0YWJzID0gJHdpbmRvdy5wYXJlbnROb2RlPy5wYXJlbnROb2RlPy5xdWVyeVNlbGVjdG9yKCcucmlnaHQtdGFicycpO1xuICAgICAgICBjb25zdCB0YWJzUmVjdCA9IHRhYnM/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGRyYWcoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBzdGFydC5sZWZ0ICsgKGV2ZW50LmNsaWVudFggLSBwb2ludFgpO1xuICAgICAgICAgICAgY29uc3QgeSA9IHN0YXJ0LnRvcCArIChldmVudC5jbGllbnRZIC0gcG9pbnRZKTtcblxuICAgICAgICAgICAgbGV0IG5ld1ggPSAwLCBuZXdZID0gMDtcbiAgICAgICAgICAgIGlmIChjb25maWcuZXZlbnRzLmxpbWl0bGVzcykge1xuICAgICAgICAgICAgICAgIG5ld1ggPSB4O1xuICAgICAgICAgICAgICAgIG5ld1kgPSB5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdZID0gTWF0aC5taW4oTWF0aC5tYXgobWluWSwgeSksIG1heFkpO1xuICAgICAgICAgICAgICAgIG5ld1ggPSBNYXRoLm1pbihNYXRoLm1heChtaW5YLCB4KSwgbWF4WCAtICh0YWJzUmVjdD8ud2lkdGggfHwgMCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkd2luZG93LnN0eWxlLmxlZnQgPSBgJHtuZXdYfXB4YDtcbiAgICAgICAgICAgICR3aW5kb3cuc3R5bGUudG9wID0gYCR7bmV3WX1weGA7XG5cbiAgICAgICAgICAgIG9wdGlvbnMub25DaGFuZ2UgJiYgb3B0aW9ucy5vbkNoYW5nZSgkd2luZG93LnN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRyYWdFbmQoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBkcmFnLCB0cnVlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBkcmFnRW5kLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGRyYWcsIHRydWUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZHJhZ0VuZCwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbkRyYWdTdGFydEhlYWRlckV2ZW50LCBmYWxzZSk7XG4gICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnY3Vyc29yOiBtb3ZlOycpO1xuICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2hhcy1kcmFnLWV2ZW50JywgJycpO1xufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/index.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/index.js new file mode 100644 index 0000000..0d17e56 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/index.js @@ -0,0 +1,157 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const header_1 = require("./header"); +const resizer_1 = require("./resizer"); +const block_forge_1 = require("../../../../../block-forge"); +const internal_1 = require("../internal"); +const vue_js_1 = require("vue/dist/vue.js"); +const const_1 = require("./const"); +const shader_graph_1 = require("../../../../../shader-graph"); +exports.default = (0, vue_js_1.defineComponent)({ + name: 'BaseFloatWindow', + props: { + forge: { + type: block_forge_1.HTMLGraphForgeElement, + required: true, + default: null, + }, + config: { + type: Object, + required: true, + default: null, + }, + }, + emits: [ + 'hide', + 'show', + 'size-changed', + ], + setup(props, ctx) { + const isShow = (0, vue_js_1.ref)(false); + const floatWindowRef = (0, vue_js_1.ref)(); + const headerRef = (0, vue_js_1.ref)(); + function syncPosition(rect) { + if (rect.top !== undefined) { + floatWindowRef.value.style.top = rect.top; + } + else { + floatWindowRef.value.style.top = ''; + } + if (rect.left !== undefined) { + floatWindowRef.value.style.left = rect.left; + } + else { + floatWindowRef.value.style.left = ''; + } + if (rect.right !== undefined) { + floatWindowRef.value.style.right = rect.right; + } + else { + floatWindowRef.value.style.right = ''; + } + if (rect.bottom !== undefined) { + floatWindowRef.value.style.bottom = rect.bottom; + } + else { + floatWindowRef.value.style.bottom = ''; + } + } + function hide() { + isShow.value = false; + floatWindowRef.value?.setAttribute('hidden', ''); + ctx.emit('hide'); + } + function show(position) { + syncPosition(position || props.config.position); + if (isShow.value) + return; + isShow.value = true; + (0, vue_js_1.nextTick)(() => { + onResize(); + floatWindowRef.value?.removeAttribute('hidden'); + ctx.emit('show'); + }); + } + function syncConfig() { + if (!floatWindowRef.value || !props.forge) + return; + syncBase(); + syncEvents(); + } + function syncBase() { + const base = props.config.base; + const details = props.config.details; + floatWindowRef.value.style.height = details?.height || base.height; + floatWindowRef.value.style.width = details?.width || base.width; + (0, const_1.setMinSize)(parseFloat(base.minWidth), parseFloat(base.minHeight)); + (0, vue_js_1.nextTick)(() => { + onResize(); + }); + } + function syncEvents() { + let target; + if (props.config.events.target === internal_1.FloatWindowDragTarget.header) { + target = headerRef.value; + } + else { + target = floatWindowRef.value; + } + (0, header_1.useDragEvent)({ + config: props.config, + $window: floatWindowRef.value, + target: target, + onChange: () => { }, + }); + (0, resizer_1.useResizer)({ + config: props.config, + $window: floatWindowRef.value, + onChange: () => { + ctx.emit('size-changed'); + }, + }); + } + (0, vue_js_1.watch)(() => props.config.events, () => { + syncEvents(); + }); + (0, vue_js_1.watch)(() => props.config.base, () => { + syncBase(); + }); + function onResize() { + if (isShow.value) { + (0, resizer_1.adjustWindowPosition)(floatWindowRef.value, props.forge); + } + } + (0, vue_js_1.onMounted)(() => { + shader_graph_1.MessageMgr.Instance.register(shader_graph_1.MessageType.Resize, onResize); + (0, vue_js_1.nextTick)(() => { + syncConfig(); + }); + }); + (0, vue_js_1.onUnmounted)(() => { + shader_graph_1.MessageMgr.Instance.unregister(shader_graph_1.MessageType.Resize, onResize); + }); + return { + floatWindowRef, + headerRef, + hide, + show, + syncConfig, + onResize, + isShow, + }; + }, + template: ` + + `, +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGFuZWxzL3NoYWRlci1ncmFwaC9jb21wb25lbnRzL2Zsb2F0LXdpbmRvdy9iYXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQXdDO0FBQ3hDLHVDQUE2RDtBQUM3RCw0REFBbUU7QUFDbkUsMENBQXVFO0FBRXZFLDRDQUFnRztBQUNoRyxtQ0FBcUM7QUFDckMsOERBQXNFO0FBRXRFLGtCQUFlLElBQUEsd0JBQWUsRUFBQztJQUMzQixJQUFJLEVBQUUsaUJBQWlCO0lBRXZCLEtBQUssRUFBRTtRQUNILEtBQUssRUFBRTtZQUNILElBQUksRUFBRSxtQ0FBcUI7WUFDM0IsUUFBUSxFQUFFLElBQUk7WUFDZCxPQUFPLEVBQUUsSUFBSTtTQUNoQjtRQUNELE1BQU0sRUFBRTtZQUNKLElBQUksRUFBRSxNQUFpQztZQUN2QyxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxJQUFJO1NBQ2hCO0tBQ0o7SUFFRCxLQUFLLEVBQUU7UUFDSCxNQUFNO1FBQ04sTUFBTTtRQUNOLGNBQWM7S0FDakI7SUFFRCxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUc7UUFDWixNQUFNLE1BQU0sR0FBRyxJQUFBLFlBQUcsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixNQUFNLGNBQWMsR0FBRyxJQUFBLFlBQUcsR0FBRSxDQUFDO1FBQzdCLE1BQU0sU0FBUyxHQUFHLElBQUEsWUFBRyxHQUFFLENBQUM7UUFFeEIsU0FBUyxZQUFZLENBQUMsSUFBdUU7WUFDekYsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRTtnQkFDeEIsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDN0M7aUJBQU07Z0JBQ0gsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFH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RUFBQyxHQUFHLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUEsb0JBQVcsRUFBQyxHQUFHLEVBQUU7WUFDYix5QkFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsMEJBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0gsY0FBYztZQUNkLFNBQVM7WUFFVCxJQUFJO1lBQ0osSUFBSTtZQUNKLFVBQVU7WUFDVixRQUFRO1lBRVIsTUFBTTtTQUNULENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7U0FZTDtDQUNSLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZURyYWdFdmVudCB9IGZyb20gJy4vaGVhZGVyJztcbmltcG9ydCB7IGFkanVzdFdpbmRvd1Bvc2l0aW9uLCB1c2VSZXNpemVyIH0gZnJvbSAnLi9yZXNpemVyJztcbmltcG9ydCB7IEhUTUxHcmFwaEZvcmdlRWxlbWVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2Jsb2NrLWZvcmdlJztcbmltcG9ydCB7IEZsb2F0V2luZG93Q29uZmlnLCBGbG9hdFdpbmRvd0RyYWdUYXJnZXQgfSBmcm9tICcuLi9pbnRlcm5hbCc7XG5cbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgbmV4dFRpY2ssIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIHJlZiwgd2F0Y2ggfSBmcm9tICd2dWUvZGlzdC92dWUuanMnO1xuaW1wb3J0IHsgc2V0TWluU2l6ZSB9IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IHsgTWVzc2FnZU1nciwgTWVzc2FnZVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFkZXItZ3JhcGgnO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb21wb25lbnQoe1xuICAgIG5hbWU6ICdCYXNlRmxvYXRXaW5kb3cnLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZm9yZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEhUTUxHcmFwaEZvcmdlRWxlbWVudCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QgYXMgKCkgPT4gRmxvYXRXaW5kb3dDb25maWcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGVtaXRzOiBbXG4gICAgICAgICdoaWRlJyxcbiAgICAgICAgJ3Nob3cnLFxuICAgICAgICAnc2l6ZS1jaGFuZ2VkJyxcbiAgICBdLFxuXG4gICAgc2V0dXAocHJvcHMsIGN0eCkge1xuICAgICAgICBjb25zdCBpc1Nob3cgPSByZWYoZmFsc2UpO1xuICAgICAgICBjb25zdCBmbG9hdFdpbmRvd1JlZiA9IHJlZigpO1xuICAgICAgICBjb25zdCBoZWFkZXJSZWYgPSByZWYoKTtcblxuICAgICAgICBmdW5jdGlvbiBzeW5jUG9zaXRpb24ocmVjdDogeyB0b3A/OiBzdHJpbmc7IHJpZ2h0Pzogc3RyaW5nOyBsZWZ0Pzogc3RyaW5nOyBib3R0b20/OiBzdHJpbmc7IH0pIHtcbiAgICAgICAgICAgIGlmIChyZWN0LnRvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmxvYXRXaW5kb3dSZWYudmFsdWUuc3R5bGUudG9wID0gcmVjdC50b3A7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZsb2F0V2luZG93UmVmLnZhbHVlLnN0eWxlLnRvcCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlY3QubGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmxvYXRXaW5kb3dSZWYudmFsdWUuc3R5bGUubGVmdCA9IHJlY3QubGVmdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmxvYXRXaW5kb3dSZWYudmFsdWUuc3R5bGUubGVmdCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlY3QucmlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZsb2F0V2luZG93UmVmLnZhbHVlLnN0eWxlLnJpZ2h0ID0gcmVjdC5yaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmxvYXRXaW5kb3dSZWYudmFsdWUuc3R5bGUucmlnaHQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWN0LmJvdHRvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmxvYXRXaW5kb3dSZWYudmFsdWUuc3R5bGUuYm90dG9tID0gcmVjdC5ib3R0b207XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZsb2F0V2luZG93UmVmLnZhbHVlLnN0eWxlLmJvdHRvbSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgICAgICAgIGlzU2hvdy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZmxvYXRXaW5kb3dSZWYudmFsdWU/LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuICAgICAgICAgICAgY3R4LmVtaXQoJ2hpZGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNob3cocG9zaXRpb24/OiB7IHRvcD86IHN0cmluZzsgcmlnaHQ/OiBzdHJpbmc7IGxlZnQ/OiBzdHJpbmc7IGJvdHRvbT86IHN0cmluZzsgfSkge1xuICAgICAgICAgICAgc3luY1Bvc2l0aW9uKHBvc2l0aW9uIHx8IHByb3BzLmNvbmZpZy5wb3NpdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChpc1Nob3cudmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgIGlzU2hvdy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBvblJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgIGZsb2F0V2luZG93UmVmLnZhbHVlPy5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIGN0eC5lbWl0KCdzaG93Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHN5bmNDb25maWcoKSB7XG4gICAgICAgICAgICBpZiAoIWZsb2F0V2luZG93UmVmLnZhbHVlIHx8ICFwcm9wcy5mb3JnZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBzeW5jQmFzZSgpO1xuICAgICAgICAgICAgc3luY0V2ZW50cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc3luY0Jhc2UoKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlID0gcHJvcHMuY29uZmlnLmJhc2U7XG4gICAgICAgICAgICBjb25zdCBkZXRhaWxzID0gcHJvcHMuY29uZmlnLmRldGFpbHM7XG4gICAgICAgICAgICBmbG9hdFdpbmRvd1JlZi52YWx1ZS5zdHlsZS5oZWlnaHQgPSBkZXRhaWxzPy5oZWlnaHQgfHwgYmFzZS5oZWlnaHQ7XG4gICAgICAgICAgICBmbG9hdFdpbmRvd1JlZi52YWx1ZS5zdHlsZS53aWR0aCA9IGRldGFpbHM/LndpZHRoIHx8IGJhc2Uud2lkdGg7XG5cbiAgICAgICAgICAgIHNldE1pblNpemUocGFyc2VGbG9hdChiYXNlLm1pbldpZHRoKSwgcGFyc2VGbG9hdChiYXNlLm1pbkhlaWdodCkpO1xuXG4gICAgICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgb25SZXNpemUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc3luY0V2ZW50cygpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQ6IEhUTUxEaXZFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHByb3BzLmNvbmZpZy5ldmVudHMudGFyZ2V0ID09PSBGbG9hdFdpbmRvd0RyYWdUYXJnZXQuaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gaGVhZGVyUmVmLnZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBmbG9hdFdpbmRvd1JlZi52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVzZURyYWdFdmVudCh7XG4gICAgICAgICAgICAgICAgY29uZmlnOiBwcm9wcy5jb25maWcsXG4gICAgICAgICAgICAgICAgJHdpbmRvdzogZmxvYXRXaW5kb3dSZWYudmFsdWUsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6ICgpID0+IHt9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHVzZVJlc2l6ZXIoe1xuICAgICAgICAgICAgICAgIGNvbmZpZzogcHJvcHMuY29uZmlnLFxuICAgICAgICAgICAgICAgICR3aW5kb3c6IGZsb2F0V2luZG93UmVmLnZhbHVlLFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5lbWl0KCdzaXplLWNoYW5nZWQnKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB3YXRjaCgoKSA9PiBwcm9wcy5jb25maWcuZXZlbnRzLCAoKSA9PiB7XG4gICAgICAgICAgICBzeW5jRXZlbnRzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB3YXRjaCgoKSA9PiBwcm9wcy5jb25maWcuYmFzZSwgKCkgPT4ge1xuICAgICAgICAgICAgc3luY0Jhc2UoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgICAgICAgICBpZiAoaXNTaG93LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRqdXN0V2luZG93UG9zaXRpb24oZmxvYXRXaW5kb3dSZWYudmFsdWUsIHByb3BzLmZvcmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnJlZ2lzdGVyKE1lc3NhZ2VUeXBlLlJlc2l6ZSwgb25SZXNpemUpO1xuXG4gICAgICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3luY0NvbmZpZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9uVW5tb3VudGVkKCgpID0+IHtcbiAgICAgICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UudW5yZWdpc3RlcihNZXNzYWdlVHlwZS5SZXNpemUsIG9uUmVzaXplKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZsb2F0V2luZG93UmVmLFxuICAgICAgICAgICAgaGVhZGVyUmVmLFxuXG4gICAgICAgICAgICBoaWRlLFxuICAgICAgICAgICAgc2hvdyxcbiAgICAgICAgICAgIHN5bmNDb25maWcsXG4gICAgICAgICAgICBvblJlc2l6ZSxcblxuICAgICAgICAgICAgaXNTaG93LFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgcmVmPVwiZmxvYXRXaW5kb3dSZWZcIiBjbGFzcz1cImZsb2F0LXdpbmRvd1wiIGhpZGRlbj5cbiAgICAgIDxkaXYgcmVmPVwiaGVhZGVyUmVmXCIgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgPHNsb3QgbmFtZT1cImhlYWRlclwiPjwvc2xvdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgPHNsb3QgbmFtZT1cInNlY3Rpb25cIj48L3Nsb3Q+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cbiAgICAgICAgPHNsb3QgbmFtZT1cImZvb3RlclwiPjwvc2xvdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICAgICBgLFxufSk7XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/resizer.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/resizer.js new file mode 100644 index 0000000..d893001 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/base/resizer.js @@ -0,0 +1,211 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.adjustWindowPosition = exports.useResizer = void 0; +const const_1 = require("./const"); +const RESIZER_TAG = [ + 'top', + 'left', + 'right', + 'bottom', + 'top-left', + 'top-right', + 'bottom-left', + 'bottom-right', +]; +const hasResizerEvent = false; +/** + * 添加缩放器 + * @param options + */ +function useResizer(options) { + const { $window, config } = options; + if (!config.events.resizer) { + RESIZER_TAG.forEach((tag) => { + const element = $window.querySelector(tag); + if (element) { + element.remove(); + } + }); + return; + } + // 检查是否注册过,如果注册过就跳过 + for (const tag of RESIZER_TAG) { + if ($window.querySelector(tag)) { + return; + } + } + const minSize = (0, const_1.getMinSize)(); + RESIZER_TAG.forEach((tag) => { + const element = document.createElement('div'); + element.setAttribute('id', tag); + element.setAttribute('class', tag); + element.addEventListener('mousedown', onDragStartFrameEvent, false); + $window.appendChild(element); + }); + const parentElement = $window.parentElement; + let aspectRatio = 1; + function onDragStartFrameEvent(event) { + const windowRect = { + left: $window.offsetLeft, + top: $window.offsetTop, + width: $window.offsetWidth, + height: $window.offsetHeight, + }; + // 鼠标点击时候的坐标 + const mouseDown = { + x: event.clientX, + y: event.clientY, + }; + const dragTarget = event.target; + aspectRatio = windowRect.width / windowRect.height; + let lastLeft = -1; + let lastTop = -1; + let lastWidth = -1; + let lastHeight = -1; + let newLeft = -1; + let newWidth = -1; + let newTop = -1; + let newHeight = -1; + const minX = 0; + const minY = 0; + const maxX = parentElement.offsetWidth + parentElement.offsetLeft - windowRect.width; + const maxY = parentElement.offsetHeight - parentElement.offsetTop - windowRect.height; + function moveTop(deltaY) { + newTop = windowRect.top - deltaY; + newHeight = windowRect.height + deltaY; + newHeight = Math.max(newHeight, minSize.height); + newHeight = Math.min(newHeight, windowRect.top + windowRect.height); + newTop = Math.min(newTop, windowRect.top + windowRect.height - minSize.height); + newTop = Math.max(newTop, minX); + if (newHeight <= minSize.width) { + newTop = lastTop; + newHeight = lastHeight; + } + lastTop = newTop; + lastHeight = newHeight; + } + const parentElementOffsetHeight = parentElement.offsetHeight; + function moveBottom(deltaY) { + newHeight = windowRect.height - deltaY; + newHeight = Math.max(minSize.height, newHeight); + const offsetTop = parentElement.offsetTop; + newHeight = Math.min(newHeight, Math.abs(parentElementOffsetHeight - offsetTop - windowRect.top)); + } + function moveLeft(deltaX) { + newLeft = windowRect.left - deltaX; + newWidth = windowRect.width + deltaX; + newWidth = Math.max(newWidth, minSize.width); + newWidth = Math.min(newWidth, windowRect.left + windowRect.width); + newLeft = Math.min(newLeft, windowRect.left + windowRect.width - minSize.width); + newLeft = Math.max(newLeft, 0); + if (newWidth <= minSize.width) { + newLeft = lastLeft; + newWidth = lastWidth; + } + lastLeft = newLeft; + lastWidth = newWidth; + } + function moveRight(deltaX) { + newWidth = windowRect.width - deltaX; + newWidth = Math.max(minSize.width, newWidth); + newWidth = Math.min(newWidth, Math.abs(windowRect.left - (parentElement.offsetLeft + parentElement.offsetWidth))); + } + function drag(event) { + const deltaX = (mouseDown.x - event.clientX); + const deltaY = (mouseDown.y - event.clientY); + switch (dragTarget.id) { + case 'top-left': + moveTop(deltaY); + moveLeft(deltaX); + break; + case 'top-right': + moveTop(deltaY); + moveRight(deltaX); + break; + case 'bottom-left': + moveBottom(deltaY); + moveLeft(deltaX); + break; + case 'bottom-right': + moveBottom(deltaY); + moveRight(deltaX); + break; + case 'top': + moveTop(deltaY); + break; + case 'bottom': + moveBottom(deltaY); + break; + case 'left': + moveLeft(deltaX); + break; + case 'right': + moveRight(deltaX); + break; + } + if (config.events.enableAspectRatio) { + if (newHeight !== -1) { + newWidth = newHeight * aspectRatio; + } + if (newWidth !== -1) { + newHeight = newWidth; //newWidth / aspectRatio; + } + } + if (newWidth !== -1) { + const minWidth = parseFloat(config.base.minWidth); + newWidth = newWidth <= minWidth ? minWidth : newWidth; + } + if (newHeight !== -1) { + const minHeight = parseFloat(config.base.minHeight); + newHeight = newHeight <= minHeight ? minHeight : newHeight; + } + if (newTop !== -1) + $window.style.top = `${newTop}px`; + if (newHeight !== -1) + $window.style.height = `${newHeight}px`; + if (newLeft !== -1) + $window.style.left = `${newLeft}px`; + if (newWidth !== -1) + $window.style.width = `${newWidth}px`; + if (newTop !== -1 || newHeight !== -1 || newLeft !== -1 || newWidth !== -1) { + options.onChange && options.onChange($window.style); + } + } + function dragEnd() { + document.removeEventListener('mousemove', drag, true); + document.removeEventListener('mouseup', dragEnd, true); + } + document.addEventListener('mousemove', drag, true); + document.addEventListener('mouseup', dragEnd, true); + } +} +exports.useResizer = useResizer; +/** + * 窗口 resize 时,重新矫正坐标,保证在画板内 + */ +function adjustWindowPosition($window, limitedAreaElement) { + const limitedAreaSection = limitedAreaElement.shadowRoot.querySelector('section'); + const limitedAreaSectionRect = { + left: limitedAreaSection.clientLeft, + right: limitedAreaSection.clientLeft + limitedAreaSection.clientWidth, + top: limitedAreaSection.clientTop, + bottom: limitedAreaSection.clientTop + limitedAreaSection.clientHeight, + }; + const left = parseFloat($window.style.left) || undefined; + if (left !== undefined && (left < limitedAreaSectionRect.left || + left > (limitedAreaSectionRect.right - $window.offsetWidth))) { + const newLeft = Math.min(Math.max(left, limitedAreaSectionRect.left), limitedAreaSectionRect.right - $window.offsetWidth); + $window.style.left = newLeft + 'px'; + } + const top = parseFloat($window.style.top) || undefined; + if (top !== undefined && (top < limitedAreaSectionRect.top || + top > limitedAreaSectionRect.bottom - $window.offsetHeight)) { + // 校正位置,确保窗口在父节点区域内 + let newTop = Math.min(Math.max(top, limitedAreaSectionRect.top), limitedAreaSectionRect.bottom - $window.offsetHeight); + const minTop = limitedAreaElement.shadowRoot.querySelector('header').offsetHeight; + newTop = Math.max(minTop, newTop); + $window.style.top = newTop + 'px'; + } +} +exports.adjustWindowPosition = adjustWindowPosition; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wYW5lbHMvc2hhZGVyLWdyYXBoL2NvbXBvbmVudHMvZmxvYXQtd2luZG93L2Jhc2UvcmVzaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBcUM7QUFHckMsTUFBTSxXQUFXLEdBQUc7SUFDaEIsS0FBSztJQUNMLE1BQU07SUFDTixPQUFPO0lBQ1AsUUFBUTtJQUNSLFVBQVU7SUFDVixXQUFXO0lBQ1gsYUFBYTtJQUNiLGNBQWM7Q0FDakIsQ0FBQztBQVdGLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQztBQUU5Qjs7O0dBR0c7QUFDSCxTQUFnQixVQUFVLENBQUMsT0FBd0I7SUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ3hCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLElBQUksT0FBTyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNwQjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTztLQUNWO0lBRUQsbUJBQW1CO0lBQ25CLEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxFQUFFO1FBQzNCLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QixPQUFPO1NBQ1Y7S0FDSjtJQUVELE1BQU0sT0FBTyxHQUFHLElBQUEsa0JBQVUsR0FBRSxDQUFDO0lBQzdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtRQUNoQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFD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QUNuQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEgsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsVUFBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUUsQ0FBQyxZQUFZLENBQUM7UUFDcEYsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDckM7QUFDTCxDQUFDO0FBNUJELG9EQTRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldE1pblNpemUgfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7IEZsb2F0V2luZG93Q29uZmlnIH0gZnJvbSAnLi4vaW50ZXJuYWwnO1xuXG5jb25zdCBSRVNJWkVSX1RBRyA9IFtcbiAgICAndG9wJyxcbiAgICAnbGVmdCcsXG4gICAgJ3JpZ2h0JyxcbiAgICAnYm90dG9tJyxcbiAgICAndG9wLWxlZnQnLFxuICAgICd0b3AtcmlnaHQnLFxuICAgICdib3R0b20tbGVmdCcsXG4gICAgJ2JvdHRvbS1yaWdodCcsXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSZXNpemVyT3B0aW9ucyB7XG4gICAgLy8g5b2T5YmN56qX5Y+jXG4gICAgJHdpbmRvdzogSFRNTERpdkVsZW1lbnQ7XG4gICAgLy8g6YWN572uXG4gICAgY29uZmlnOiBGbG9hdFdpbmRvd0NvbmZpZztcbiAgICAvLyDmlbDmja7lj5jljJbmmK/op6blj5HnmoTkuovku7ZcbiAgICBvbkNoYW5nZT86IChzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbikgPT4gdm9pZDtcbn1cblxuY29uc3QgaGFzUmVzaXplckV2ZW50ID0gZmFsc2U7XG5cbi8qKlxuICog5re75Yqg57yp5pS+5ZmoXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVzaXplcihvcHRpb25zOiBJUmVzaXplck9wdGlvbnMpIHtcbiAgICBjb25zdCB7ICR3aW5kb3csIGNvbmZpZyB9ID0gb3B0aW9ucztcbiAgICBpZiAoIWNvbmZpZy5ldmVudHMucmVzaXplcikge1xuICAgICAgICBSRVNJWkVSX1RBRy5mb3JFYWNoKCh0YWc6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9ICR3aW5kb3cucXVlcnlTZWxlY3Rvcih0YWcpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOajgOafpeaYr+WQpuazqOWGjOi/h++8jOWmguaenOazqOWGjOi/h+Wwsei3s+i/h1xuICAgIGZvciAoY29uc3QgdGFnIG9mIFJFU0laRVJfVEFHKSB7XG4gICAgICAgIGlmICgkd2luZG93LnF1ZXJ5U2VsZWN0b3IodGFnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWluU2l6ZSA9IGdldE1pblNpemUoKTtcbiAgICBSRVNJWkVSX1RBRy5mb3JFYWNoKCh0YWc6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIHRhZyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIHRhZyk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25EcmFnU3RhcnRGcmFtZUV2ZW50LCBmYWxzZSk7XG4gICAgICAgICR3aW5kb3cuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gJHdpbmRvdy5wYXJlbnRFbGVtZW50ITtcblxuICAgIGxldCBhc3BlY3RSYXRpbyA9IDE7XG4gICAgZnVuY3Rpb24gb25EcmFnU3RhcnRGcmFtZUV2ZW50KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cbiAgICAgICAgY29uc3Qgd2luZG93UmVjdCA9IHtcbiAgICAgICAgICAgIGxlZnQ6ICR3aW5kb3cub2Zmc2V0TGVmdCxcbiAgICAgICAgICAgIHRvcDogJHdpbmRvdy5vZmZzZXRUb3AsXG4gICAgICAgICAgICB3aWR0aDogJHdpbmRvdy5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogJHdpbmRvdy5vZmZzZXRIZWlnaHQsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8g6byg5qCH54K55Ye75pe25YCZ55qE5Z2Q5qCHXG4gICAgICAgIGNvbnN0IG1vdXNlRG93biA9IHtcbiAgICAgICAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICB5OiBldmVudC5jbGllbnRZLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRyYWdUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgYXNwZWN0UmF0aW8gPSB3aW5kb3dSZWN0LndpZHRoIC8gd2luZG93UmVjdC5oZWlnaHQ7XG5cbiAgICAgICAgbGV0IGxhc3RMZWZ0ID0gLTE7XG4gICAgICAgIGxldCBsYXN0VG9wID0gLTE7XG4gICAgICAgIGxldCBsYXN0V2lkdGggPSAtMTtcbiAgICAgICAgbGV0IGxhc3RIZWlnaHQgPSAtMTtcbiAgICAgICAgbGV0IG5ld0xlZnQgPSAtMTtcbiAgICAgICAgbGV0IG5ld1dpZHRoID0gLTE7XG4gICAgICAgIGxldCBuZXdUb3AgPSAtMTtcbiAgICAgICAgbGV0IG5ld0hlaWdodCA9IC0xO1xuXG4gICAgICAgIGNvbnN0IG1pblggPSAwO1xuICAgICAgICBjb25zdCBtaW5ZID0gMDtcbiAgICAgICAgY29uc3QgbWF4WCA9IHBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGggKyBwYXJlbnRFbGVtZW50Lm9mZnNldExlZnQgLSB3aW5kb3dSZWN0LndpZHRoO1xuICAgICAgICBjb25zdCBtYXhZID0gcGFyZW50RWxlbWVudC5vZmZzZXRIZWlnaHQgLSBwYXJlbnRFbGVtZW50Lm9mZnNldFRvcCAtIHdpbmRvd1JlY3QuaGVpZ2h0O1xuXG4gICAgICAgIGZ1bmN0aW9uIG1vdmVUb3AoZGVsdGFZOiBudW1iZXIpIHtcbiAgICAgICAgICAgIG5ld1RvcCA9IHdpbmRvd1JlY3QudG9wIC0gZGVsdGFZO1xuICAgICAgICAgICAgbmV3SGVpZ2h0ID0gd2luZG93UmVjdC5oZWlnaHQgKyBkZWx0YVk7XG5cbiAgICAgICAgICAgIG5ld0hlaWdodCA9IE1hdGgubWF4KG5ld0hlaWdodCwgbWluU2l6ZS5oZWlnaHQpO1xuICAgICAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5taW4obmV3SGVpZ2h0LCB3aW5kb3dSZWN0LnRvcCArIHdpbmRvd1JlY3QuaGVpZ2h0KTtcblxuICAgICAgICAgICAgbmV3VG9wID0gTWF0aC5taW4obmV3VG9wLCB3aW5kb3dSZWN0LnRvcCArIHdpbmRvd1JlY3QuaGVpZ2h0IC0gbWluU2l6ZS5oZWlnaHQpO1xuICAgICAgICAgICAgbmV3VG9wID0gTWF0aC5tYXgobmV3VG9wLCBtaW5YKTtcblxuICAgICAgICAgICAgaWYgKG5ld0hlaWdodCA8PSBtaW5TaXplLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgbmV3VG9wID0gbGFzdFRvcDtcbiAgICAgICAgICAgICAgICBuZXdIZWlnaHQgPSBsYXN0SGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFRvcCA9IG5ld1RvcDtcbiAgICAgICAgICAgIGxhc3RIZWlnaHQgPSBuZXdIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50T2Zmc2V0SGVpZ2h0ID0gcGFyZW50RWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgZnVuY3Rpb24gbW92ZUJvdHRvbShkZWx0YVk6IG51bWJlcikge1xuICAgICAgICAgICAgbmV3SGVpZ2h0ID0gd2luZG93UmVjdC5oZWlnaHQgLSBkZWx0YVk7XG4gICAgICAgICAgICBuZXdIZWlnaHQgPSBNYXRoLm1heChtaW5TaXplLmhlaWdodCwgbmV3SGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IHBhcmVudEVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5taW4obmV3SGVpZ2h0LCBNYXRoLmFicyhwYXJlbnRFbGVtZW50T2Zmc2V0SGVpZ2h0IC0gb2Zmc2V0VG9wIC0gd2luZG93UmVjdC50b3ApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG1vdmVMZWZ0KGRlbHRhWDogbnVtYmVyKSB7XG4gICAgICAgICAgICBuZXdMZWZ0ID0gd2luZG93UmVjdC5sZWZ0IC0gZGVsdGFYO1xuICAgICAgICAgICAgbmV3V2lkdGggPSB3aW5kb3dSZWN0LndpZHRoICsgZGVsdGFYO1xuXG4gICAgICAgICAgICBuZXdXaWR0aCA9IE1hdGgubWF4KG5ld1dpZHRoLCBtaW5TaXplLndpZHRoKTtcbiAgICAgICAgICAgIG5ld1dpZHRoID0gTWF0aC5taW4obmV3V2lkdGgsIHdpbmRvd1JlY3QubGVmdCArIHdpbmRvd1JlY3Qud2lkdGgpO1xuXG4gICAgICAgICAgICBuZXdMZWZ0ID0gTWF0aC5taW4obmV3TGVmdCwgd2luZG93UmVjdC5sZWZ0ICsgd2luZG93UmVjdC53aWR0aCAtIG1pblNpemUud2lkdGgpO1xuICAgICAgICAgICAgbmV3TGVmdCA9IE1hdGgubWF4KG5ld0xlZnQsIDApO1xuICAgICAgICAgICAgaWYgKG5ld1dpZHRoIDw9IG1pblNpemUud2lkdGgpIHtcbiAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gbGFzdExlZnQ7XG4gICAgICAgICAgICAgICAgbmV3V2lkdGggPSBsYXN0V2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0TGVmdCA9IG5ld0xlZnQ7XG4gICAgICAgICAgICBsYXN0V2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG1vdmVSaWdodChkZWx0YVg6IG51bWJlcikge1xuICAgICAgICAgICAgbmV3V2lkdGggPSB3aW5kb3dSZWN0LndpZHRoIC0gZGVsdGFYO1xuICAgICAgICAgICAgbmV3V2lkdGggPSBNYXRoLm1heChtaW5TaXplLndpZHRoLCBuZXdXaWR0aCk7XG4gICAgICAgICAgICBuZXdXaWR0aCA9IE1hdGgubWluKG5ld1dpZHRoLCBNYXRoLmFicyh3aW5kb3dSZWN0LmxlZnQgLSAocGFyZW50RWxlbWVudC5vZmZzZXRMZWZ0ICsgcGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRyYWcoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWCA9IChtb3VzZURvd24ueCAtIGV2ZW50LmNsaWVudFgpO1xuICAgICAgICAgICAgY29uc3QgZGVsdGFZID0gKG1vdXNlRG93bi55IC0gZXZlbnQuY2xpZW50WSk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoZHJhZ1RhcmdldC5pZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgbW92ZVRvcChkZWx0YVkpO1xuICAgICAgICAgICAgICAgICAgICBtb3ZlTGVmdChkZWx0YVgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICAgICAgICAgICAgICBtb3ZlVG9wKGRlbHRhWSk7XG4gICAgICAgICAgICAgICAgICAgIG1vdmVSaWdodChkZWx0YVgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgICAgICAgICAgICAgIG1vdmVCb3R0b20oZGVsdGFZKTtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUxlZnQoZGVsdGFYKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgbW92ZUJvdHRvbShkZWx0YVkpO1xuICAgICAgICAgICAgICAgICAgICBtb3ZlUmlnaHQoZGVsdGFYKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgICAgICAgICAgbW92ZVRvcChkZWx0YVkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgICAgICBtb3ZlQm90dG9tKGRlbHRhWSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICAgICAgICBtb3ZlTGVmdChkZWx0YVgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICAgICAgICAgIG1vdmVSaWdodChkZWx0YVgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpZy5ldmVudHMuZW5hYmxlQXNwZWN0UmF0aW8pIHtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdIZWlnaHQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1dpZHRoID0gbmV3SGVpZ2h0ICogYXNwZWN0UmF0aW87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXdXaWR0aCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3SGVpZ2h0ID0gbmV3V2lkdGg7IC8vbmV3V2lkdGggLyBhc3BlY3RSYXRpbztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdXaWR0aCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5XaWR0aCA9IHBhcnNlRmxvYXQoY29uZmlnLmJhc2UubWluV2lkdGgpO1xuICAgICAgICAgICAgICAgIG5ld1dpZHRoID0gbmV3V2lkdGggPD0gbWluV2lkdGggPyBtaW5XaWR0aCA6IG5ld1dpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld0hlaWdodCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5IZWlnaHQgPSBwYXJzZUZsb2F0KGNvbmZpZy5iYXNlLm1pbkhlaWdodCk7XG4gICAgICAgICAgICAgICAgbmV3SGVpZ2h0ID0gbmV3SGVpZ2h0IDw9IG1pbkhlaWdodCA/IG1pbkhlaWdodCA6IG5ld0hlaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld1RvcCAhPT0gLTEpICR3aW5kb3cuc3R5bGUudG9wID0gYCR7bmV3VG9wfXB4YDtcbiAgICAgICAgICAgIGlmIChuZXdIZWlnaHQgIT09IC0xKSAkd2luZG93LnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XG4gICAgICAgICAgICBpZiAobmV3TGVmdCAhPT0gLTEpICR3aW5kb3cuc3R5bGUubGVmdCA9IGAke25ld0xlZnR9cHhgO1xuICAgICAgICAgICAgaWYgKG5ld1dpZHRoICE9PSAtMSkgJHdpbmRvdy5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcblxuICAgICAgICAgICAgaWYgKG5ld1RvcCAhPT0gLTEgfHwgbmV3SGVpZ2h0ICE9PSAtMSB8fCBuZXdMZWZ0ICE9PSAtMSB8fCBuZXdXaWR0aCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ2hhbmdlICYmIG9wdGlvbnMub25DaGFuZ2UoJHdpbmRvdy5zdHlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkcmFnRW5kKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZHJhZywgdHJ1ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZHJhZ0VuZCwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBkcmFnLCB0cnVlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGRyYWdFbmQsIHRydWUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiDnqpflj6MgcmVzaXplIOaXtu+8jOmHjeaWsOefq+ato+WdkOagh++8jOS/neivgeWcqOeUu+adv+WGhVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0V2luZG93UG9zaXRpb24oJHdpbmRvdzogSFRNTEVsZW1lbnQsIGxpbWl0ZWRBcmVhRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBsaW1pdGVkQXJlYVNlY3Rpb24gPSBsaW1pdGVkQXJlYUVsZW1lbnQuc2hhZG93Um9vdCEucXVlcnlTZWxlY3Rvcignc2VjdGlvbicpITtcbiAgICBjb25zdCBsaW1pdGVkQXJlYVNlY3Rpb25SZWN0ID0ge1xuICAgICAgICBsZWZ0OiBsaW1pdGVkQXJlYVNlY3Rpb24uY2xpZW50TGVmdCxcbiAgICAgICAgcmlnaHQ6IGxpbWl0ZWRBcmVhU2VjdGlvbi5jbGllbnRMZWZ0ICsgbGltaXRlZEFyZWFTZWN0aW9uLmNsaWVudFdpZHRoLFxuICAgICAgICB0b3A6IGxpbWl0ZWRBcmVhU2VjdGlvbi5jbGllbnRUb3AsXG4gICAgICAgIGJvdHRvbTogbGltaXRlZEFyZWFTZWN0aW9uLmNsaWVudFRvcCArIGxpbWl0ZWRBcmVhU2VjdGlvbi5jbGllbnRIZWlnaHQsXG4gICAgfTtcblxuICAgIGNvbnN0IGxlZnQgPSBwYXJzZUZsb2F0KCR3aW5kb3cuc3R5bGUubGVmdCkgfHwgdW5kZWZpbmVkO1xuICAgIGlmIChsZWZ0ICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICBsZWZ0IDwgbGltaXRlZEFyZWFTZWN0aW9uUmVjdC5sZWZ0IHx8XG4gICAgICAgIGxlZnQgPiAobGltaXRlZEFyZWFTZWN0aW9uUmVjdC5yaWdodCAtICR3aW5kb3cub2Zmc2V0V2lkdGgpKSkge1xuICAgICAgICBjb25zdCBuZXdMZWZ0ID0gTWF0aC5taW4oTWF0aC5tYXgobGVmdCwgbGltaXRlZEFyZWFTZWN0aW9uUmVjdC5sZWZ0KSwgbGltaXRlZEFyZWFTZWN0aW9uUmVjdC5yaWdodCAtICR3aW5kb3cub2Zmc2V0V2lkdGgpO1xuICAgICAgICAkd2luZG93LnN0eWxlLmxlZnQgPSBuZXdMZWZ0ICsgJ3B4JztcbiAgICB9XG5cbiAgICBjb25zdCB0b3AgPSBwYXJzZUZsb2F0KCR3aW5kb3cuc3R5bGUudG9wKSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKHRvcCAhPT0gdW5kZWZpbmVkICYmIChcbiAgICAgICAgdG9wIDwgbGltaXRlZEFyZWFTZWN0aW9uUmVjdC50b3AgfHxcbiAgICAgICAgdG9wID4gbGltaXRlZEFyZWFTZWN0aW9uUmVjdC5ib3R0b20gLSAkd2luZG93Lm9mZnNldEhlaWdodFxuICAgICkpIHtcbiAgICAgICAgLy8g5qCh5q2j5L2N572u77yM56Gu5L+d56qX5Y+j5Zyo54i26IqC54K55Yy65Z+f5YaFXG4gICAgICAgIGxldCBuZXdUb3AgPSBNYXRoLm1pbiggTWF0aC5tYXgodG9wLCBsaW1pdGVkQXJlYVNlY3Rpb25SZWN0LnRvcCksIGxpbWl0ZWRBcmVhU2VjdGlvblJlY3QuYm90dG9tIC0gJHdpbmRvdy5vZmZzZXRIZWlnaHQpO1xuICAgICAgICBjb25zdCBtaW5Ub3AgPSBsaW1pdGVkQXJlYUVsZW1lbnQuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignaGVhZGVyJykhLm9mZnNldEhlaWdodDtcbiAgICAgICAgbmV3VG9wID0gTWF0aC5tYXgobWluVG9wLCBuZXdUb3ApO1xuICAgICAgICAkd2luZG93LnN0eWxlLnRvcCA9IG5ld1RvcCArICdweCc7XG4gICAgfVxufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/common.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/common.js new file mode 100644 index 0000000..ce416ef --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/common.js @@ -0,0 +1,109 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.commonTemplate = exports.commonLogic = exports.commonProps = exports.commonEmits = void 0; +const vue_js_1 = require("vue/dist/vue.js"); +const block_forge_1 = require("../../../../block-forge"); +exports.commonEmits = [ + 'hide', +]; +exports.commonProps = { + forge: { + type: block_forge_1.HTMLGraphForgeElement, + required: true, + default: null, + }, + config: { + type: Object, + required: true, + default: null, + }, +}; +const commonLogic = (props, ctx) => { + const floatWindowRef = (0, vue_js_1.ref)(); + const headerTitle = (0, vue_js_1.ref)(''); + const hide = () => { + floatWindowRef.value?.hide(); + }; + const isShow = () => { + return floatWindowRef.value?.isShow; + }; + const show = (position) => { + floatWindowRef.value?.show(position); + }; + const getRect = () => { + const floatWindow = floatWindowRef.value; + return { + x: parseInt(floatWindow.$el.style.left) || 0, + y: parseInt(floatWindow.$el.style.top) || 0, + width: parseInt(floatWindow.$el.style.width), + height: parseInt(floatWindow.$el.style.height), + }; + }; + const onClickHide = () => { + hide(); + }; + function syncBase() { + const base = props.config.base; + headerTitle.value = base.title; + } + (0, vue_js_1.watch)(() => props.config.base, () => { + syncBase(); + }); + (0, vue_js_1.onMounted)(() => { + (0, vue_js_1.nextTick)(() => { + syncBase(); + }); + }); + function onSizeChanged() { + } + function onShow() { + } + function onHide() { + ctx.emit('hide', props.config.key); + } + return { + floatWindowRef, + headerTitle, + isShow, + show, + hide, + onClickHide, + getRect, + onShow, + onHide, + onSizeChanged, + }; +}; +exports.commonLogic = commonLogic; +const commonTemplate = (config) => { + return ` + + + + + + + + `; +}; +exports.commonTemplate = commonTemplate; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3BhbmVscy9zaGFkZXItZ3JhcGgvY29tcG9uZW50cy9mbG9hdC13aW5kb3cvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRDQUFrRTtBQUdsRSx5REFBZ0U7QUFJbkQsUUFBQSxXQUFXLEdBQUc7SUFDdkIsTUFBTTtDQUNULENBQUM7QUFFVyxRQUFBLFdBQVcsR0FBRztJQUN2QixLQUFLLEVBQUU7UUFDSCxJQUFJLEVBQUUsbUNBQXFCO1FBQzNCLFFBQVEsRUFBRSxJQUFJO1FBQ2QsT0FBTyxFQUFFLElBQUk7S0FDaEI7SUFDRCxNQUFNLEVBQUU7UUFDSixJQUFJLEVBQUUsTUFBaUM7UUFDdkMsUUFBUSxFQUFFLElBQUk7UUFDZCxPQUFPLEVBQUUsSUFBSTtLQUNoQjtDQUNKLENBQUM7QUFFSyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWtFLEVBQUUsR0FBcUMsRUFBRSxFQUFFO0lBQ3JJLE1BQU0sY0FBYyxHQUFHLElBQUEsWUFBRyxHQUEwQixDQUFDO0lBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUEsWUFBRyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTVCLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtRQUNkLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQyxDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO1FBQ2hCLE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDeEMsQ0FBQyxDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsQ0FBQyxRQUE0RSxFQUFFLEVBQUU7UUFDMUYsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxLQUFNLENBQUM7UUFDMUMsT0FBTztZQUNILENBQUMsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM1QyxDQUFDLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDM0MsS0FBSyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDNUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDakQsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRTtRQUNyQixJQUFJLEVBQUUsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGLFNBQVMsUUFBUTtRQUNiLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQy9CLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBQSxjQUFLLEVBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLFFBQVEsRUFBRSxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFBLGtCQUFTLEVBQUMsR0FBRyxFQUFFO1FBQ1gsSUFBQSxpQkFBUSxFQUFDLEdBQUcsRUFBRTtZQUNWLFFBQVEsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsYUFBYTtJQUV0QixDQUFDO0lBRUQsU0FBUyxNQUFNO0lBRWYsQ0FBQztJQUVELFNBQVMsTUFBTTtRQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU87UUFDSCxjQUFjO1FBQ2QsV0FBVztRQUVYLE1BQU07UUFFTixJQUFJO1FBQ0osSUFBSTtRQUNKLFdBQVc7UUFDWCxPQUFPO1FBRVAsTUFBTTtRQUNOLE1BQU07UUFDTixhQUFhO0tBQ2hCLENBQUM7QUFDTixDQUFDLENBQUM7QUF4RVcsUUFBQSxXQUFXLGVBd0V0QjtBQUVLLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBNEUsRUFBRSxFQUFFO0lBQzNHLE9BQU87Ozs7O21CQUtRLE1BQU0sQ0FBQyxHQUFHOzs7OzswQkFLSCxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFDekMsTUFBTSxDQUFDLE1BQU07Ozs7Ozs7Ozs7WUFVYixNQUFNLENBQUMsT0FBTzs7O1lBR2QsTUFBTSxDQUFDLE1BQU07OztLQUdwQixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBN0JXLFFBQUEsY0FBYyxrQkE2QnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbmV4dFRpY2ssIG9uTW91bnRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZS9kaXN0L3Z1ZS5qcyc7XG5pbXBvcnQgeyBTZXR1cENvbnRleHQgfSBmcm9tICd2dWUvdHlwZXMvdjMtc2V0dXAtY29udGV4dCc7XG5cbmltcG9ydCB7IEhUTUxHcmFwaEZvcmdlRWxlbWVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2Jsb2NrLWZvcmdlJztcbmltcG9ydCBCYXNlRmxvYXRXaW5kb3cgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IEZsb2F0V2luZG93Q29uZmlnIH0gZnJvbSAnLi9pbnRlcm5hbCc7XG5cbmV4cG9ydCBjb25zdCBjb21tb25FbWl0cyA9IFtcbiAgICAnaGlkZScsXG5dO1xuXG5leHBvcnQgY29uc3QgY29tbW9uUHJvcHMgPSB7XG4gICAgZm9yZ2U6IHtcbiAgICAgICAgdHlwZTogSFRNTEdyYXBoRm9yZ2VFbGVtZW50LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICB9LFxuICAgIGNvbmZpZzoge1xuICAgICAgICB0eXBlOiBPYmplY3QgYXMgKCkgPT4gRmxvYXRXaW5kb3dDb25maWcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY29tbW9uTG9naWMgPSAocHJvcHM6IHsgZm9yZ2U6IEhUTUxHcmFwaEZvcmdlRWxlbWVudCwgY29uZmlnOiBGbG9hdFdpbmRvd0NvbmZpZyB9LCBjdHg6IFNldHVwQ29udGV4dCB8IFNldHVwQ29udGV4dDxhbnk+KSA9PiB7XG4gICAgY29uc3QgZmxvYXRXaW5kb3dSZWYgPSByZWY8dHlwZW9mIEJhc2VGbG9hdFdpbmRvdz4oKTtcbiAgICBjb25zdCBoZWFkZXJUaXRsZSA9IHJlZignJyk7XG5cbiAgICBjb25zdCBoaWRlID0gKCkgPT4ge1xuICAgICAgICBmbG9hdFdpbmRvd1JlZi52YWx1ZT8uaGlkZSgpO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1Nob3cgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBmbG9hdFdpbmRvd1JlZi52YWx1ZT8uaXNTaG93O1xuICAgIH07XG5cbiAgICBjb25zdCBzaG93ID0gKHBvc2l0aW9uPzogeyB0b3A/OiBzdHJpbmc7IHJpZ2h0Pzogc3RyaW5nOyBsZWZ0Pzogc3RyaW5nOyBib3R0b20/OiBzdHJpbmc7IH0pID0+IHtcbiAgICAgICAgZmxvYXRXaW5kb3dSZWYudmFsdWU/LnNob3cocG9zaXRpb24pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRSZWN0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBmbG9hdFdpbmRvdyA9IGZsb2F0V2luZG93UmVmLnZhbHVlITtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHBhcnNlSW50KGZsb2F0V2luZG93LiRlbC5zdHlsZS5sZWZ0KSB8fCAwLFxuICAgICAgICAgICAgeTogcGFyc2VJbnQoZmxvYXRXaW5kb3cuJGVsLnN0eWxlLnRvcCkgfHwgMCxcbiAgICAgICAgICAgIHdpZHRoOiBwYXJzZUludChmbG9hdFdpbmRvdy4kZWwuc3R5bGUud2lkdGgpLFxuICAgICAgICAgICAgaGVpZ2h0OiBwYXJzZUludChmbG9hdFdpbmRvdy4kZWwuc3R5bGUuaGVpZ2h0KSxcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25DbGlja0hpZGUgPSAoKSA9PiB7XG4gICAgICAgIGhpZGUoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gc3luY0Jhc2UoKSB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBwcm9wcy5jb25maWcuYmFzZTtcbiAgICAgICAgaGVhZGVyVGl0bGUudmFsdWUgPSBiYXNlLnRpdGxlO1xuICAgIH1cblxuICAgIHdhdGNoKCgpID0+IHByb3BzLmNvbmZpZy5iYXNlLCAoKSA9PiB7XG4gICAgICAgIHN5bmNCYXNlKCk7XG4gICAgfSk7XG5cbiAgICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBzeW5jQmFzZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG9uU2l6ZUNoYW5nZWQoKSB7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblNob3coKSB7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbkhpZGUoKSB7XG4gICAgICAgIGN0eC5lbWl0KCdoaWRlJywgcHJvcHMuY29uZmlnLmtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmxvYXRXaW5kb3dSZWYsXG4gICAgICAgIGhlYWRlclRpdGxlLFxuXG4gICAgICAgIGlzU2hvdyxcblxuICAgICAgICBzaG93LFxuICAgICAgICBoaWRlLFxuICAgICAgICBvbkNsaWNrSGlkZSxcbiAgICAgICAgZ2V0UmVjdCxcblxuICAgICAgICBvblNob3csXG4gICAgICAgIG9uSGlkZSxcbiAgICAgICAgb25TaXplQ2hhbmdlZCxcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbW1vblRlbXBsYXRlID0gKGNvbmZpZzogeyBjc3M/OiBzdHJpbmcsIGhlYWRlcj86IHN0cmluZywgc2VjdGlvbj86IHN0cmluZywgZm9vdGVyPzogc3RyaW5nIH0pID0+IHtcbiAgICByZXR1cm4gYFxuICAgICAgPEJhc2VGbG9hdFdpbmRvd1xuICAgICAgICAgIHJlZj1cImZsb2F0V2luZG93UmVmXCJcbiAgICAgICAgICA6Zm9yZ2U9XCJmb3JnZVwiXG4gICAgICAgICAgOmNvbmZpZz1cImNvbmZpZ1wiXG4gICAgICAgICAgY2xhc3M9XCIke2NvbmZpZy5jc3N9XCJcbiAgICAgICAgICBAc2hvdz1cIm9uU2hvd1wiXG4gICAgICAgICAgQGhpZGU9XCJvbkhpZGVcIlxuICAgICAgICAgIEBzaXplLWNoYW5nZWQ9XCJvblNpemVDaGFuZ2VkXCJcbiAgICAgID5cbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCIke2NvbmZpZy5oZWFkZXIgIT09IHVuZGVmaW5lZH1cIiAjaGVhZGVyPlxuICAgICAgICAgICR7Y29uZmlnLmhlYWRlcn1cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlIHYtZWxzZSAjaGVhZGVyPlxuICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgPHVpLWxhYmVsIDp2YWx1ZT1oZWFkZXJUaXRsZT48L3VpLWxhYmVsPlxuICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgPHVpLWljb24gY2xhc3M9XCJoaWRlLWJ1dHRvblwiIHZhbHVlPVwiY29sbGFwc2UtcmlnaHRcIiBAY2xpY2s9XCJvbkNsaWNrSGlkZVwiPjwvdWktaWNvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgXG4gICAgICAgIDx0ZW1wbGF0ZSAjc2VjdGlvbj5cbiAgICAgICAgICAke2NvbmZpZy5zZWN0aW9ufVxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgI2Zvb3Rlcj5cbiAgICAgICAgICAke2NvbmZpZy5mb290ZXJ9XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L0Jhc2VGbG9hdFdpbmRvdz5cbiAgICBgO1xufTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/create-node/index.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/create-node/index.js new file mode 100644 index 0000000..64316e4 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/create-node/index.js @@ -0,0 +1,327 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.component = exports.getConfig = exports.DefaultConfig = void 0; +const tslib_1 = require("tslib"); +const lodash_1 = require("lodash"); +const vue_js_1 = require("vue/dist/vue.js"); +const internal_1 = require("../internal"); +const block_forge_1 = require("../../../../../block-forge"); +const base_1 = tslib_1.__importDefault(require("../base")); +const common_1 = require("../common"); +const shader_graph_1 = require("../../../../../shader-graph"); +const utils_1 = require("../utils"); +const shader_graph_2 = require("../../../../../shader-graph"); +exports.DefaultConfig = { + key: 'create-node', + tab: { + name: 'i18n:shader-graph.create_node.menu_name', + show: false, + }, + dontSave: true, + base: { + title: 'i18n:shader-graph.create_node.title', + width: '380px', + height: '250px', + minWidth: '200px', + minHeight: '200px', + defaultShow: false, + }, + position: { + top: '200px', + left: '200px', + }, + events: { + limitless: true, + resizer: true, + drag: true, + target: internal_1.FloatWindowDragTarget.header, + }, +}; +function getConfig() { + const newConfig = JSON.parse(JSON.stringify(exports.DefaultConfig)); + const config = shader_graph_1.GraphConfigMgr.Instance.getFloatingWindowConfigByName(exports.DefaultConfig.key); + if (config) { + newConfig.details = (0, lodash_1.merge)({}, newConfig.details, config); + } + return newConfig; +} +exports.getConfig = getConfig; +exports.component = (0, vue_js_1.defineComponent)({ + components: { + BaseFloatWindow: base_1.default, + }, + props: { + forge: { + type: block_forge_1.HTMLGraphForgeElement, + required: true, + default: null, + }, + config: { + type: Object, + required: true, + default: null, + }, + }, + emits: [...common_1.commonEmits], + setup(props, ctx) { + const commonObject = (0, common_1.commonLogic)(props, ctx); + const searchValue = (0, vue_js_1.ref)(''); + const searchInputRef = (0, vue_js_1.ref)(); + const menuRef = (0, vue_js_1.ref)(); + const foldValue = (0, vue_js_1.ref)(true); + const onCreateMenuChange = () => { + updateMenuTreeTemplate(); + }; + const onShowCreateNodeWindow = () => { + const floatWindowRef = commonObject.floatWindowRef.value; + const floatWindowConfig = floatWindowRef?.$options.propsData.config; + if (floatWindowRef && floatWindowConfig) { + if (commonObject.isShow()) { + return; + } + const $shaderGraph = floatWindowRef.$parent.$parent.$el; + const shaderGraphRect = (0, utils_1.getBoundingClientRect)($shaderGraph); + const inPanel = (0, shader_graph_2.contains)(shader_graph_1.GraphEditorMgr.Instance.mousePoint, { + x: shaderGraphRect.left, + y: shaderGraphRect.top, + width: shaderGraphRect.width, + height: shaderGraphRect.height, + }); + // 如果鼠标不在面板中就不弹窗 + if (!inPanel) + return; + const floatWindowRect = commonObject.getRect(); + const width = floatWindowRect.width || floatWindowConfig.base.width; + const height = floatWindowRect.height || floatWindowConfig.base.height; + const offsetX = 300, offsetY = 0; + let x = shader_graph_1.GraphEditorMgr.Instance.mousePointInPanel.x - offsetX; + const titleBarHeight = (0, utils_1.getTitleBarHeight)(); // 系统 titleBar 的高度 + let y = shader_graph_1.GraphEditorMgr.Instance.mousePointInPanel.y - titleBarHeight - offsetY; + if (x < 0) { + x = 0; + } + else if (x + floatWindowRect.width > shaderGraphRect.width - 28) { + x = shaderGraphRect.width - floatWindowRect.width - 28; + } + if (y < 0) { + y = 0; + } + else if (y + floatWindowRect.height > shaderGraphRect.bottom - 40) { + y = shaderGraphRect.bottom - floatWindowRect.height - 40; + } + foldValue.value = true; + updateMenuTreeTemplate(); + commonObject.show({ + left: x + 'px', + top: y + 'px', + }); + window.addEventListener('keyup', onKeyup); + (0, vue_js_1.nextTick)(() => { + searchValue.value = ''; + menuRef.value.clear(); + menuRef.value.select(menuRef.value.list[2]); + menuRef.value.positioning(menuRef.value.list[2]); + searchInputRef.value.focus(); + }); + } + }; + (0, vue_js_1.onMounted)(() => { + shader_graph_1.MessageMgr.Instance.register(shader_graph_2.MessageType.CreateMenuChange, onCreateMenuChange); + shader_graph_1.MessageMgr.Instance.register(shader_graph_2.MessageType.ShowCreateNodeWindow, onShowCreateNodeWindow); + }); + (0, vue_js_1.onUnmounted)(() => { + shader_graph_1.MessageMgr.Instance.unregister(shader_graph_2.MessageType.CreateMenuChange, onCreateMenuChange); + shader_graph_1.MessageMgr.Instance.unregister(shader_graph_2.MessageType.ShowCreateNodeWindow, onShowCreateNodeWindow); + }); + function createNode(addOptions) { + if (!addOptions) + return; + const floatWindowRef = commonObject.floatWindowRef.value; + const $shaderGraph = floatWindowRef.$parent.$parent.$el; + shader_graph_1.GraphEditorMgr.Instance.add(addOptions); + onClose(); + } + let initialized = false; + function updateMenuTreeTemplate() { + if (!initialized) { + initialized = true; + menuRef.value.setTemplate('text', ``); + menuRef.value.setTemplateInit('text', ($text) => { + $text.$name = $text.querySelector('.name'); + }); + menuRef.value.setRender('text', ($text, data) => { + $text.$name.innerHTML = data.detail.value; + }); + menuRef.value.setTemplateInit('item', ($div) => { + $div.addEventListener('click', (event) => { + menuRef.value.clear(); + menuRef.value.select($div.data); + menuRef.value.render(); + createNode($div.data.detail.addOptions); + }); + }); + menuRef.value.css = ` + .item { + text-align: center; + line-height: 24px; + } + .content .fixed .list > ui-drag-item[selected] { + background-color: #094A5D; + } + `; + } + menuRef.value.tree = (0, utils_1.convertMenuData)(shader_graph_1.Menu.Instance.getShaderNodeMenu(), false); + menuRef.value.render(); + } + function getSelectedCreateNodeItem(item, list, arrow = 'down') { + let index = item.index; + if (arrow === 'down') { + index++; + if (index > list.length - 1) + index = 0; + item = list[index]; + // while (item && item.children.length > 0) { + // index++; + // if (index > list.length - 1) index = 0; + // + // item = list[index]; + // } + } + else if (arrow === 'up') { + index--; + if (index < 0) + index = list.length - 1; + item = list[index]; + // while (item && item.children.length > 0) { + // index--; + // if (index < 0) index = list.length - 1; + // + // item = list[index]; + // } + } + return item; + } + function onKeyup(event) { + const which = event.which; + // 'Escape' 退出 + if (which === 27) { + onClose(); + return; + } + const $dom = menuRef.value; + const item = $dom.selectItems[$dom.selectItems.length - 1]; + if (!item) + return; + let selectItem = undefined; + switch (which) { + case 13: // Enter + if (!item.detail.addOptions) + return; + createNode(item.detail.addOptions); + return; + case 40: // ArrowDown + selectItem = getSelectedCreateNodeItem(item, $dom.list, 'down'); + break; + case 38: // ArrowUp + selectItem = getSelectedCreateNodeItem(item, $dom.list, 'up'); + break; + case 37: // ArrowLeft + if (!item.fold && item.parent) { + $dom.collapse(item.parent); + } + if (item.parent.parent) { + $dom.clear(); + $dom.select(item.parent); + } + break; + case 39: // ArrowRight + if (item.fold && item.children.length > 0) { + $dom.expand(item); + } + if (item.children[0]) { + $dom.clear(); + $dom.select(item.children[0]); + } + break; + } + if (selectItem !== undefined) { + $dom.clear(); + $dom.select(selectItem); + $dom.positioning(selectItem); + } + $dom.render(); + } + function onSearchInputChange(value) { + if (searchValue.value === value) + return; + searchValue.value = value; + setTimeout(() => { + let selectItem; + let treeData = (0, utils_1.convertMenuData)(shader_graph_1.Menu.Instance.getShaderNodeMenu(), false); + if (value) { + const result = (0, utils_1.filterMenuByKeyword)(treeData, value); + treeData = result.filterTree; + selectItem = result.firstSelect; + } + const $dom = menuRef.value; + $dom.tree = treeData; + if (treeData.length > 0) { + $dom.clear(); + $dom.select(selectItem); + menuRef.value.positioning(selectItem); + $dom.render(); + } + }, 50); + } + function onClose() { + window.removeEventListener('keyup', onKeyup); + searchValue.value = ''; + commonObject.hide(); + } + (0, vue_js_1.onUnmounted)(() => { + onClose(); + }); + commonObject.onSizeChanged = () => { + setTimeout(() => { + if (menuRef.value) { + menuRef.value.render(); + } + }, 100); + }; + return { + ...commonObject, + searchValue, + searchInputRef, + menuRef, + onClose, + onSearchInputChange, + }; + }, + template: (0, common_1.commonTemplate)({ + css: 'create-node', + header: ` + + + + + `, + section: ` +
+ + +
+ + + `, + footer: ` + `, + }), +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGFuZWxzL3NoYWRlci1ncmFwaC9jb21wb25lbnRzL2Zsb2F0LXdpbmRvdy9jcmVhdGUtbm9kZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsbUNBQStCO0FBRS9CLDRDQUF5RjtBQUV6RiwwQ0FBdUU7QUFDdkUsNERBQW1FO0FBQ25FLDJEQUFzQztBQUN0QyxzQ0FBcUU7QUFFckUsOERBQXNIO0FBQ3RILG9DQUEwRztBQUUxRyw4REFBb0U7QUFFdkQsUUFBQSxhQUFhLEdBQXNCO0lBQzVDLEdBQUcsRUFBRSxhQUFhO0lBQ2xCLEdBQUcsRUFBRTtRQUNELElBQUksRUFBRSx5Q0FBeUM7UUFDL0MsSUFBSSxFQUFFLEtBQUs7S0FDZDtJQUNELFFBQVEsRUFBRSxJQUFJO0lBQ2QsSUFBSSxFQUFFO1FBQ0YsS0FBSyxFQUFFLHFDQUFxQztRQUM1QyxLQUFLLEVBQUUsT0FBTztRQUNkLE1BQU0sRUFBRSxPQUFPO1FBQ2YsUUFBUSxFQUFFLE9BQU87UUFDakIsU0FBUyxFQUFFLE9BQU87UUFDbEIsV0FBVyxFQUFFLEtBQUs7S0FDckI7SUFDRCxRQUFRLEVBQUU7UUFDTixHQUFHLEVBQUUsT0FBTztRQUNaLElBQUksRUFBRSxPQUFPO0tBQ2hCO0lBQ0QsTUFBTSxFQUFFO1FBQ0osU0FBUyxFQUFFLElBQUk7UUFDZixPQUFPLEVBQUUsSUFBSTtRQUNiLElBQUksRUFBRSxJQUFJO1FBQ1YsTUFBTSxFQUFFLGdDQUFxQixDQUFDLE1BQU07S0FDdkM7Q0FDSixDQUFDO0FBRUYsU0FBZ0IsU0FBUztJQUNyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQWEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsTUFBTSxNQUFNLEdBQUcsNkJBQWMsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMs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UUFDRCxPQUFPLEVBQUU7Ozs7Ozs7Ozs7O1NBV1I7UUFDRCxNQUFNLEVBQUU7U0FDUDtLQUNKLENBQUM7Q0FDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgcmVmLCBuZXh0VGljaywgb25Nb3VudGVkLCBvblVubW91bnRlZCB9IGZyb20gJ3Z1ZS9kaXN0L3Z1ZS5qcyc7XG5cbmltcG9ydCB7IEZsb2F0V2luZG93Q29uZmlnLCBGbG9hdFdpbmRvd0RyYWdUYXJnZXQgfSBmcm9tICcuLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9ibG9jay1mb3JnZSc7XG5pbXBvcnQgQmFzZUZsb2F0V2luZG93IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgY29tbW9uRW1pdHMsIGNvbW1vbkxvZ2ljLCBjb21tb25UZW1wbGF0ZSB9IGZyb20gJy4uL2NvbW1vbic7XG5cbmltcG9ydCB7IEdyYXBoQ29uZmlnTWdyLCBHcmFwaEVkaXRvck1nciwgTWVudSwgR3JhcGhFZGl0b3JBZGRPcHRpb25zLCBNZXNzYWdlTWdyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhZGVyLWdyYXBoJztcbmltcG9ydCB7IGNvbnZlcnRNZW51RGF0YSwgZmlsdGVyTWVudUJ5S2V5d29yZCwgZ2V0Qm91bmRpbmdDbGllbnRSZWN0LCBnZXRUaXRsZUJhckhlaWdodCB9IGZyb20gJy4uL3V0aWxzJztcblxuaW1wb3J0IHsgY29udGFpbnMsIE1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhZGVyLWdyYXBoJztcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRDb25maWc6IEZsb2F0V2luZG93Q29uZmlnID0ge1xuICAgIGtleTogJ2NyZWF0ZS1ub2RlJyxcbiAgICB0YWI6IHtcbiAgICAgICAgbmFtZTogJ2kxOG46c2hhZGVyLWdyYXBoLmNyZWF0ZV9ub2RlLm1lbnVfbmFtZScsXG4gICAgICAgIHNob3c6IGZhbHNlLFxuICAgIH0sXG4gICAgZG9udFNhdmU6IHRydWUsXG4gICAgYmFzZToge1xuICAgICAgICB0aXRsZTogJ2kxOG46c2hhZGVyLWdyYXBoLmNyZWF0ZV9ub2RlLnRpdGxlJyxcbiAgICAgICAgd2lkdGg6ICczODBweCcsXG4gICAgICAgIGhlaWdodDogJzI1MHB4JyxcbiAgICAgICAgbWluV2lkdGg6ICcyMDBweCcsXG4gICAgICAgIG1pbkhlaWdodDogJzIwMHB4JyxcbiAgICAgICAgZGVmYXVsdFNob3c6IGZhbHNlLFxuICAgIH0sXG4gICAgcG9zaXRpb246IHtcbiAgICAgICAgdG9wOiAnMjAwcHgnLFxuICAgICAgICBsZWZ0OiAnMjAwcHgnLFxuICAgIH0sXG4gICAgZXZlbnRzOiB7XG4gICAgICAgIGxpbWl0bGVzczogdHJ1ZSxcbiAgICAgICAgcmVzaXplcjogdHJ1ZSxcbiAgICAgICAgZHJhZzogdHJ1ZSxcbiAgICAgICAgdGFyZ2V0OiBGbG9hdFdpbmRvd0RyYWdUYXJnZXQuaGVhZGVyLFxuICAgIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnKCkge1xuICAgIGNvbnN0IG5ld0NvbmZpZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoRGVmYXVsdENvbmZpZykpO1xuICAgIGNvbnN0IGNvbmZpZyA9IEdyYXBoQ29uZmlnTWdyLkluc3RhbmNlLmdldEZsb2F0aW5nV2luZG93Q29uZmlnQnlOYW1lKERlZmF1bHRDb25maWcua2V5KTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgIG5ld0NvbmZpZy5kZXRhaWxzID0gbWVyZ2Uoe30sIG5ld0NvbmZpZy5kZXRhaWxzLCBjb25maWcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3Q29uZmlnO1xufVxuXG5leHBvcnQgY29uc3QgY29tcG9uZW50ID0gZGVmaW5lQ29tcG9uZW50KHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJhc2VGbG9hdFdpbmRvdyxcbiAgICB9LFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZm9yZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEhUTUxHcmFwaEZvcmdlRWxlbWVudCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QgYXMgKCkgPT4gRmxvYXRXaW5kb3dDb25maWcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGVtaXRzOiBbLi4uY29tbW9uRW1pdHNdLFxuXG4gICAgc2V0dXAocHJvcHMsIGN0eCkge1xuICAgICAgICBjb25zdCBjb21tb25PYmplY3QgPSBjb21tb25Mb2dpYyhwcm9wcywgY3R4KTtcbiAgICAgICAgY29uc3Qgc2VhcmNoVmFsdWUgPSByZWYoJycpO1xuICAgICAgICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHJlZigpO1xuICAgICAgICBjb25zdCBtZW51UmVmID0gcmVmKCk7XG4gICAgICAgIGNvbnN0IGZvbGRWYWx1ZSA9IHJlZih0cnVlKTtcblxuICAgICAgICBjb25zdCBvbkNyZWF0ZU1lbnVDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVNZW51VHJlZVRlbXBsYXRlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgb25TaG93Q3JlYXRlTm9kZVdpbmRvdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZsb2F0V2luZG93UmVmID0gY29tbW9uT2JqZWN0LmZsb2F0V2luZG93UmVmLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgZmxvYXRXaW5kb3dDb25maWcgPSBmbG9hdFdpbmRvd1JlZj8uJG9wdGlvbnMucHJvcHNEYXRhLmNvbmZpZztcbiAgICAgICAgICAgIGlmIChmbG9hdFdpbmRvd1JlZiAmJiBmbG9hdFdpbmRvd0NvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChjb21tb25PYmplY3QuaXNTaG93KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCAkc2hhZGVyR3JhcGggPSBmbG9hdFdpbmRvd1JlZi4kcGFyZW50LiRwYXJlbnQuJGVsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoYWRlckdyYXBoUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgkc2hhZGVyR3JhcGgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaW5QYW5lbCA9IGNvbnRhaW5zKEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLm1vdXNlUG9pbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgeDogc2hhZGVyR3JhcGhSZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgIHk6IHNoYWRlckdyYXBoUmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzaGFkZXJHcmFwaFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogc2hhZGVyR3JhcGhSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzpvKDmoIfkuI3lnKjpnaLmnb/kuK3lsLHkuI3lvLnnqpdcbiAgICAgICAgICAgICAgICBpZiAoIWluUGFuZWwpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0V2luZG93UmVjdCA9IGNvbW1vbk9iamVjdC5nZXRSZWN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBmbG9hdFdpbmRvd1JlY3Qud2lkdGggfHwgZmxvYXRXaW5kb3dDb25maWcuYmFzZS53aWR0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBmbG9hdFdpbmRvd1JlY3QuaGVpZ2h0IHx8IGZsb2F0V2luZG93Q29uZmlnLmJhc2UuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldFggPSAzMDAsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFkgPSAwO1xuICAgICAgICAgICAgICAgIGxldCB4ID0gR3JhcGhFZGl0b3JNZ3IuSW5zdGFuY2UubW91c2VQb2ludEluUGFuZWwueCAtIG9mZnNldFg7XG4gICAgICAgICAgICAgICAgY29uc3QgdGl0bGVCYXJIZWlnaHQgPSBnZXRUaXRsZUJhckhlaWdodCgpOyAvLyDns7vnu58gdGl0bGVCYXIg55qE6auY5bqmXG4gICAgICAgICAgICAgICAgbGV0IHkgPSBHcmFwaEVkaXRvck1nci5JbnN0YW5jZS5tb3VzZVBvaW50SW5QYW5lbC55IC0gdGl0bGVCYXJIZWlnaHQgLSBvZmZzZXRZO1xuXG4gICAgICAgICAgICAgICAgaWYgKHggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeCArIGZsb2F0V2luZG93UmVjdC53aWR0aCA+IHNoYWRlckdyYXBoUmVjdC53aWR0aCAtIDI4KSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBzaGFkZXJHcmFwaFJlY3Qud2lkdGggLSBmbG9hdFdpbmRvd1JlY3Qud2lkdGggLSAyODtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHkgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeSArIGZsb2F0V2luZG93UmVjdC5oZWlnaHQgPiBzaGFkZXJHcmFwaFJlY3QuYm90dG9tIC0gNDApIHtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoYWRlckdyYXBoUmVjdC5ib3R0b20gLSBmbG9hdFdpbmRvd1JlY3QuaGVpZ2h0IC0gNDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9sZFZhbHVlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB1cGRhdGVNZW51VHJlZVRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgICAgY29tbW9uT2JqZWN0LnNob3coe1xuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB4ICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgdG9wOiB5ICsgJ3B4JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBvbktleXVwKTtcblxuICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoVmFsdWUudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgbWVudVJlZi52YWx1ZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICBtZW51UmVmLnZhbHVlLnNlbGVjdChtZW51UmVmLnZhbHVlLmxpc3RbMl0pO1xuICAgICAgICAgICAgICAgICAgICBtZW51UmVmLnZhbHVlLnBvc2l0aW9uaW5nKG1lbnVSZWYudmFsdWUubGlzdFsyXSk7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLnZhbHVlLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UucmVnaXN0ZXIoTWVzc2FnZVR5cGUuQ3JlYXRlTWVudUNoYW5nZSwgb25DcmVhdGVNZW51Q2hhbmdlKTtcbiAgICAgICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UucmVnaXN0ZXIoTWVzc2FnZVR5cGUuU2hvd0NyZWF0ZU5vZGVXaW5kb3csIG9uU2hvd0NyZWF0ZU5vZGVXaW5kb3cpO1xuICAgICAgICB9KTtcblxuICAgICAgICBvblVubW91bnRlZCgoKSA9PiB7XG4gICAgICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnVucmVnaXN0ZXIoTWVzc2FnZVR5cGUuQ3JlYXRlTWVudUNoYW5nZSwgb25DcmVhdGVNZW51Q2hhbmdlKTtcbiAgICAgICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UudW5yZWdpc3RlcihNZXNzYWdlVHlwZS5TaG93Q3JlYXRlTm9kZVdpbmRvdywgb25TaG93Q3JlYXRlTm9kZVdpbmRvdyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZU5vZGUoYWRkT3B0aW9uczogR3JhcGhFZGl0b3JBZGRPcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWFkZE9wdGlvbnMpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGZsb2F0V2luZG93UmVmID0gY29tbW9uT2JqZWN0LmZsb2F0V2luZG93UmVmLnZhbHVlITtcbiAgICAgICAgICAgIGNvbnN0ICRzaGFkZXJHcmFwaCA9IGZsb2F0V2luZG93UmVmLiRwYXJlbnQuJHBhcmVudC4kZWw7XG4gICAgICAgICAgICBHcmFwaEVkaXRvck1nci5JbnN0YW5jZS5hZGQoYWRkT3B0aW9ucyk7XG4gICAgICAgICAgICBvbkNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlTWVudVRyZWVUZW1wbGF0ZSgpIHtcbiAgICAgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbWVudVJlZi52YWx1ZS5zZXRUZW1wbGF0ZSgndGV4dCcsIGA8c3BhbiBjbGFzcz1cIm5hbWVcIj48L3NwYW4+YCk7XG4gICAgICAgICAgICAgICAgbWVudVJlZi52YWx1ZS5zZXRUZW1wbGF0ZUluaXQoJ3RleHQnLCAoJHRleHQ6IEhUTUxFbGVtZW50ICYgeyAkbmFtZTogSFRNTEVsZW1lbnQgfCBudWxsOyAkbGluazogSFRNTEVsZW1lbnQgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAkdGV4dC4kbmFtZSA9ICR0ZXh0LnF1ZXJ5U2VsZWN0b3IoJy5uYW1lJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbWVudVJlZi52YWx1ZS5zZXRSZW5kZXIoXG4gICAgICAgICAgICAgICAgICAgICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRleHQ6IEhUTUxFbGVtZW50ICYgeyAkbmFtZTogSFRNTEVsZW1lbnQ7ICRsaW5rOiBIVE1MRWxlbWVudCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyBkZXRhaWw6IHsgdmFsdWU6IHN0cmluZyB9OyBmb2xkOiBib29sZWFuIH0sXG4gICAgICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRleHQuJG5hbWUuaW5uZXJIVE1MID0gZGF0YS5kZXRhaWwudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIG1lbnVSZWYudmFsdWUuc2V0VGVtcGxhdGVJbml0KCdpdGVtJywgKCRkaXY6IEhUTUxFbGVtZW50ICYgeyBkYXRhOiB7IGRldGFpbDogeyBhZGRPcHRpb25zOiBHcmFwaEVkaXRvckFkZE9wdGlvbnMgfSB9IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgJGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVudVJlZi52YWx1ZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVudVJlZi52YWx1ZS5zZWxlY3QoJGRpdi5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVSZWYudmFsdWUucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVOb2RlKCRkaXYuZGF0YS5kZXRhaWwuYWRkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbWVudVJlZi52YWx1ZS5jc3MgPSBgXG4gICAgICAgICAgICAgICAgICAgIC5pdGVtIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC5jb250ZW50IC5maXhlZCAubGlzdCA+IHVpLWRyYWctaXRlbVtzZWxlY3RlZF0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzA5NEE1RDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1lbnVSZWYudmFsdWUudHJlZSA9IGNvbnZlcnRNZW51RGF0YShNZW51Lkluc3RhbmNlLmdldFNoYWRlck5vZGVNZW51KCksIGZhbHNlKTtcbiAgICAgICAgICAgIG1lbnVSZWYudmFsdWUucmVuZGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRTZWxlY3RlZENyZWF0ZU5vZGVJdGVtKFxuICAgICAgICAgICAgaXRlbTogeyBpbmRleDogbnVtYmVyOyBjaGlsZHJlbjogW10gfSxcbiAgICAgICAgICAgIGxpc3Q6IHsgaW5kZXg6IG51bWJlcjsgY2hpbGRyZW46IFtdIH1bXSxcbiAgICAgICAgICAgIGFycm93OiAnZG93bicgfCAndXAnID0gJ2Rvd24nLFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IGl0ZW0uaW5kZXg7XG4gICAgICAgICAgICBpZiAoYXJyb3cgPT09ICdkb3duJykge1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gbGlzdC5sZW5ndGggLSAxKSBpbmRleCA9IDA7XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gbGlzdFtpbmRleF07XG4gICAgICAgICAgICAgICAgLy8gd2hpbGUgKGl0ZW0gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgLy8gICAgIGlmIChpbmRleCA+IGxpc3QubGVuZ3RoIC0gMSkgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gICAgIGl0ZW0gPSBsaXN0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFycm93ID09PSAndXAnKSB7XG4gICAgICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBsaXN0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAvLyB3aGlsZSAoaXRlbSAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgaW5kZXgtLTtcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyAgICAgaXRlbSA9IGxpc3RbaW5kZXhdO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25LZXl1cChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICAgICAgY29uc3Qgd2hpY2ggPSBldmVudC53aGljaDtcbiAgICAgICAgICAgIC8vICdFc2NhcGUnIOmAgOWHulxuICAgICAgICAgICAgaWYgKHdoaWNoID09PSAyNykge1xuICAgICAgICAgICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCAkZG9tID0gbWVudVJlZi52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSAkZG9tLnNlbGVjdEl0ZW1zWyRkb20uc2VsZWN0SXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcblxuICAgICAgICAgICAgbGV0IHNlbGVjdEl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzd2l0Y2ggKHdoaWNoKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxMzogLy8gRW50ZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLmRldGFpbC5hZGRPcHRpb25zKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZU5vZGUoaXRlbS5kZXRhaWwuYWRkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlIDQwOiAvLyBBcnJvd0Rvd25cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0SXRlbSA9IGdldFNlbGVjdGVkQ3JlYXRlTm9kZUl0ZW0oaXRlbSwgJGRvbS5saXN0LCAnZG93bicpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM4OiAvLyBBcnJvd1VwXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0gPSBnZXRTZWxlY3RlZENyZWF0ZU5vZGVJdGVtKGl0ZW0sICRkb20ubGlzdCwgJ3VwJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzc6IC8vIEFycm93TGVmdFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uZm9sZCAmJiBpdGVtLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGRvbS5jb2xsYXBzZShpdGVtLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucGFyZW50LnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGRvbS5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGRvbS5zZWxlY3QoaXRlbS5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzk6IC8vIEFycm93UmlnaHRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZm9sZCAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRkb20uZXhwYW5kKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZG9tLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZG9tLnNlbGVjdChpdGVtLmNoaWxkcmVuWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxlY3RJdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAkZG9tLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgJGRvbS5zZWxlY3Qoc2VsZWN0SXRlbSk7XG4gICAgICAgICAgICAgICAgJGRvbS5wb3NpdGlvbmluZyhzZWxlY3RJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRkb20ucmVuZGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvblNlYXJjaElucHV0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hWYWx1ZS52YWx1ZSA9PT0gdmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgIHNlYXJjaFZhbHVlLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RJdGVtO1xuICAgICAgICAgICAgICAgIGxldCB0cmVlRGF0YSA9IGNvbnZlcnRNZW51RGF0YShNZW51Lkluc3RhbmNlLmdldFNoYWRlck5vZGVNZW51KCksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZmlsdGVyTWVudUJ5S2V5d29yZCh0cmVlRGF0YSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0cmVlRGF0YSA9IHJlc3VsdC5maWx0ZXJUcmVlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtID0gcmVzdWx0LmZpcnN0U2VsZWN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCAkZG9tID0gbWVudVJlZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAkZG9tLnRyZWUgPSB0cmVlRGF0YTtcbiAgICAgICAgICAgICAgICBpZiAodHJlZURhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAkZG9tLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICRkb20uc2VsZWN0KHNlbGVjdEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBtZW51UmVmLnZhbHVlLnBvc2l0aW9uaW5nKHNlbGVjdEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAkZG9tLnJlbmRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDUwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uQ2xvc2UoKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBvbktleXVwKTtcbiAgICAgICAgICAgIHNlYXJjaFZhbHVlLnZhbHVlID0gJyc7XG4gICAgICAgICAgICBjb21tb25PYmplY3QuaGlkZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgb25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgICAgICAgICAgb25DbG9zZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21tb25PYmplY3Qub25TaXplQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtZW51UmVmLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbnVSZWYudmFsdWUucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29tbW9uT2JqZWN0LFxuICAgICAgICAgICAgc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZixcbiAgICAgICAgICAgIG1lbnVSZWYsXG5cbiAgICAgICAgICAgIG9uQ2xvc2UsXG4gICAgICAgICAgICBvblNlYXJjaElucHV0Q2hhbmdlLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICB0ZW1wbGF0ZTogY29tbW9uVGVtcGxhdGUoe1xuICAgICAgICBjc3M6ICdjcmVhdGUtbm9kZScsXG4gICAgICAgIGhlYWRlcjogYFxuPHVpLWxhYmVsIGNsYXNzPVwidGl0bGUtbGFiZWxcIiB2YWx1ZT1cImkxOG46c2hhZGVyLWdyYXBoLmNyZWF0ZV9ub2RlLnRpdGxlXCI+PC91aS1sYWJlbD5cbjx1aS1idXR0b24gY2xhc3M9XCJjbG9zZVwiIHRyYW5zcGFyZW50XG4gIHRvb2x0aXA9XCJpMThuOnNoYWRlci1ncmFwaC5jcmVhdGVfbm9kZS5jbG9zZS50b29sdGlwXCJcbiAgQGNsaWNrPVwib25DbG9zZVwiXG4+XG4gIDx1aS1pY29uIHZhbHVlPVwiY2xvc2VcIj48L3VpLWljb24+XG48L3VpLWJ1dHRvbj5cbiAgICAgICAgYCxcbiAgICAgICAgc2VjdGlvbjogYFxuPGRpdiBjbGFzcz1cInNlYXJjaC1ncm91cFwiPlxuICA8dWktaWNvbiBjbGFzcz1cImljb25cIiB2YWx1ZT1cInNlYXJjaFwiPjwvdWktaWNvbj5cbiAgPHVpLWlucHV0IHJlZj1cInNlYXJjaElucHV0UmVmXCIgY2xhc3M9XCJpbnB1dFwiXG4gICAgOnZhbHVlPVwic2VhcmNoVmFsdWVcIlxuICAgIHBsYWNlaG9sZGVyPVwiaTE4bjpzaGFkZXItZ3JhcGguY3JlYXRlX25vZGUuc2VhcmNoX2lucHV0LnBsYWNlaG9sZGVyXCJcbiAgICBAY2hhbmdlPVwib25TZWFyY2hJbnB1dENoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gID48L3VpLWlucHV0PlxuPC9kaXY+XG5cbjx1aS10cmVlIHJlZj1cIm1lbnVSZWZcIiBjbGFzcz1cIm1lbnVzXCI+PC91aS10cmVlPlxuICAgICAgICBgLFxuICAgICAgICBmb290ZXI6IGBcbiAgICAgICAgYCxcbiAgICB9KSxcbn0pO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/custom-nodes/index.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/custom-nodes/index.js new file mode 100644 index 0000000..7fea6e5 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/custom-nodes/index.js @@ -0,0 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.component = exports.getConfig = exports.DefaultConfig = void 0; +const tslib_1 = require("tslib"); +const vue_js_1 = require("vue/dist/vue.js"); +const lodash_1 = require("lodash"); +const base_1 = tslib_1.__importDefault(require("../base")); +const common_1 = require("../common"); +const internal_1 = require("../internal"); +const shader_graph_1 = require("../../../../../shader-graph"); +exports.DefaultConfig = { + key: 'custom-nodes', + tab: { + name: 'i18n:shader-graph.custom_nodes.menu_name', + show: false, + }, + base: { + title: 'i18n:shader-graph.custom_nodes.title', + minWidth: '240px', + minHeight: '240px', + defaultShow: false, + }, + position: { + right: '0', + top: '360', + }, + events: { + resizer: true, + drag: true, + target: internal_1.FloatWindowDragTarget.header, + }, +}; +function getConfig() { + const newConfig = JSON.parse(JSON.stringify(exports.DefaultConfig)); + const config = shader_graph_1.GraphConfigMgr.Instance.getFloatingWindowConfigByName(exports.DefaultConfig.key); + if (config) { + newConfig.details = (0, lodash_1.merge)({}, newConfig.details, config); + } + return newConfig; +} +exports.getConfig = getConfig; +exports.component = (0, vue_js_1.defineComponent)({ + components: { + BaseFloatWindow: base_1.default, + }, + props: { + ...common_1.commonProps, + }, + emits: [ + ...common_1.commonEmits, + ], + setup(props, ctx) { + return { + ...(0, common_1.commonLogic)(props, ctx), + }; + }, + template: (0, common_1.commonTemplate)({ + section: ` + + `, + footer: ` + + `, + }), +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGFuZWxzL3NoYWRlci1ncmFwaC9jb21wb25lbnRzL2Zsb2F0LXdpbmRvdy9jdXN0b20tbm9kZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDRDQUFrRDtBQUVsRCxtQ0FBK0I7QUFDL0IsMkRBQXNDO0FBQ3RDLHNDQUFrRjtBQUNsRiwwQ0FBdUU7QUFDdkUsOERBQTZEO0FBRWhELFFBQUEsYUFBYSxHQUFzQjtJQUM1QyxHQUFHLEVBQUUsY0FBYztJQUNuQixHQUFHLEVBQUU7UUFDRCxJQUFJLEVBQUUsMENBQTBDO1FBQ2hELElBQUksRUFBRSxLQUFLO0tBQ2Q7SUFDRCxJQUFJLEVBQUU7UUFDRixLQUFLLEVBQUUsc0NBQXNDO1FBQzdDLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLFdBQVcsRUFBRSxLQUFLO0tBQ3JCO0lBQ0QsUUFBUSxFQUFFO1FBQ04sS0FBSyxFQUFFLEdBQUc7UUFDVixHQUFHLEVBQUUsS0FBSztLQUNiO0lBQ0QsTUFBTSxFQUFFO1FBQ0osT0FBTyxFQUFFLElBQUk7UUFDYixJQUFJLEVBQUUsSUFBSTtRQUNWLE1BQU0sRUFBRSxnQ0FBcUIsQ0FBQyxNQUFNO0tBQ3ZDO0NBQ0osQ0FBQztBQUVGLFNBQWdCLFNBQVM7SUFDckIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sTUFBTSxHQUFHLDZCQUFjLENBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLHFCQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEYsSUFBSSxNQUFNLEVBQUU7UUFDUixTQUFTLENBQUMsT0FBTyxHQUFHLElBQUEsY0FBSyxFQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzVEO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQVBELDhCQU9DO0FBRVksUUFBQSxTQUFTLEdBQUcsSUFBQSx3QkFBZSxFQUFDO0lBRXJDLFVBQVUsRUFBRTtRQUNSLGVBQWUsRUFBZixjQUFlO0tBQ2xCO0lBRUQsS0FBSyxFQUFFO1FBQ0gsR0FBRyxvQkFBVztLQUNqQjtJQUVELEtBQUssRUFBRTtRQUNILEdBQUcsb0JBQVc7S0FDakI7SUFFRCxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUc7UUFDWixPQUFPO1lBQ0gsR0FBRyxJQUFBLG9CQUFXLEVBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztTQUU3QixDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVEsRUFBRSxJQUFBLHVCQUFjLEVBQUM7UUFDckIsT0FBTyxFQUFFOztTQUVSO1FBQ0QsTUFBTSxFQUFFOztTQUVQO0tBQ0osQ0FBQztDQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCB9IGZyb20gJ3Z1ZS9kaXN0L3Z1ZS5qcyc7XG5cbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCYXNlRmxvYXRXaW5kb3cgZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgeyBjb21tb25FbWl0cywgY29tbW9uTG9naWMsIGNvbW1vblByb3BzLCBjb21tb25UZW1wbGF0ZSB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBGbG9hdFdpbmRvd0NvbmZpZywgRmxvYXRXaW5kb3dEcmFnVGFyZ2V0IH0gZnJvbSAnLi4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgR3JhcGhDb25maWdNZ3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFkZXItZ3JhcGgnO1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdENvbmZpZzogRmxvYXRXaW5kb3dDb25maWcgPSB7XG4gICAga2V5OiAnY3VzdG9tLW5vZGVzJyxcbiAgICB0YWI6IHtcbiAgICAgICAgbmFtZTogJ2kxOG46c2hhZGVyLWdyYXBoLmN1c3RvbV9ub2Rlcy5tZW51X25hbWUnLFxuICAgICAgICBzaG93OiBmYWxzZSxcbiAgICB9LFxuICAgIGJhc2U6IHtcbiAgICAgICAgdGl0bGU6ICdpMThuOnNoYWRlci1ncmFwaC5jdXN0b21fbm9kZXMudGl0bGUnLFxuICAgICAgICBtaW5XaWR0aDogJzI0MHB4JyxcbiAgICAgICAgbWluSGVpZ2h0OiAnMjQwcHgnLFxuICAgICAgICBkZWZhdWx0U2hvdzogZmFsc2UsXG4gICAgfSxcbiAgICBwb3NpdGlvbjoge1xuICAgICAgICByaWdodDogJzAnLFxuICAgICAgICB0b3A6ICczNjAnLFxuICAgIH0sXG4gICAgZXZlbnRzOiB7XG4gICAgICAgIHJlc2l6ZXI6IHRydWUsXG4gICAgICAgIGRyYWc6IHRydWUsXG4gICAgICAgIHRhcmdldDogRmxvYXRXaW5kb3dEcmFnVGFyZ2V0LmhlYWRlcixcbiAgICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZygpIHtcbiAgICBjb25zdCBuZXdDb25maWcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KERlZmF1bHRDb25maWcpKTtcbiAgICBjb25zdCBjb25maWcgPSBHcmFwaENvbmZpZ01nci5JbnN0YW5jZS5nZXRGbG9hdGluZ1dpbmRvd0NvbmZpZ0J5TmFtZShEZWZhdWx0Q29uZmlnLmtleSk7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgICBuZXdDb25maWcuZGV0YWlscyA9IG1lcmdlKHt9LCBuZXdDb25maWcuZGV0YWlscywgY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXBvbmVudCA9IGRlZmluZUNvbXBvbmVudCh7XG5cbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJhc2VGbG9hdFdpbmRvdyxcbiAgICB9LFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgLi4uY29tbW9uUHJvcHMsXG4gICAgfSxcblxuICAgIGVtaXRzOiBbXG4gICAgICAgIC4uLmNvbW1vbkVtaXRzLFxuICAgIF0sXG5cbiAgICBzZXR1cChwcm9wcywgY3R4KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb21tb25Mb2dpYyhwcm9wcywgY3R4KSxcblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICB0ZW1wbGF0ZTogY29tbW9uVGVtcGxhdGUoe1xuICAgICAgICBzZWN0aW9uOiBgXG4gICAgICAgIFxuICAgICAgICBgLFxuICAgICAgICBmb290ZXI6IGBcbiAgICAgICAgXG4gICAgICAgIGAsXG4gICAgfSksXG59KTtcblxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/graph-property/index.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/graph-property/index.js new file mode 100644 index 0000000..23c53a8 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/graph-property/index.js @@ -0,0 +1,352 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.component = exports.getConfig = exports.DefaultConfig = void 0; +const tslib_1 = require("tslib"); +const lodash_1 = require("lodash"); +const internal_1 = require("../internal"); +const block_forge_1 = require("../../../../../block-forge"); +const base_1 = tslib_1.__importDefault(require("../base")); +const shader_graph_1 = require("../../../../../shader-graph"); +const common_1 = require("../common"); +const vue_js_1 = require("vue/dist/vue.js"); +exports.DefaultConfig = { + key: 'graph-property', + tab: { + name: 'i18n:shader-graph.graph_property.menu_name', + show: true, + height: 80, + }, + base: { + title: 'i18n:shader-graph.graph_property.title', + width: '300px', + height: '240px', + minWidth: '300px', + minHeight: '240px', + defaultShow: false, + }, + position: { + top: '28px', + right: '28px', + }, + events: { + resizer: true, + drag: true, + target: internal_1.FloatWindowDragTarget.header, + }, +}; +function getConfig() { + const newConfig = JSON.parse(JSON.stringify(exports.DefaultConfig)); + const config = shader_graph_1.GraphConfigMgr.Instance.getFloatingWindowConfigByName(exports.DefaultConfig.key); + if (config) { + newConfig.details = (0, lodash_1.merge)({}, newConfig.details, config); + } + return newConfig; +} +exports.getConfig = getConfig; +exports.component = (0, vue_js_1.defineComponent)({ + components: { + BaseFloatWindow: base_1.default, + }, + directives: { + focus: (el) => { + // 不延迟的话,无法 focus,可能是时机问题 + setTimeout(() => { + el.focus(); + }); + }, + }, + props: { + forge: { + type: block_forge_1.HTMLGraphForgeElement, + required: true, + default: null, + }, + config: { + type: Object, + required: true, + default: null, + }, + }, + emits: [...common_1.commonEmits], + setup(props, ctx) { + const common = (0, common_1.commonLogic)(props, ctx); + const deleteStyleRef = (0, vue_js_1.ref)(); + const loading = (0, vue_js_1.ref)(false); + const popupMenuRef = (0, vue_js_1.ref)(false); + const menusRef = (0, vue_js_1.ref)([]); + const propertyRefs = (0, vue_js_1.ref)([]); + const propertyMap = new Map(); + function updateMenuByShaderPropertyDefines() { + menusRef.value = []; + (0, shader_graph_1.iteratePropertyDefines)((propertyDefine) => { + if (propertyDefine.details.menu) { + menusRef.value.push({ + label: propertyDefine.details.menu, + data: propertyDefine, + }); + } + }); + } + async function updateProperties() { + loading.value = true; + updateMenuByShaderPropertyDefines(); + propertyMap.clear(); + await shader_graph_1.GraphPropertyMgr.Instance.iterateProperties(async (property, propertyDefine) => { + await createPropertyItem(property, propertyDefine); + }); + propertyRefs.value = []; + propertyMap.forEach((item) => { + shader_graph_1.Menu.Instance.addItemPath(item.menu, item.addOptions); + propertyRefs.value.push(item); + }); + loading.value = false; + } + const updatePropertiesDebounce = (0, lodash_1.debounce)(async () => { + await updateProperties(); + }, 100); + shader_graph_1.MessageMgr.Instance.register([ + shader_graph_1.MessageType.EnterGraph, + shader_graph_1.MessageType.Restore, + shader_graph_1.MessageType.SetGraphDataToForge, + ], () => { + if (!common.isShow()) + return; + updatePropertiesDebounce(); + }); + async function createPropertyItem(propertyData, propertyDefine) { + if (!propertyData || !propertyDefine) { + console.debug('data undefined or define ', propertyData, propertyDefine); + return; + } + const menu = `Variables/${propertyData.name}`; + const valueDump = await shader_graph_1.MessageMgr.Instance.callSceneMethod('queryPropertyValueDumpByType', [ + propertyData.type, propertyData.outputPins[0].value, + ]); + const propertyItem = { + menu: menu, + rename: false, + showDelete: false, + valueDump: valueDump, + addOptions: { + type: propertyDefine.declareType, + details: { + propertyID: propertyData.id, + baseType: propertyDefine.type, + title: propertyData.name, + outputPins: propertyData.outputPins, + }, + }, + ...propertyData, + }; + propertyMap.set(propertyData.id, propertyItem); + return propertyItem; + } + async function addProperty(propertyDefine) { + const variableData = shader_graph_1.GraphPropertyMgr.Instance.addProperty(propertyDefine); + const item = await createPropertyItem(variableData, propertyDefine); + if (item) { + item.rename = true; + propertyRefs.value.push(item); + shader_graph_1.Menu.Instance.addItemPath(item.menu, item.addOptions); + } + popupMenuRef.value = false; + document.removeEventListener('mouseup', onFullscreenMouseUp); + } + function onDelete(index) { + const propertyData = shader_graph_1.GraphPropertyMgr.Instance.removeProperty(index); + const propertyItem = propertyRefs.value.splice(index, 1)[0]; + if (propertyData && propertyItem) { + shader_graph_1.Menu.Instance.removeItemPath(propertyItem.menu); + } + } + // 用于隐藏 menu + function onFullscreenMouseUp() { + if (popupMenuRef.value) { + setTimeout(() => { + popupMenuRef.value = false; + document.removeEventListener('mouseup', onFullscreenMouseUp); + }, 10); + } + } + function onPopupMenu() { + popupMenuRef.value = true; + document.addEventListener('mouseup', onFullscreenMouseUp); + } + function goToRename(event, variable) { + variable.rename = true; + } + function onRender(value) { + return JSON.stringify(value); + } + function onRenameSubmit(name, variableItem) { + variableItem.rename = false; + variableItem.showDelete = false; + if (name === variableItem.name || !name) + return; + if (shader_graph_1.GraphPropertyMgr.Instance.exitsProperty(name)) { + console.warn('rename failed, a great name'); + return; + } + shader_graph_1.Menu.Instance.removeItemPath(variableItem.menu); + variableItem.menu = `Variables/${name}`; + variableItem.name = name; + variableItem.addOptions.details.title = name; + shader_graph_1.Menu.Instance.addItemPath(variableItem.menu, variableItem.addOptions); + const variableData = shader_graph_1.GraphPropertyMgr.Instance.getPropertyByID(variableItem.id); + if (variableData) { + variableData.name = name; + shader_graph_1.GraphPropertyMgr.Instance.updateProperty(variableItem.id, variableData); + } + else { + console.error('rename failed, variable data not found by ID: ' + variableItem.id); + } + variableItem.rename = false; + } + function onRenameCancel(variable) { + variable.rename = false; + } + function onMouseEnter(variable) { + if (variable.rename) + return; + variable.showDelete = true; + } + function onMouseLeave(variable) { + if (variable.rename) + return; + variable.showDelete = false; + } + function onDumpConfirm(event, variable) { + const dump = event.target && event.target.dump; + if (dump) { + variable.valueDump = dump; + variable.outputPins[0].value = dump.value; + shader_graph_1.GraphPropertyMgr.Instance.updatePropertyValue(variable.id, { + id: variable.id, + name: variable.name, + type: variable.type, + declareType: variable.declareType, + outputPins: variable.outputPins, + }); + } + } + function onDragStart($event, variable) { + const addOptions = { + type: variable.declareType, + details: { + propertyID: variable.id, + baseType: variable.type, + title: variable.name, + outputPins: variable.outputPins, + }, + }; + $event.dataTransfer?.setData('value', JSON.stringify(addOptions)); + shader_graph_1.MessageMgr.Instance.send(shader_graph_1.MessageType.DraggingProperty); + } + function show() { + common.show(); + updatePropertiesDebounce(); + } + return { + ...common, + loading, + propertyRefs, + menusRef, + popupMenuRef, + deleteStyleRef, + addProperty, + onPopupMenu, + onRender, + onDelete, + onDumpConfirm, + goToRename, + onRenameSubmit, + onRenameCancel, + onMouseEnter, + onMouseLeave, + onDragStart, + show, + }; + }, + template: (0, common_1.commonTemplate)({ + css: 'graph-property', + section: ` +
+ + + + +
+ +
+
+ + + + + + +
+ + +
+
+
+ +
+
+
+ +
+ +
+ `, + footer: ` + + `, + }), +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGFuZWxzL3NoYWRlci1ncmFwaC9jb21wb25lbnRzL2Zsb2F0LXdpbmRvdy9ncmFwaC1wcm9wZXJ0eS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsbUNBQXlDO0FBS3pDLDBDQUF1RTtBQUN2RSw0REFBbUU7QUFDbkUsMkRBQXNDO0FBQ3RDLDhEQVNxQztBQUNyQyxzQ0FBcUU7QUFFckUsNENBQXVEO0FBVzFDLFFBQUEsYUFBYSxHQUFzQjtJQUM1QyxHQUFHLEVBQUUsZ0JBQWdCO0lBQ3JCLEdBQUcsRUFBRTtRQUNELElBQUksRUFBRSw0Q0FBNEM7UUFDbEQsSUFBSSxFQUFFLElBQUk7UUFDVixNQUFNLEVBQUUsRUFBRTtLQUNiO0lBQ0QsSUFBSSxFQUFFO1FBQ0YsS0FBSyxFQUFFLHdDQUF3QztRQUMvQyxLQUFLLEVBQUUsT0FBTztRQUNkLE1BQU0sRUFBRSxPQUFPO1FBQ2YsUUFBUSxFQUFFLE9BQU87UUFDakIsU0FBUyxFQUFFLE9BQU87UUFDbEIsV0FBVyxFQUFFLEtBQUs7S0FDckI7SUFDRCxRQUFRLEVBQUU7UUFDTixHQUFHLEVBQUUsTUFBTTtRQUNYLEtBQUssRUFBRSxNQUFNO0tBQ2hCO0lBQ0QsTUFBTSxFQUFFO1FBQ0osT0FBTyxFQUFFLElBQUk7UUFDYixJQUFJLEVBQUUsSUFBSTtRQUNWLE1BQU0sRUFBRSxnQ0FBcUIsQ0FBQyxNQUFNO0tBQ3ZDO0NBQ0osQ0FBQztBQUVGLFNBQWdCLFNBQVM7SUFDckIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sTUFBTSxHQUFHLDZCQUFjLENBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLHFCQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEYsSUFBSSxNQUFN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M0QsQ0FBQztRQUVELFNBQVMsSUFBSTtZQUNULE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLHdCQUF3QixFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU87WUFDSCxHQUFHLE1BQU07WUFFVCxPQUFPO1lBRVAsWUFBWTtZQUNaLFFBQVE7WUFDUixZQUFZO1lBQ1osY0FBYztZQUVkLFdBQVc7WUFDWCxXQUFXO1lBQ1gsUUFBUTtZQUNSLFFBQVE7WUFFUixhQUFhO1lBRWIsVUFBVTtZQUNWLGNBQWM7WUFDZCxjQUFjO1lBQ2QsWUFBWTtZQUNaLFlBQVk7WUFFWixXQUFXO1lBRVgsSUFBSTtTQUNQLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUSxFQUFFLElBQUEsdUJBQWMsRUFBQztRQUNyQixHQUFHLEVBQUUsZ0JBQWdCO1FBQ3JCLE9BQU8sRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0EwRVI7UUFDRCxNQUFNLEVBQUU7O1NBRVA7S0FDSixDQUFDO0NBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWVyZ2UsIGRlYm91bmNlIH0gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHR5cGUgeyBJUHJvcGVydHkgfSBmcm9tICdAY29jb3MvY3JlYXRvci10eXBlcy9lZGl0b3IvcGFja2FnZXMvc2NlbmUvQHR5cGVzL3B1YmxpYyc7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5RGVmaW5lIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vQHR5cGVzL3NoYWRlci1ub2RlLXR5cGUnO1xuXG5pbXBvcnQgeyBGbG9hdFdpbmRvd0NvbmZpZywgRmxvYXRXaW5kb3dEcmFnVGFyZ2V0IH0gZnJvbSAnLi4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgSFRNTEdyYXBoRm9yZ2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vYmxvY2stZm9yZ2UnO1xuaW1wb3J0IEJhc2VGbG9hdFdpbmRvdyBmcm9tICcuLi9iYXNlJztcbmltcG9ydCB7XG4gICAgUHJvcGVydHlEYXRhLFxuICAgIEdyYXBoUHJvcGVydHlNZ3IsXG4gICAgTWVudSxcbiAgICBHcmFwaEVkaXRvckFkZE9wdGlvbnMsXG4gICAgTWVzc2FnZU1ncixcbiAgICBNZXNzYWdlVHlwZSxcbiAgICBHcmFwaENvbmZpZ01ncixcbiAgICBpdGVyYXRlUHJvcGVydHlEZWZpbmVzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFkZXItZ3JhcGgnO1xuaW1wb3J0IHsgY29tbW9uRW1pdHMsIGNvbW1vbkxvZ2ljLCBjb21tb25UZW1wbGF0ZSB9IGZyb20gJy4uL2NvbW1vbic7XG5cbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgcmVmIH0gZnJvbSAndnVlL2Rpc3QvdnVlLmpzJztcblxudHlwZSBQcm9wZXJ0eUl0ZW0gPSB7XG4gICAgbWVudTogc3RyaW5nO1xuICAgIHJlbmFtZTogYm9vbGVhbjtcbiAgICBzaG93RGVsZXRlOiBib29sZWFuO1xuICAgIHZhbHVlRHVtcDogSVByb3BlcnR5IHwgdW5kZWZpbmVkO1xuICAgIC8vXG4gICAgYWRkT3B0aW9uczogR3JhcGhFZGl0b3JBZGRPcHRpb25zO1xufSAmIFByb3BlcnR5RGF0YTtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRDb25maWc6IEZsb2F0V2luZG93Q29uZmlnID0ge1xuICAgIGtleTogJ2dyYXBoLXByb3BlcnR5JyxcbiAgICB0YWI6IHtcbiAgICAgICAgbmFtZTogJ2kxOG46c2hhZGVyLWdyYXBoLmdyYXBoX3Byb3BlcnR5Lm1lbnVfbmFtZScsXG4gICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgIGhlaWdodDogODAsXG4gICAgfSxcbiAgICBiYXNlOiB7XG4gICAgICAgIHRpdGxlOiAnaTE4bjpzaGFkZXItZ3JhcGguZ3JhcGhfcHJvcGVydHkudGl0bGUnLFxuICAgICAgICB3aWR0aDogJzMwMHB4JyxcbiAgICAgICAgaGVpZ2h0OiAnMjQwcHgnLFxuICAgICAgICBtaW5XaWR0aDogJzMwMHB4JyxcbiAgICAgICAgbWluSGVpZ2h0OiAnMjQwcHgnLFxuICAgICAgICBkZWZhdWx0U2hvdzogZmFsc2UsXG4gICAgfSxcbiAgICBwb3NpdGlvbjoge1xuICAgICAgICB0b3A6ICcyOHB4JyxcbiAgICAgICAgcmlnaHQ6ICcyOHB4JyxcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgICByZXNpemVyOiB0cnVlLFxuICAgICAgICBkcmFnOiB0cnVlLFxuICAgICAgICB0YXJnZXQ6IEZsb2F0V2luZG93RHJhZ1RhcmdldC5oZWFkZXIsXG4gICAgfSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKSB7XG4gICAgY29uc3QgbmV3Q29uZmlnID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShEZWZhdWx0Q29uZmlnKSk7XG4gICAgY29uc3QgY29uZmlnID0gR3JhcGhDb25maWdNZ3IuSW5zdGFuY2UuZ2V0RmxvYXRpbmdXaW5kb3dDb25maWdCeU5hbWUoRGVmYXVsdENvbmZpZy5rZXkpO1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgbmV3Q29uZmlnLmRldGFpbHMgPSBtZXJnZSh7fSwgbmV3Q29uZmlnLmRldGFpbHMsIGNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdDb25maWc7XG59XG5cbmV4cG9ydCBjb25zdCBjb21wb25lbnQgPSBkZWZpbmVDb21wb25lbnQoe1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQmFzZUZsb2F0V2luZG93LFxuICAgIH0sXG5cbiAgICBkaXJlY3RpdmVzOiB7XG4gICAgICAgIGZvY3VzOiAoZWwpID0+IHtcbiAgICAgICAgICAgIC8vIOS4jeW7tui/n+eahOivne+8jOaXoOazlSBmb2N1c++8jOWPr+iDveaYr+aXtuacuumXrumimFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBwcm9wczoge1xuICAgICAgICBmb3JnZToge1xuICAgICAgICAgICAgdHlwZTogSFRNTEdyYXBoRm9yZ2VFbGVtZW50LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCBhcyAoKSA9PiBGbG9hdFdpbmRvd0NvbmZpZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgZW1pdHM6IFsuLi5jb21tb25FbWl0c10sXG5cbiAgICBzZXR1cChwcm9wcywgY3R4KSB7XG4gICAgICAgIGNvbnN0IGNvbW1vbiA9IGNvbW1vbkxvZ2ljKHByb3BzLCBjdHgpO1xuICAgICAgICBjb25zdCBkZWxldGVTdHlsZVJlZiA9IHJlZigpO1xuICAgICAgICBjb25zdCBsb2FkaW5nID0gcmVmKGZhbHNlKTtcbiAgICAgICAgY29uc3QgcG9wdXBNZW51UmVmID0gcmVmKGZhbHNlKTtcbiAgICAgICAgY29uc3QgbWVudXNSZWYgPSByZWY8eyBsYWJlbDogc3RyaW5nOyBkYXRhOiBQcm9wZXJ0eURlZmluZSB9W10+KFtdKTtcbiAgICAgICAgY29uc3QgcHJvcGVydHlSZWZzID0gcmVmPFByb3BlcnR5SXRlbVtdPihbXSk7XG5cbiAgICAgICAgY29uc3QgcHJvcGVydHlNYXA6IE1hcDxzdHJpbmcsIFByb3BlcnR5SXRlbT4gPSBuZXcgTWFwKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlTWVudUJ5U2hhZGVyUHJvcGVydHlEZWZpbmVzKCkge1xuICAgICAgICAgICAgbWVudXNSZWYudmFsdWUgPSBbXTtcbiAgICAgICAgICAgIGl0ZXJhdGVQcm9wZXJ0eURlZmluZXMoKHByb3BlcnR5RGVmaW5lOiBQcm9wZXJ0eURlZmluZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eURlZmluZS5kZXRhaWxzLm1lbnUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVudXNSZWYudmFsdWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogcHJvcGVydHlEZWZpbmUuZGV0YWlscy5tZW51LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcHJvcGVydHlEZWZpbmUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcygpIHtcbiAgICAgICAgICAgIGxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgdXBkYXRlTWVudUJ5U2hhZGVyUHJvcGVydHlEZWZpbmVzKCk7XG5cbiAgICAgICAgICAgIHByb3BlcnR5TWFwLmNsZWFyKCk7XG4gICAgICAgICAgICBhd2FpdCBHcmFwaFByb3BlcnR5TWdyLkluc3RhbmNlLml0ZXJhdGVQcm9wZXJ0aWVzKGFzeW5jIChwcm9wZXJ0eTogUHJvcGVydHlEYXRhLCBwcm9wZXJ0eURlZmluZTogUHJvcGVydHlEZWZpbmUgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjcmVhdGVQcm9wZXJ0eUl0ZW0ocHJvcGVydHksIHByb3BlcnR5RGVmaW5lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9wZXJ0eVJlZnMudmFsdWUgPSBbXTtcbiAgICAgICAgICAgIHByb3BlcnR5TWFwLmZvckVhY2goKGl0ZW06IFByb3BlcnR5SXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIE1lbnUuSW5zdGFuY2UuYWRkSXRlbVBhdGgoaXRlbS5tZW51LCBpdGVtLmFkZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHByb3BlcnR5UmVmcy52YWx1ZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cGRhdGVQcm9wZXJ0aWVzRGVib3VuY2UgPSBkZWJvdW5jZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB1cGRhdGVQcm9wZXJ0aWVzKCk7XG4gICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS5yZWdpc3RlcihbXG4gICAgICAgICAgICBNZXNzYWdlVHlwZS5FbnRlckdyYXBoLFxuICAgICAgICAgICAgTWVzc2FnZVR5cGUuUmVzdG9yZSxcbiAgICAgICAgICAgIE1lc3NhZ2VUeXBlLlNldEdyYXBoRGF0YVRvRm9yZ2UsXG4gICAgICAgIF0sICgpID0+IHtcbiAgICAgICAgICAgIGlmICghY29tbW9uLmlzU2hvdygpKSByZXR1cm47XG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzRGVib3VuY2UoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUHJvcGVydHlJdGVtKHByb3BlcnR5RGF0YT86IFByb3BlcnR5RGF0YSwgcHJvcGVydHlEZWZpbmU/OiBQcm9wZXJ0eURlZmluZSkge1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURhdGEgfHwgIXByb3BlcnR5RGVmaW5lKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnZGF0YSB1bmRlZmluZWQgb3IgZGVmaW5lICcsIHByb3BlcnR5RGF0YSwgcHJvcGVydHlEZWZpbmUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWVudSA9IGBWYXJpYWJsZXMvJHtwcm9wZXJ0eURhdGEubmFtZX1gO1xuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUR1bXAgPSBhd2FpdCBNZXNzYWdlTWdyLkluc3RhbmNlLmNhbGxTY2VuZU1ldGhvZCgncXVlcnlQcm9wZXJ0eVZhbHVlRHVtcEJ5VHlwZScsIFtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eURhdGEudHlwZSwgcHJvcGVydHlEYXRhLm91dHB1dFBpbnNbMF0udmFsdWUsXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlJdGVtOiBQcm9wZXJ0eUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgbWVudTogbWVudSxcbiAgICAgICAgICAgICAgICByZW5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNob3dEZWxldGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlRHVtcDogdmFsdWVEdW1wLFxuICAgICAgICAgICAgICAgIGFkZE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogcHJvcGVydHlEZWZpbmUuZGVjbGFyZVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5SUQ6IHByb3BlcnR5RGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VUeXBlOiBwcm9wZXJ0eURlZmluZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHByb3BlcnR5RGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UGluczogcHJvcGVydHlEYXRhLm91dHB1dFBpbnMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAuLi5wcm9wZXJ0eURhdGEsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwcm9wZXJ0eU1hcC5zZXQocHJvcGVydHlEYXRhLmlkLCBwcm9wZXJ0eUl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5SXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGFkZFByb3BlcnR5KHByb3BlcnR5RGVmaW5lOiBQcm9wZXJ0eURlZmluZSkge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVEYXRhID0gR3JhcGhQcm9wZXJ0eU1nci5JbnN0YW5jZS5hZGRQcm9wZXJ0eShwcm9wZXJ0eURlZmluZSk7XG4gICAgICAgICAgICBjb25zdCBpdGVtOiBQcm9wZXJ0eUl0ZW0gfCB1bmRlZmluZWQgPSBhd2FpdCBjcmVhdGVQcm9wZXJ0eUl0ZW0odmFyaWFibGVEYXRhLCBwcm9wZXJ0eURlZmluZSk7XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIGl0ZW0ucmVuYW1lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVJlZnMudmFsdWUucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICBNZW51Lkluc3RhbmNlLmFkZEl0ZW1QYXRoKGl0ZW0ubWVudSwgaXRlbS5hZGRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvcHVwTWVudVJlZi52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uRnVsbHNjcmVlbk1vdXNlVXApO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25EZWxldGUoaW5kZXg6IG51bWJlcikge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlEYXRhID0gR3JhcGhQcm9wZXJ0eU1nci5JbnN0YW5jZS5yZW1vdmVQcm9wZXJ0eShpbmRleCk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUl0ZW0gPSBwcm9wZXJ0eVJlZnMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVswXTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eURhdGEgJiYgcHJvcGVydHlJdGVtKSB7XG4gICAgICAgICAgICAgICAgTWVudS5JbnN0YW5jZS5yZW1vdmVJdGVtUGF0aChwcm9wZXJ0eUl0ZW0ubWVudSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDnlKjkuo7pmpDol48gbWVudVxuICAgICAgICBmdW5jdGlvbiBvbkZ1bGxzY3JlZW5Nb3VzZVVwKCkge1xuICAgICAgICAgICAgaWYgKHBvcHVwTWVudVJlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwb3B1cE1lbnVSZWYudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uRnVsbHNjcmVlbk1vdXNlVXApO1xuICAgICAgICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uUG9wdXBNZW51KCkge1xuICAgICAgICAgICAgcG9wdXBNZW51UmVmLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbkZ1bGxzY3JlZW5Nb3VzZVVwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdvVG9SZW5hbWUoZXZlbnQ6IE1vdXNlRXZlbnQsIHZhcmlhYmxlOiBQcm9wZXJ0eUl0ZW0pIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLnJlbmFtZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvblJlbmRlcih2YWx1ZTogYW55KSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25SZW5hbWVTdWJtaXQobmFtZTogc3RyaW5nLCB2YXJpYWJsZUl0ZW06IFByb3BlcnR5SXRlbSkge1xuICAgICAgICAgICAgdmFyaWFibGVJdGVtLnJlbmFtZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyaWFibGVJdGVtLnNob3dEZWxldGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSB2YXJpYWJsZUl0ZW0ubmFtZSB8fCAhbmFtZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAoR3JhcGhQcm9wZXJ0eU1nci5JbnN0YW5jZS5leGl0c1Byb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdyZW5hbWUgZmFpbGVkLCBhIGdyZWF0IG5hbWUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIE1lbnUuSW5zdGFuY2UucmVtb3ZlSXRlbVBhdGgodmFyaWFibGVJdGVtLm1lbnUpO1xuICAgICAgICAgICAgdmFyaWFibGVJdGVtLm1lbnUgPSBgVmFyaWFibGVzLyR7bmFtZX1gO1xuICAgICAgICAgICAgdmFyaWFibGVJdGVtLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdmFyaWFibGVJdGVtLmFkZE9wdGlvbnMuZGV0YWlscy50aXRsZSA9IG5hbWU7XG4gICAgICAgICAgICBNZW51Lkluc3RhbmNlLmFkZEl0ZW1QYXRoKHZhcmlhYmxlSXRlbS5tZW51LCB2YXJpYWJsZUl0ZW0uYWRkT3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZURhdGE6IFByb3BlcnR5RGF0YSB8IHVuZGVmaW5lZCA9IEdyYXBoUHJvcGVydHlNZ3IuSW5zdGFuY2UuZ2V0UHJvcGVydHlCeUlEKHZhcmlhYmxlSXRlbS5pZCk7XG4gICAgICAgICAgICBpZiAodmFyaWFibGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgdmFyaWFibGVEYXRhLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIEdyYXBoUHJvcGVydHlNZ3IuSW5zdGFuY2UudXBkYXRlUHJvcGVydHkodmFyaWFibGVJdGVtLmlkLCB2YXJpYWJsZURhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdyZW5hbWUgZmFpbGVkLCB2YXJpYWJsZSBkYXRhIG5vdCBmb3VuZCBieSBJRDogJyArIHZhcmlhYmxlSXRlbS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXJpYWJsZUl0ZW0ucmVuYW1lID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvblJlbmFtZUNhbmNlbCh2YXJpYWJsZTogUHJvcGVydHlJdGVtKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5yZW5hbWUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uTW91c2VFbnRlcih2YXJpYWJsZTogUHJvcGVydHlJdGVtKSB7XG4gICAgICAgICAgICBpZiAodmFyaWFibGUucmVuYW1lKSByZXR1cm47XG5cbiAgICAgICAgICAgIHZhcmlhYmxlLnNob3dEZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25Nb3VzZUxlYXZlKHZhcmlhYmxlOiBQcm9wZXJ0eUl0ZW0pIHtcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZS5yZW5hbWUpIHJldHVybjtcblxuICAgICAgICAgICAgdmFyaWFibGUuc2hvd0RlbGV0ZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25EdW1wQ29uZmlybShldmVudDogeyB0YXJnZXQ6IHsgZHVtcDogSVByb3BlcnR5IH0gfSwgdmFyaWFibGU6IFByb3BlcnR5SXRlbSkge1xuICAgICAgICAgICAgY29uc3QgZHVtcCA9IGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuZHVtcDtcbiAgICAgICAgICAgIGlmIChkdW1wKSB7XG4gICAgICAgICAgICAgICAgdmFyaWFibGUudmFsdWVEdW1wID0gZHVtcDtcbiAgICAgICAgICAgICAgICB2YXJpYWJsZS5vdXRwdXRQaW5zWzBdLnZhbHVlID0gZHVtcC52YWx1ZTtcbiAgICAgICAgICAgICAgICBHcmFwaFByb3BlcnR5TWdyLkluc3RhbmNlLnVwZGF0ZVByb3BlcnR5VmFsdWUodmFyaWFibGUuaWQsIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHZhcmlhYmxlLmlkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB2YXJpYWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB2YXJpYWJsZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJlVHlwZTogdmFyaWFibGUuZGVjbGFyZVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFBpbnM6IHZhcmlhYmxlLm91dHB1dFBpbnMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvbkRyYWdTdGFydCgkZXZlbnQ6IERyYWdFdmVudCwgdmFyaWFibGU6IFByb3BlcnR5SXRlbSkge1xuICAgICAgICAgICAgY29uc3QgYWRkT3B0aW9uczogR3JhcGhFZGl0b3JBZGRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IHZhcmlhYmxlLmRlY2xhcmVUeXBlLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlJRDogdmFyaWFibGUuaWQsXG4gICAgICAgICAgICAgICAgICAgIGJhc2VUeXBlOiB2YXJpYWJsZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdmFyaWFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0UGluczogdmFyaWFibGUub3V0cHV0UGlucyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICRldmVudC5kYXRhVHJhbnNmZXI/LnNldERhdGEoJ3ZhbHVlJywgSlNPTi5zdHJpbmdpZnkoYWRkT3B0aW9ucykpO1xuICAgICAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS5zZW5kKE1lc3NhZ2VUeXBlLkRyYWdnaW5nUHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgICAgICAgIGNvbW1vbi5zaG93KCk7XG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzRGVib3VuY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb21tb24sXG5cbiAgICAgICAgICAgIGxvYWRpbmcsXG5cbiAgICAgICAgICAgIHByb3BlcnR5UmVmcyxcbiAgICAgICAgICAgIG1lbnVzUmVmLFxuICAgICAgICAgICAgcG9wdXBNZW51UmVmLFxuICAgICAgICAgICAgZGVsZXRlU3R5bGVSZWYsXG5cbiAgICAgICAgICAgIGFkZFByb3BlcnR5LFxuICAgICAgICAgICAgb25Qb3B1cE1lbnUsXG4gICAgICAgICAgICBvblJlbmRlcixcbiAgICAgICAgICAgIG9uRGVsZXRlLFxuXG4gICAgICAgICAgICBvbkR1bXBDb25maXJtLFxuXG4gICAgICAgICAgICBnb1RvUmVuYW1lLFxuICAgICAgICAgICAgb25SZW5hbWVTdWJtaXQsXG4gICAgICAgICAgICBvblJlbmFtZUNhbmNlbCxcbiAgICAgICAgICAgIG9uTW91c2VFbnRlcixcbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZSxcblxuICAgICAgICAgICAgb25EcmFnU3RhcnQsXG5cbiAgICAgICAgICAgIHNob3csXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHRlbXBsYXRlOiBjb21tb25UZW1wbGF0ZSh7XG4gICAgICAgIGNzczogJ2dyYXBoLXByb3BlcnR5JyxcbiAgICAgICAgc2VjdGlvbjogYFxuPGRpdiBjbGFzcz1cInByb3BlcnR5LXRpdGxlXCI+XG4gICAgPHVpLWxhYmVsIGNsYXNzPVwibmFtZVwiIFxuICAgICAgICB2YWx1ZT1cImkxOG46c2hhZGVyLWdyYXBoLmdyYXBoX3Byb3BlcnR5LmFkZFwiPlxuICAgIDwvdWktbGFiZWw+XG4gICAgPHVpLWljb24gY2xhc3M9XCJhZGRcIiAgXG4gICAgICAgIHZhbHVlPVwiYWRkLW1vcmVcIlxuICAgICAgICBAY2xpY2suc3RvcD1cIm9uUG9wdXBNZW51KClcIlxuICAgICAgICB0b29sdGlwPVwiaTE4bjpzaGFkZXItZ3JhcGguZ3JhcGhfcHJvcGVydHkuYWRkXCI+XG4gICAgPC91aS1pY29uPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1jb250ZW50c1wiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJpdGVtXCJcbiAgICAgICAgdi1mb3I9XCIocHJvcGVydHksIGluZGV4KSBpbiBwcm9wZXJ0eVJlZnNcIiBcbiAgICAgICAgOmtleT1cInByb3BlcnR5Lm5hbWUgKyAnJyArIGluZGV4XCJcbiAgICAgICAgQG1vdXNlZW50ZXI9XCJvbk1vdXNlRW50ZXIocHJvcGVydHkpXCJcbiAgICAgICAgQG1vdXNlbGVhdmU9XCJvbk1vdXNlTGVhdmUocHJvcGVydHkpXCJcbiAgICA+XG4gICAgICAgIDx1aS1wcm9wIGNsYXNzPVwicHJvcFwiPiAgIFxuICAgICAgICAgICAgPHVpLWlucHV0IHNsb3Q9XCJsYWJlbFwiIGNsYXNzPVwiaW5wdXRcIlxuICAgICAgICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5yZW5hbWVcIlxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cInByb3BlcnR5Lm5hbWVcIlxuICAgICAgICAgICAgICAgIEBibHVyPVwib25SZW5hbWVTdWJtaXQoJGV2ZW50LnRhcmdldC52YWx1ZSwgcHJvcGVydHkpXCJcbiAgICAgICAgICAgICAgICBAa2V5ZG93bi5zdG9wXG4gICAgICAgICAgICAgICAgQGtleWRvd24uZW50ZXI9XCIkZXZlbnQudGFyZ2V0LmJsdXIoKVwiXG4gICAgICAgICAgICAgICAgQGtleWRvd24uZXNjPVwib25SZW5hbWVDYW5jZWwocHJvcGVydHkpXCJcbiAgICAgICAgICAgICAgICBAY2xpY2suc3RvcFxuICAgICAgICAgICAgICAgIEBkYmxjbGljay5zdG9wXG4gICAgICAgICAgICAgICAgQGNoYW5nZS5zdG9wXG4gICAgICAgICAgICAgICAgdi1mb2N1c1xuICAgICAgICAgICAgPjwvdWktaW5wdXQ+XG4gICAgICAgICAgICA8dWktZHJhZy1pdGVtIHNsb3Q9XCJsYWJlbFwiIGNsYXNzPVwibGFiZWxcIiB0eXBlPVwicHJvcGVydHlcIlxuICAgICAgICAgICAgICAgIEBkcmFnc3RhcnQ9XCJvbkRyYWdTdGFydCgkZXZlbnQsIHByb3BlcnR5KVwiXG4gICAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgICAgQGRibGNsaWNrLnN0b3A9XCJnb1RvUmVuYW1lKCRldmVudCwgcHJvcGVydHksIGluZGV4KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHVpLWljb24gY2xhc3M9XCJrZXlcIiB2YWx1ZT1cImtleVwiPjwvdWktaWNvbj5cbiAgICAgICAgICAgICAgICA8dWktbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgOnZhbHVlPVwicHJvcGVydHkubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIDp0b29sdGlwPVwicHJvcGVydHkubmFtZVwiXG4gICAgICAgICAgICAgICAgPjwvdWktbGFiZWw+XG4gICAgICAgICAgICA8L3VpLWRyYWctaXRlbT5cbiAgICAgICAgICAgIDxkaXYgc2xvdD1cImNvbnRlbnRcIiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8dWktcHJvcCBuby1sYWJlbFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZHVtcFwiXG4gICAgICAgICAgICAgICAgICAgIDpyZW5kZXI9XCJvblJlbmRlcihwcm9wZXJ0eS52YWx1ZUR1bXApXCJcbiAgICAgICAgICAgICAgICAgICAgQGNvbmZpcm0tZHVtcD1cIm9uRHVtcENvbmZpcm0oJGV2ZW50LCBwcm9wZXJ0eSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3VpLXByb3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC91aS1wcm9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCI+XG4gICAgICAgICAgICA8dWktaWNvbiBjbGFzcz1cImljb25cIiB2LWlmPVwicHJvcGVydHkuc2hvd0RlbGV0ZVwiXG4gICAgICAgICAgICAgICAgOnRvb2x0aXA9XCInaTE4bjpzaGFkZXItZ3JhcGguZ3JhcGhfcHJvcGVydHkuZGVsZXRlJ1wiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJjbG9zZVwiIFxuICAgICAgICAgICAgICAgIEBjbGljaz1cIm9uRGVsZXRlKGluZGV4KVwiXG4gICAgICAgICAgICA+PC91aS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHJvcGVydHktbWVudVwiXG4gICAgdi1pZj1cInBvcHVwTWVudVJlZlwiXG4+XG4gICAgPHVpLWxhYmVsIGNsYXNzPVwib3B0aW9uXCIgXG4gICAgICAgIHYtZm9yPVwiKG1lbnUsIGluZGV4KSBpbiBtZW51c1JlZlwiIFxuICAgICAgICA6a2V5PVwibWVudS5sYWJlbCArICcnICsgaW5kZXhcIlxuICAgICAgICA6dmFsdWU9XCJtZW51LmxhYmVsXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJhZGRQcm9wZXJ0eShtZW51LmRhdGEpXCJcbiAgICA+PC91aS1sYWJlbD5cbjwvZGl2PlxuICAgICAgICBgLFxuICAgICAgICBmb290ZXI6IGBcbiAgICAgICAgICAgIDx1aS1sb2FkaW5nIGNsYXNzPVwibG9hZGluZ1wiIHYtc2hvdz1cImxvYWRpbmdcIj48L3VpLWxvYWRpbmc+XG4gICAgICAgIGAsXG4gICAgfSksXG59KTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/index.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/index.js new file mode 100644 index 0000000..f648cbc --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/index.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getFloatWindowMap = exports.FloatWindow = exports.updateFloatWindowConfigs = exports.getFloatWindowConfigByName = exports.floatWindowConfigs = void 0; +const tslib_1 = require("tslib"); +const base_1 = tslib_1.__importDefault(require("./base")); +exports.FloatWindow = base_1.default; +const GraphProperty = tslib_1.__importStar(require("./graph-property")); +const CustomNodes = tslib_1.__importStar(require("./custom-nodes")); +const CreateNode = tslib_1.__importStar(require("./create-node")); +const Preview = tslib_1.__importStar(require("./preview")); +tslib_1.__exportStar(require("./internal"), exports); +const floatWindowMap = new Map([ + [ + GraphProperty.DefaultConfig.key, + GraphProperty.component, + ], + [ + CreateNode.DefaultConfig.key, + CreateNode.component, + ], + [ + Preview.DefaultConfig.key, + Preview.component, + ], + [ + CustomNodes.DefaultConfig.key, + CustomNodes.component, + ], +]); +exports.floatWindowConfigs = new Map(); +function getFloatWindowConfigByName(name) { + return exports.floatWindowConfigs.get(name); +} +exports.getFloatWindowConfigByName = getFloatWindowConfigByName; +async function updateFloatWindowConfigs() { + const configs = [ + GraphProperty.getConfig(), + Preview.getConfig(), + CreateNode.getConfig(), + CustomNodes.getConfig(), + ]; + configs.forEach(config => { + exports.floatWindowConfigs.set(config.key, config); + }); + return configs; +} +exports.updateFloatWindowConfigs = updateFloatWindowConfigs; +function getFloatWindowMap() { + return floatWindowMap; +} +exports.getFloatWindowMap = getFloatWindowMap; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcGFuZWxzL3NoYWRlci1ncmFwaC9jb21wb25lbnRzL2Zsb2F0LXdpbmRvdy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsMERBQWlDO0FBbUQ3QixzQkFuREcsY0FBVyxDQW1ESDtBQWxEZix3RUFBa0Q7QUFDbEQsb0VBQThDO0FBQzlDLGtFQUE0QztBQUM1QywyREFBcUM7QUFFckMscURBQTJCO0FBRTNCLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFpQztJQUMzRDtRQUNJLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRztRQUMvQixhQUFhLENBQUMsU0FBUztLQUMxQjtJQUNEO1FBQ0ksVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHO1FBQzVCLFVBQVUsQ0FBQyxTQUFTO0tBQ3ZCO0lBQ0Q7UUFDSSxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUc7UUFDekIsT0FBTyxDQUFDLFNBQVM7S0FDcEI7SUFDRDtRQUNJLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRztRQUM3QixXQUFXLENBQUMsU0FBUztLQUN4QjtDQUNKLENBQUMsQ0FBQztBQUVVLFFBQUEsa0JBQWtCLEdBQW1DLElBQUksR0FBRyxFQUFFLENBQUM7QUFFNUUsU0FBZ0IsMEJBQTBCLENBQUMsSUFBWTtJQUNuRCxPQUFPLDBCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRkQsZ0VBRUM7QUFFTSxLQUFLLFVBQVUsd0JBQXdCO0lBQzFDLE1BQU0sT0FBTyxHQUFHO1FBQ1osYUFBYSxDQUFDLFNBQVMsRUFBRTtRQUN6QixPQUFPLENBQUMsU0FBUyxFQUFFO1FBQ25CLFVBQVUsQ0FBQyxTQUFTLEVBQUU7UUFDdEIsV0FBVyxDQUFDLFNBQVMsRUFBRTtLQUMxQixDQUFDO0lBQ0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNyQiwwQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFYRCw0REFXQztBQUVELFNBQVMsaUJBQWlCO0lBQ3RCLE9BQU8sY0FBYyxDQUFDO0FBQzFCLENBQUM7QUFJRyw4Q0FBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZsb2F0V2luZG93Q29uZmlnIH0gZnJvbSAnLi9pbnRlcm5hbCc7XG5cbmltcG9ydCBGbG9hdFdpbmRvdyBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0ICogYXMgR3JhcGhQcm9wZXJ0eSBmcm9tICcuL2dyYXBoLXByb3BlcnR5JztcbmltcG9ydCAqIGFzIEN1c3RvbU5vZGVzIGZyb20gJy4vY3VzdG9tLW5vZGVzJztcbmltcG9ydCAqIGFzIENyZWF0ZU5vZGUgZnJvbSAnLi9jcmVhdGUtbm9kZSc7XG5pbXBvcnQgKiBhcyBQcmV2aWV3IGZyb20gJy4vcHJldmlldyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwnO1xuXG5jb25zdCBmbG9hdFdpbmRvd01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnkvKkRlZmluZUNvbXBvbmVudCovPihbXG4gICAgW1xuICAgICAgICBHcmFwaFByb3BlcnR5LkRlZmF1bHRDb25maWcua2V5LFxuICAgICAgICBHcmFwaFByb3BlcnR5LmNvbXBvbmVudCxcbiAgICBdLFxuICAgIFtcbiAgICAgICAgQ3JlYXRlTm9kZS5EZWZhdWx0Q29uZmlnLmtleSxcbiAgICAgICAgQ3JlYXRlTm9kZS5jb21wb25lbnQsXG4gICAgXSxcbiAgICBbXG4gICAgICAgIFByZXZpZXcuRGVmYXVsdENvbmZpZy5rZXksXG4gICAgICAgIFByZXZpZXcuY29tcG9uZW50LFxuICAgIF0sXG4gICAgW1xuICAgICAgICBDdXN0b21Ob2Rlcy5EZWZhdWx0Q29uZmlnLmtleSxcbiAgICAgICAgQ3VzdG9tTm9kZXMuY29tcG9uZW50LFxuICAgIF0sXG5dKTtcblxuZXhwb3J0IGNvbnN0IGZsb2F0V2luZG93Q29uZmlnczogTWFwPHN0cmluZywgRmxvYXRXaW5kb3dDb25maWc+ID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmxvYXRXaW5kb3dDb25maWdCeU5hbWUobmFtZTogc3RyaW5nKTogRmxvYXRXaW5kb3dDb25maWcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBmbG9hdFdpbmRvd0NvbmZpZ3MuZ2V0KG5hbWUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlRmxvYXRXaW5kb3dDb25maWdzKCkge1xuICAgIGNvbnN0IGNvbmZpZ3MgPSBbXG4gICAgICAgIEdyYXBoUHJvcGVydHkuZ2V0Q29uZmlnKCksXG4gICAgICAgIFByZXZpZXcuZ2V0Q29uZmlnKCksXG4gICAgICAgIENyZWF0ZU5vZGUuZ2V0Q29uZmlnKCksXG4gICAgICAgIEN1c3RvbU5vZGVzLmdldENvbmZpZygpLFxuICAgIF07XG4gICAgY29uZmlncy5mb3JFYWNoKGNvbmZpZyA9PiB7XG4gICAgICAgIGZsb2F0V2luZG93Q29uZmlncy5zZXQoY29uZmlnLmtleSwgY29uZmlnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29uZmlncztcbn1cblxuZnVuY3Rpb24gZ2V0RmxvYXRXaW5kb3dNYXAoKSB7XG4gICAgcmV0dXJuIGZsb2F0V2luZG93TWFwO1xufVxuXG5leHBvcnQge1xuICAgIEZsb2F0V2luZG93LFxuICAgIGdldEZsb2F0V2luZG93TWFwLFxufTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/internal.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/internal.js new file mode 100644 index 0000000..66d162b --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/internal.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FloatWindowDragTarget = void 0; +var FloatWindowDragTarget; +(function (FloatWindowDragTarget) { + // 自身 + FloatWindowDragTarget[FloatWindowDragTarget["itself"] = 0] = "itself"; + // 头部 + FloatWindowDragTarget[FloatWindowDragTarget["header"] = 1] = "header"; +})(FloatWindowDragTarget = exports.FloatWindowDragTarget || (exports.FloatWindowDragTarget = {})); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcGFuZWxzL3NoYWRlci1ncmFwaC9jb21wb25lbnRzL2Zsb2F0LXdpbmRvdy9pbnRlcm5hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLHFCQUtYO0FBTEQsV0FBWSxxQkFBcUI7SUFDN0IsS0FBSztJQUNMLHFFQUFVLENBQUE7SUFDVixLQUFLO0lBQ0wscUVBQVUsQ0FBQTtBQUNkLENBQUMsRUFMVyxxQkFBcUIsR0FBckIsNkJBQXFCLEtBQXJCLDZCQUFxQixRQUtoQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEZsb2F0V2luZG93RHJhZ1RhcmdldCB7XG4gICAgLy8g6Ieq6LqrXG4gICAgaXRzZWxmID0gMCxcbiAgICAvLyDlpLTpg6hcbiAgICBoZWFkZXIgPSAxLFxufVxuXG5leHBvcnQgdHlwZSBGbG9hdFdpbmRvd0V2ZW50T3B0aW9ucyA9IHtcbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6XnvKnmlL7nqpflj6NcbiAgICAgKi9cbiAgICByZXNpemVyOiBib29sZWFuO1xuICAgIGVuYWJsZUFzcGVjdFJhdGlvPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6Xmi5bliqhcbiAgICAgKi9cbiAgICBkcmFnOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIOaXoOmZkOWItlxuICAgICAqL1xuICAgIGxpbWl0bGVzcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog5ouW5Yqo5LuA5LmI5YWD57Sg5Y+v56e75YqoXG4gICAgICovXG4gICAgdGFyZ2V0OiBGbG9hdFdpbmRvd0RyYWdUYXJnZXQsXG59XG5cbmV4cG9ydCB0eXBlIEZsb2F0V2luZG93VGFiID0ge1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHNob3c6IGJvb2xlYW47XG4gICAgICAgIGhlaWdodD86IG51bWJlcjtcbiAgICAgICAgd2lkdGg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIEZsb2F0V2luZG93Q29uZmlnID0ge1xuICAgIGRvbnRTYXZlPzogYm9vbGVhbjtcbiAgICBrZXk6IHN0cmluZztcbiAgICB0YWI6IEZsb2F0V2luZG93VGFiO1xuICAgIGJhc2U6IHtcbiAgICAgICAgZGVmYXVsdFNob3c6IGJvb2xlYW47XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIG1pbldpZHRoOiBzdHJpbmc7XG4gICAgICAgIG1pbkhlaWdodDogc3RyaW5nO1xuICAgICAgICB3aWR0aD86IHN0cmluZyxcbiAgICAgICAgaGVpZ2h0Pzogc3RyaW5nLFxuICAgIH07XG4gICAgcG9zaXRpb246IHtcbiAgICAgICAgdG9wPzogc3RyaW5nO1xuICAgICAgICByaWdodD86IHN0cmluZztcbiAgICAgICAgbGVmdD86IHN0cmluZztcbiAgICAgICAgYm90dG9tPzogc3RyaW5nO1xuICAgIH07XG4gICAgZXZlbnRzOiBGbG9hdFdpbmRvd0V2ZW50T3B0aW9ucztcbiAgICBkZXRhaWxzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/preview/index.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/preview/index.js new file mode 100644 index 0000000..531ad9b --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/preview/index.js @@ -0,0 +1,317 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.component = exports.getConfig = exports.DefaultConfig = void 0; +const tslib_1 = require("tslib"); +const lodash_1 = require("lodash"); +const vue_js_1 = require("vue/dist/vue.js"); +const base_1 = tslib_1.__importDefault(require("../base")); +const common_1 = require("../common"); +const internal_1 = require("../internal"); +const shader_graph_1 = require("../../../../../shader-graph"); +const utils_1 = require("../utils"); +const BOX_MESH = '1263d74c-8167-4928-91a6-4e2672411f47@a804a'; +exports.DefaultConfig = { + key: 'preview', + tab: { + name: 'i18n:shader-graph.preview.menu_name', + show: true, + height: 80, + }, + base: { + title: 'i18n:shader-graph.preview.title', + width: '223px', + height: '228px', + minWidth: '223px', + minHeight: '228px', + defaultShow: false, + }, + position: { + right: '28px', + bottom: '0', + }, + events: { + resizer: true, + drag: true, + enableAspectRatio: true, + target: internal_1.FloatWindowDragTarget.header, + }, + details: { + primitive: BOX_MESH, + lightEnable: true, + }, +}; +function getConfig() { + const newConfig = JSON.parse(JSON.stringify(exports.DefaultConfig)); + const config = shader_graph_1.GraphConfigMgr.Instance.getFloatingWindowConfigByName(exports.DefaultConfig.key); + if (config) { + newConfig.details = (0, lodash_1.merge)({}, newConfig.details, config); + } + return newConfig; +} +exports.getConfig = getConfig; +exports.component = (0, vue_js_1.defineComponent)({ + components: { + BaseFloatWindow: base_1.default, + }, + props: { + ...common_1.commonProps, + }, + emits: [...common_1.commonEmits], + setup(props, ctx) { + const common = (0, common_1.commonLogic)(props, ctx); + const glPreview = (0, vue_js_1.ref)(); + const initPreviewDone = (0, vue_js_1.ref)(false); + const initGL = (0, vue_js_1.ref)(false); + const previewDirty = (0, vue_js_1.ref)(true); + const loading = (0, vue_js_1.ref)(true); + const animationId = (0, vue_js_1.ref)(-1); + const lightRef = (0, vue_js_1.ref)(); + const previewCanvas = (0, vue_js_1.ref)(); + const previewConfig = (0, vue_js_1.ref)({ + primitive: '', + lightEnable: false, + }); + async function callPreview(funcName, ...args) { + if (!initPreviewDone.value) + return; + await Editor.Message.request('scene', 'call-preview-function', 'shader-graph-preview', funcName, ...args); + previewDirty.value = true; + } + async function updateConfigToPreview(config) { + await callPreview('setLightEnable', config.lightEnable); + await callPreview('setPrimitive', config.primitive); + } + async function updateMaterial() { + if (!initPreviewDone.value || !common.isShow()) + return; + loading.value = true; + await shader_graph_1.MessageMgr.Instance.callSceneMethod('updateMaterial', [shader_graph_1.GraphDataMgr.Instance.getCurrentGraphData()]); + loading.value = false; + previewDirty.value = true; + } + const aspectRatio = -1; + async function refreshPreview() { + if (previewDirty.value) { + previewDirty.value = false; + const canvas = previewCanvas.value; + if (!canvas) + return; + const width = canvas.clientWidth === 0 ? canvas.parentNode.clientWidth : canvas.clientWidth; + const height = width; + // 等比缩放 + if (canvas.width !== width || !initGL.value) { + initGL.value = true; + await glPreview.value.initGL(canvas, { width, height }); + await glPreview.value.resizeGL(width, height); + } + const data = await glPreview.value.queryPreviewData({ + width, + height: height, + }); + glPreview.value.drawGL(data); + } + cancelAnimationFrame(animationId.value); + animationId.value = requestAnimationFrame(() => { + refreshPreview(); + }); + } + async function onMouseDownOnCanvas(event) { + await callPreview('onMouseDown', { x: event.x, y: event.y, button: event.button }); + async function mousemove(event) { + await callPreview('onMouseMove', { + movementX: event.movementX, + movementY: event.movementY, + }); + } + async function mouseup(event) { + await callPreview('onMouseUp', { + x: event.x, + y: event.y, + }); + document.removeEventListener('mousemove', mousemove); + document.removeEventListener('mouseup', mouseup); + previewDirty.value = false; + } + document.addEventListener('mousemove', mousemove); + document.addEventListener('mouseup', mouseup); + } + async function onMouseWheelOnCanvas(event) { + const scale = event.deltaY * 0.01; + await callPreview('setZoom', scale); + } + function addEventListenerToCanvas() { + const canvas = previewCanvas.value; + canvas.addEventListener('mousedown', onMouseDownOnCanvas); + canvas.addEventListener('mousewheel', onMouseWheelOnCanvas); + } + function removeEventListenerToCanvas() { + const canvas = previewCanvas.value; + canvas.removeEventListener('mousedown', onMouseDownOnCanvas); + canvas.removeEventListener('mousewheel', onMouseWheelOnCanvas); + } + const onSizeChangedDebounced = (0, lodash_1.debounce)(() => { + if (!common.isShow()) + return; + initPreview().then(() => { + previewDirty.value = true; + }); + }, 50); + common.onSizeChanged = () => { + onSizeChangedDebounced(); + }; + const onPreviewChangeDebounced = (0, lodash_1.debounce)(async (dirty, type) => { + if (!common.isShow()) + return; + if (dirty && type !== 'position-changed') { + await initPreview(); + await updateMaterial(); + } + }, 50); + async function onInitPreview() { + if (!common.isShow() || !shader_graph_1.GraphAssetMgr.Instance.uuid) + return; + await initPreview(); + const { primitive, lightEnable } = props.config.details; + if (previewConfig.value.primitive !== primitive || + previewConfig.value.lightEnable !== lightEnable) { + previewConfig.value = { + primitive: primitive || BOX_MESH, + lightEnable: lightEnable, + }; + applyPreviewConfigToUI(); + } + await updateMaterial(); + } + shader_graph_1.MessageMgr.Instance.register(shader_graph_1.MessageType.SceneReady, onInitPreview); + shader_graph_1.MessageMgr.Instance.register(shader_graph_1.MessageType.SetGraphDataToForge, onInitPreview); + shader_graph_1.MessageMgr.Instance.register(shader_graph_1.MessageType.DirtyChanged, onPreviewChangeDebounced); + async function initPreview(force = false) { + if (!initPreviewDone.value || force) { + initPreviewDone.value = true; + await shader_graph_1.MessageMgr.Instance.callSceneMethod('initPreview', [previewConfig.value]); + // @ts-expect-error + const GlPreview = Editor._Module.require('PreviewExtends').default; + glPreview.value = new GlPreview('shader-graph-preview', 'query-shader-graph-preview-data'); + glPreview.value.init({ + width: previewCanvas.value.clientWidth, + height: previewCanvas.value.clientHeight, + }); + addEventListenerToCanvas(); + refreshPreview(); + } + } + common.onShow = async () => { + if (await shader_graph_1.MessageMgr.Instance.checkSceneReady()) { + await onInitPreview(); + } + }; + function reset() { + initPreviewDone.value = false; + initGL.value = false; + removeEventListenerToCanvas(); + cancelAnimationFrame(animationId.value); + } + const commonHide = common.hide; + common.hide = async () => { + commonHide(); + reset(); + await shader_graph_1.GraphConfigMgr.Instance.autoSave(); + }; + const commonShow = common.show; + common.show = async (position) => { + if (!(0, utils_1.validatePosition)(position)) { + const config = shader_graph_1.GraphConfigMgr.Instance.getFloatingWindowConfigByName(exports.DefaultConfig.key); + position = (0, utils_1.validatePosition)(config?.position) ? config?.position : exports.DefaultConfig.position; + } + commonShow(position); + }; + async function onClose() { + common.hide(); + } + async function onRefresh() { + reset(); + initGL.value = false; + await initPreview(true); + await updateMaterial(); + } + function applyPreviewConfigToUI() { + onLightChange(previewConfig.value.lightEnable, false); + } + function onLightChange(enabled, save = true) { + if (enabled) { + lightRef.value?.setAttribute('pressed', ''); + } + else { + lightRef.value?.removeAttribute('pressed'); + } + const { primitive } = previewConfig.value; + previewConfig.value = { + primitive: primitive, + lightEnable: enabled, + }; + updateConfigToPreview(previewConfig.value); + if (save) { + shader_graph_1.GraphConfigMgr.Instance.saveDetails(exports.DefaultConfig.key, previewConfig.value); + } + } + function onPrimitiveChange(event) { + callPreview('resetCamera'); + const target = event.target; + const { lightEnable } = previewConfig.value; + previewConfig.value = { + primitive: target.value, + lightEnable: lightEnable, + }; + updateConfigToPreview(previewConfig.value); + shader_graph_1.GraphConfigMgr.Instance.saveDetails(exports.DefaultConfig.key, previewConfig.value); + } + return { + ...common, + previewCanvas, + previewConfig, + loading, + onClose, + onRefresh, + lightRef, + onLightChange, + onPrimitiveChange, + }; + }, + template: (0, common_1.commonTemplate)({ + css: 'preview', + header: ` + + + `, + section: ` + + +
+ + +
+
+ + +
+ `, + footer: ``, + }), +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGFuZWxzL3NoYWRlci1ncmFwaC9jb21wb25lbnRzL2Zsb2F0LXdpbmRvdy9wcmV2aWV3L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxtQ0FBeUM7QUFDekMsNENBQXVEO0FBRXZELDJEQUFzQztBQUN0QyxzQ0FBa0Y7QUFDbEYsMENBQXVFO0FBQ3ZFLDhEQUFtSDtBQUVuSCxvQ0FBNEM7QUFFNUMsTUFBTSxRQUFRLEdBQUcsNENBQTRDLENBQUM7QUFFakQsUUFBQSxhQUFhLEdBQXNCO0lBQzVDLEdBQUcsRUFBRSxTQUFTO0lBQ2QsR0FBRyxFQUFFO1FBQ0QsSUFBSSxFQUFFLHFDQUFxQztRQUMzQyxJQUFJLEVBQUUsSUFBSTtRQUNWLE1BQU0sRUFBRSxFQUFFO0tBQ2I7SUFDRCxJQUFJLEVBQUU7UUFDRixLQUFLLEVBQUUsaUNBQWlDO1FBQ3hDLEtBQUssRUFBRSxPQUFPO1FBQ2QsTUFBTSxFQUFFLE9BQU87UUFDZixRQUFRLEVBQUUsT0FBTztRQUNqQixTQUFTLEVBQUUsT0FBTztRQUNsQixXQUFXLEVBQUUsS0FBSztLQUNyQjtJQUNELFFBQVEsRUFBRTtRQUNOLEtBQUssRUFBRSxNQUFNO1FBQ2IsTUFBTSxFQUFFLEdBQUc7S0FDZDtJQUNELE1BQU0sRUFBRTtRQUNKLE9BQU8sRUFBRSxJQUFJO1FBQ2IsSUFBSSxFQUFFLElBQUk7UUFDVixpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLE1BQU0sRUFBRSxnQ0FBcUIsQ0FBQyxNQUFNO0tBQ3ZDO0lBQ0QsT0FBTyxFQUFFO1FBQ0wsU0FBUyxFQUFFLFFBQVE7UUFDbkIsV0FBVyxFQUFFLElBQUk7S0FDcEI7Q0FDSixDQUFDO0FBRUYsU0FBZ0IsU0FBUztJQUNyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQWEsQ0FB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QUFDO1lBQzNDLElBQUksSUFBSSxFQUFFO2dCQUNOLDZCQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxxQkFBYSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDL0U7UUFDTCxDQUFDO1FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUFrQjtZQUN6QyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7WUFDaEQsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDNUMsYUFBYSxDQUFDLEtBQUssR0FBRztnQkFDbEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUN2QixXQUFXLEVBQUUsV0FBVzthQUMzQixDQUFDO1lBQ0YscUJBQXFCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLDZCQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxxQkFBYSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEYsQ0FBQztRQUVELE9BQU87WUFDSCxHQUFHLE1BQU07WUFFVCxhQUFhO1lBQ2IsYUFBYTtZQUViLE9BQU87WUFFUCxPQUFPO1lBQ1AsU0FBUztZQUVULFFBQVE7WUFFUixhQUFhO1lBQ2IsaUJBQWlCO1NBQ3BCLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUSxFQUFFLElBQUEsdUJBQWMsRUFBQztRQUNyQixHQUFHLEVBQUUsU0FBUztRQUNkLE1BQU0sRUFBRTs7Ozs7OztTQU9QO1FBQ0QsT0FBTyxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQXVCUjtRQUNELE1BQU0sRUFBRSxFQUFFO0tBQ2IsQ0FBQztDQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lcmdlLCBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHJlZiB9IGZyb20gJ3Z1ZS9kaXN0L3Z1ZS5qcyc7XG5cbmltcG9ydCBCYXNlRmxvYXRXaW5kb3cgZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgeyBjb21tb25FbWl0cywgY29tbW9uTG9naWMsIGNvbW1vblByb3BzLCBjb21tb25UZW1wbGF0ZSB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBGbG9hdFdpbmRvd0NvbmZpZywgRmxvYXRXaW5kb3dEcmFnVGFyZ2V0IH0gZnJvbSAnLi4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgR3JhcGhEYXRhTWdyLCBNZXNzYWdlTWdyLCBHcmFwaENvbmZpZ01nciwgTWVzc2FnZVR5cGUsIEdyYXBoQXNzZXRNZ3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFkZXItZ3JhcGgnO1xuaW1wb3J0IHsgUHJldmlld0NvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbnRyaWJ1dGlvbnMvaW50ZXJuYWwnO1xuaW1wb3J0IHsgdmFsaWRhdGVQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgQk9YX01FU0ggPSAnMTI2M2Q3NGMtODE2Ny00OTI4LTkxYTYtNGUyNjcyNDExZjQ3QGE4MDRhJztcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRDb25maWc6IEZsb2F0V2luZG93Q29uZmlnID0ge1xuICAgIGtleTogJ3ByZXZpZXcnLFxuICAgIHRhYjoge1xuICAgICAgICBuYW1lOiAnaTE4bjpzaGFkZXItZ3JhcGgucHJldmlldy5tZW51X25hbWUnLFxuICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICBoZWlnaHQ6IDgwLFxuICAgIH0sXG4gICAgYmFzZToge1xuICAgICAgICB0aXRsZTogJ2kxOG46c2hhZGVyLWdyYXBoLnByZXZpZXcudGl0bGUnLFxuICAgICAgICB3aWR0aDogJzIyM3B4JyxcbiAgICAgICAgaGVpZ2h0OiAnMjI4cHgnLFxuICAgICAgICBtaW5XaWR0aDogJzIyM3B4JyxcbiAgICAgICAgbWluSGVpZ2h0OiAnMjI4cHgnLFxuICAgICAgICBkZWZhdWx0U2hvdzogZmFsc2UsXG4gICAgfSxcbiAgICBwb3NpdGlvbjoge1xuICAgICAgICByaWdodDogJzI4cHgnLFxuICAgICAgICBib3R0b206ICcwJyxcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgICByZXNpemVyOiB0cnVlLFxuICAgICAgICBkcmFnOiB0cnVlLFxuICAgICAgICBlbmFibGVBc3BlY3RSYXRpbzogdHJ1ZSxcbiAgICAgICAgdGFyZ2V0OiBGbG9hdFdpbmRvd0RyYWdUYXJnZXQuaGVhZGVyLFxuICAgIH0sXG4gICAgZGV0YWlsczoge1xuICAgICAgICBwcmltaXRpdmU6IEJPWF9NRVNILFxuICAgICAgICBsaWdodEVuYWJsZTogdHJ1ZSxcbiAgICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZygpIHtcbiAgICBjb25zdCBuZXdDb25maWcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KERlZmF1bHRDb25maWcpKTtcbiAgICBjb25zdCBjb25maWcgPSBHcmFwaENvbmZpZ01nci5JbnN0YW5jZS5nZXRGbG9hdGluZ1dpbmRvd0NvbmZpZ0J5TmFtZShEZWZhdWx0Q29uZmlnLmtleSk7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgICBuZXdDb25maWcuZGV0YWlscyA9IG1lcmdlKHt9LCBuZXdDb25maWcuZGV0YWlscywgY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXBvbmVudCA9IGRlZmluZUNvbXBvbmVudCh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBCYXNlRmxvYXRXaW5kb3csXG4gICAgfSxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIC4uLmNvbW1vblByb3BzLFxuICAgIH0sXG5cbiAgICBlbWl0czogWy4uLmNvbW1vbkVtaXRzXSxcblxuICAgIHNldHVwKHByb3BzLCBjdHgpIHtcbiAgICAgICAgY29uc3QgY29tbW9uID0gY29tbW9uTG9naWMocHJvcHMsIGN0eCk7XG4gICAgICAgIGNvbnN0IGdsUHJldmlldyA9IHJlZigpO1xuICAgICAgICBjb25zdCBpbml0UHJldmlld0RvbmUgPSByZWYoZmFsc2UpO1xuICAgICAgICBjb25zdCBpbml0R0wgPSByZWYoZmFsc2UpO1xuICAgICAgICBjb25zdCBwcmV2aWV3RGlydHkgPSByZWYodHJ1ZSk7XG4gICAgICAgIGNvbnN0IGxvYWRpbmcgPSByZWYodHJ1ZSk7XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbklkID0gcmVmKC0xKTtcbiAgICAgICAgY29uc3QgbGlnaHRSZWYgPSByZWY8SFRNTEVsZW1lbnQ+KCk7XG4gICAgICAgIGNvbnN0IHByZXZpZXdDYW52YXMgPSByZWYoKTtcbiAgICAgICAgY29uc3QgcHJldmlld0NvbmZpZyA9IHJlZjxQcmV2aWV3Q29uZmlnPih7XG4gICAgICAgICAgICBwcmltaXRpdmU6ICcnLFxuICAgICAgICAgICAgbGlnaHRFbmFibGU6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjYWxsUHJldmlldyhmdW5jTmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICAgICAgaWYgKCFpbml0UHJldmlld0RvbmUudmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ3NjZW5lJywgJ2NhbGwtcHJldmlldy1mdW5jdGlvbicsICdzaGFkZXItZ3JhcGgtcHJldmlldycsIGZ1bmNOYW1lLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIHByZXZpZXdEaXJ0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVDb25maWdUb1ByZXZpZXcoY29uZmlnOiBQcmV2aWV3Q29uZmlnKSB7XG4gICAgICAgICAgICBhd2FpdCBjYWxsUHJldmlldygnc2V0TGlnaHRFbmFibGUnLCBjb25maWcubGlnaHRFbmFibGUpO1xuICAgICAgICAgICAgYXdhaXQgY2FsbFByZXZpZXcoJ3NldFByaW1pdGl2ZScsIGNvbmZpZy5wcmltaXRpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTWF0ZXJpYWwoKSB7XG4gICAgICAgICAgICBpZiAoIWluaXRQcmV2aWV3RG9uZS52YWx1ZSB8fCAhY29tbW9uLmlzU2hvdygpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgTWVzc2FnZU1nci5JbnN0YW5jZS5jYWxsU2NlbmVNZXRob2QoJ3VwZGF0ZU1hdGVyaWFsJywgW0dyYXBoRGF0YU1nci5JbnN0YW5jZS5nZXRDdXJyZW50R3JhcGhEYXRhKCldKTtcbiAgICAgICAgICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHByZXZpZXdEaXJ0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhc3BlY3RSYXRpbyA9IC0xO1xuICAgICAgICBhc3luYyBmdW5jdGlvbiByZWZyZXNoUHJldmlldygpIHtcbiAgICAgICAgICAgIGlmIChwcmV2aWV3RGlydHkudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBwcmV2aWV3RGlydHkudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IHByZXZpZXdDYW52YXMudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKCFjYW52YXMpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gY2FudmFzLmNsaWVudFdpZHRoID09PSAwID8gY2FudmFzLnBhcmVudE5vZGUuY2xpZW50V2lkdGggOiBjYW52YXMuY2xpZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gd2lkdGg7XG5cbiAgICAgICAgICAgICAgICAvLyDnrYnmr5TnvKnmlL5cbiAgICAgICAgICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSB3aWR0aCB8fCAhaW5pdEdMLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRHTC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGdsUHJldmlldy52YWx1ZS5pbml0R0woY2FudmFzLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGdsUHJldmlldy52YWx1ZS5yZXNpemVHTCh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdsUHJldmlldy52YWx1ZS5xdWVyeVByZXZpZXdEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGdsUHJldmlldy52YWx1ZS5kcmF3R0woZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbklkLnZhbHVlKTtcbiAgICAgICAgICAgIGFuaW1hdGlvbklkLnZhbHVlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZWZyZXNoUHJldmlldygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBvbk1vdXNlRG93bk9uQ2FudmFzKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICBhd2FpdCBjYWxsUHJldmlldygnb25Nb3VzZURvd24nLCB7IHg6IGV2ZW50LngsIHk6IGV2ZW50LnksIGJ1dHRvbjogZXZlbnQuYnV0dG9uIH0pO1xuXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBtb3VzZW1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjYWxsUHJldmlldygnb25Nb3VzZU1vdmUnLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vdmVtZW50WDogZXZlbnQubW92ZW1lbnRYLFxuICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudFk6IGV2ZW50Lm1vdmVtZW50WSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gbW91c2V1cChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNhbGxQcmV2aWV3KCdvbk1vdXNlVXAnLCB7XG4gICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50LnksXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmUpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZXVwKTtcblxuICAgICAgICAgICAgICAgIHByZXZpZXdEaXJ0eS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW91c2Vtb3ZlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZXVwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIG9uTW91c2VXaGVlbE9uQ2FudmFzKGV2ZW50OiBXaGVlbEV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IGV2ZW50LmRlbHRhWSAqIDAuMDE7XG4gICAgICAgICAgICBhd2FpdCBjYWxsUHJldmlldygnc2V0Wm9vbScsIHNjYWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXJUb0NhbnZhcygpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IHByZXZpZXdDYW52YXMudmFsdWU7XG4gICAgICAgICAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd25PbkNhbnZhcyk7XG4gICAgICAgICAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V3aGVlbCcsIG9uTW91c2VXaGVlbE9uQ2FudmFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJUb0NhbnZhcygpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IHByZXZpZXdDYW52YXMudmFsdWU7XG4gICAgICAgICAgICBjYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd25PbkNhbnZhcyk7XG4gICAgICAgICAgICBjYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V3aGVlbCcsIG9uTW91c2VXaGVlbE9uQ2FudmFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9uU2l6ZUNoYW5nZWREZWJvdW5jZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbW1vbi5pc1Nob3coKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBpbml0UHJldmlldygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHByZXZpZXdEaXJ0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgNTApO1xuXG4gICAgICAgIGNvbW1vbi5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICAgICAgb25TaXplQ2hhbmdlZERlYm91bmNlZCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG9uUHJldmlld0NoYW5nZURlYm91bmNlZCA9IGRlYm91bmNlKGFzeW5jIChkaXJ0eTogYm9vbGVhbiwgdHlwZT86IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb21tb24uaXNTaG93KCkpIHJldHVybjtcblxuICAgICAgICAgICAgaWYgKGRpcnR5ICYmIHR5cGUgIT09ICdwb3NpdGlvbi1jaGFuZ2VkJykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGluaXRQcmV2aWV3KCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlTWF0ZXJpYWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgNTApO1xuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIG9uSW5pdFByZXZpZXcoKSB7XG4gICAgICAgICAgICBpZiAoIWNvbW1vbi5pc1Nob3coKSB8fCAhR3JhcGhBc3NldE1nci5JbnN0YW5jZS51dWlkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGF3YWl0IGluaXRQcmV2aWV3KCk7XG4gICAgICAgICAgICBjb25zdCB7IHByaW1pdGl2ZSwgbGlnaHRFbmFibGUgfSA9IHByb3BzLmNvbmZpZy5kZXRhaWxzITtcbiAgICAgICAgICAgIGlmIChwcmV2aWV3Q29uZmlnLnZhbHVlLnByaW1pdGl2ZSAhPT0gcHJpbWl0aXZlIHx8XG4gICAgICAgICAgICAgICAgcHJldmlld0NvbmZpZy52YWx1ZS5saWdodEVuYWJsZSAhPT0gbGlnaHRFbmFibGUpIHtcbiAgICAgICAgICAgICAgICBwcmV2aWV3Q29uZmlnLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmU6IHByaW1pdGl2ZSB8fCBCT1hfTUVTSCxcbiAgICAgICAgICAgICAgICAgICAgbGlnaHRFbmFibGU6IGxpZ2h0RW5hYmxlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXBwbHlQcmV2aWV3Q29uZmlnVG9VSSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdXBkYXRlTWF0ZXJpYWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UucmVnaXN0ZXIoTWVzc2FnZVR5cGUuU2NlbmVSZWFkeSwgb25Jbml0UHJldmlldyk7XG4gICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UucmVnaXN0ZXIoTWVzc2FnZVR5cGUuU2V0R3JhcGhEYXRhVG9Gb3JnZSwgb25Jbml0UHJldmlldyk7XG4gICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UucmVnaXN0ZXIoTWVzc2FnZVR5cGUuRGlydHlDaGFuZ2VkLCBvblByZXZpZXdDaGFuZ2VEZWJvdW5jZWQpO1xuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGluaXRQcmV2aWV3KGZvcmNlID0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmICghaW5pdFByZXZpZXdEb25lLnZhbHVlIHx8IGZvcmNlKSB7XG4gICAgICAgICAgICAgICAgaW5pdFByZXZpZXdEb25lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhd2FpdCBNZXNzYWdlTWdyLkluc3RhbmNlLmNhbGxTY2VuZU1ldGhvZCgnaW5pdFByZXZpZXcnLCBbcHJldmlld0NvbmZpZy52YWx1ZV0pO1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICBjb25zdCBHbFByZXZpZXcgPSBFZGl0b3IuX01vZHVsZS5yZXF1aXJlKCdQcmV2aWV3RXh0ZW5kcycpLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgZ2xQcmV2aWV3LnZhbHVlID0gbmV3IEdsUHJldmlldygnc2hhZGVyLWdyYXBoLXByZXZpZXcnLCAncXVlcnktc2hhZGVyLWdyYXBoLXByZXZpZXctZGF0YScpO1xuICAgICAgICAgICAgICAgIGdsUHJldmlldy52YWx1ZS5pbml0KHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHByZXZpZXdDYW52YXMudmFsdWUuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogcHJldmlld0NhbnZhcy52YWx1ZS5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lclRvQ2FudmFzKCk7XG4gICAgICAgICAgICAgICAgcmVmcmVzaFByZXZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbW1vbi5vblNob3cgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgTWVzc2FnZU1nci5JbnN0YW5jZS5jaGVja1NjZW5lUmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG9uSW5pdFByZXZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgIGluaXRQcmV2aWV3RG9uZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaW5pdEdMLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyVG9DYW52YXMoKTtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbklkLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbW1vbkhpZGUgPSBjb21tb24uaGlkZTtcbiAgICAgICAgY29tbW9uLmhpZGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb21tb25IaWRlKCk7XG4gICAgICAgICAgICByZXNldCgpO1xuICAgICAgICAgICAgYXdhaXQgR3JhcGhDb25maWdNZ3IuSW5zdGFuY2UuYXV0b1NhdmUoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjb21tb25TaG93ID0gY29tbW9uLnNob3c7XG4gICAgICAgIGNvbW1vbi5zaG93ID0gYXN5bmMgKHBvc2l0aW9uPzogeyB0b3A/OiBzdHJpbmc7IHJpZ2h0Pzogc3RyaW5nOyBsZWZ0Pzogc3RyaW5nOyBib3R0b20/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aW9uKHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IEdyYXBoQ29uZmlnTWdyLkluc3RhbmNlLmdldEZsb2F0aW5nV2luZG93Q29uZmlnQnlOYW1lKERlZmF1bHRDb25maWcua2V5KTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHZhbGlkYXRlUG9zaXRpb24oY29uZmlnPy5wb3NpdGlvbikgPyBjb25maWc/LnBvc2l0aW9uIDogRGVmYXVsdENvbmZpZy5wb3NpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbW1vblNob3cocG9zaXRpb24pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIG9uQ2xvc2UoKSB7XG4gICAgICAgICAgICBjb21tb24uaGlkZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gb25SZWZyZXNoKCkge1xuICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgICAgIGluaXRHTC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgYXdhaXQgaW5pdFByZXZpZXcodHJ1ZSk7XG4gICAgICAgICAgICBhd2FpdCB1cGRhdGVNYXRlcmlhbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlQcmV2aWV3Q29uZmlnVG9VSSgpIHtcbiAgICAgICAgICAgIG9uTGlnaHRDaGFuZ2UocHJldmlld0NvbmZpZy52YWx1ZS5saWdodEVuYWJsZSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25MaWdodENoYW5nZShlbmFibGVkOiBib29sZWFuLCBzYXZlID0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBsaWdodFJlZi52YWx1ZT8uc2V0QXR0cmlidXRlKCdwcmVzc2VkJywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsaWdodFJlZi52YWx1ZT8ucmVtb3ZlQXR0cmlidXRlKCdwcmVzc2VkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHsgcHJpbWl0aXZlIH0gPSBwcmV2aWV3Q29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgcHJldmlld0NvbmZpZy52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICBwcmltaXRpdmU6IHByaW1pdGl2ZSxcbiAgICAgICAgICAgICAgICBsaWdodEVuYWJsZTogZW5hYmxlZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB1cGRhdGVDb25maWdUb1ByZXZpZXcocHJldmlld0NvbmZpZy52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoc2F2ZSkge1xuICAgICAgICAgICAgICAgIEdyYXBoQ29uZmlnTWdyLkluc3RhbmNlLnNhdmVEZXRhaWxzKERlZmF1bHRDb25maWcua2V5LCBwcmV2aWV3Q29uZmlnLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uUHJpbWl0aXZlQ2hhbmdlKGV2ZW50OiBDdXN0b21FdmVudCkge1xuICAgICAgICAgICAgY2FsbFByZXZpZXcoJ3Jlc2V0Q2FtZXJhJyk7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHsgbGlnaHRFbmFibGUgfSA9IHByZXZpZXdDb25maWcudmFsdWU7XG4gICAgICAgICAgICBwcmV2aWV3Q29uZmlnLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgIHByaW1pdGl2ZTogdGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgIGxpZ2h0RW5hYmxlOiBsaWdodEVuYWJsZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB1cGRhdGVDb25maWdUb1ByZXZpZXcocHJldmlld0NvbmZpZy52YWx1ZSk7XG4gICAgICAgICAgICBHcmFwaENvbmZpZ01nci5JbnN0YW5jZS5zYXZlRGV0YWlscyhEZWZhdWx0Q29uZmlnLmtleSwgcHJldmlld0NvbmZpZy52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29tbW9uLFxuXG4gICAgICAgICAgICBwcmV2aWV3Q2FudmFzLFxuICAgICAgICAgICAgcHJldmlld0NvbmZpZyxcblxuICAgICAgICAgICAgbG9hZGluZyxcblxuICAgICAgICAgICAgb25DbG9zZSxcbiAgICAgICAgICAgIG9uUmVmcmVzaCxcblxuICAgICAgICAgICAgbGlnaHRSZWYsXG5cbiAgICAgICAgICAgIG9uTGlnaHRDaGFuZ2UsXG4gICAgICAgICAgICBvblByaW1pdGl2ZUNoYW5nZSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgdGVtcGxhdGU6IGNvbW1vblRlbXBsYXRlKHtcbiAgICAgICAgY3NzOiAncHJldmlldycsXG4gICAgICAgIGhlYWRlcjogYFxuPHVpLWxhYmVsIGNsYXNzPVwidGl0bGUtbGFiZWxcIiB2YWx1ZT1cImkxOG46c2hhZGVyLWdyYXBoLnByZXZpZXcudGl0bGVcIj48L3VpLWxhYmVsPlxuPHVpLWljb24gY2xhc3M9XCJjbG9zZVwiIHRyYW5zcGFyZW50XG4gIHRvb2x0aXA9XCJpMThuOnNoYWRlci1ncmFwaC5wcmV2aWV3LmNsb3NlLnRvb2x0aXBcIlxuICB2YWx1ZT1cImNvbGxhcHNlLXJpZ2h0XCJcbiAgQGNsaWNrPVwib25DbG9zZVwiXG4+PC91aS1pY29uPlxuICAgICAgICBgLFxuICAgICAgICBzZWN0aW9uOiBgXG4gICAgICAgICAgICA8Y2FudmFzIHJlZj1cInByZXZpZXdDYW52YXNcIj48L2NhbnZhcz5cbiAgICAgICAgICAgIDx1aS1sb2FkaW5nIGNsYXNzPVwibG9hZGluZ1wiIHYtc2hvdz1cImxvYWRpbmdcIj48L3VpLWxvYWRpbmc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHNcIj5cbiAgICAgICAgICAgICAgPHVpLWljb24gY2xhc3M9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgcmVmPVwibGlnaHRSZWZcIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwic3BvdC1saWdodFwiXG4gICAgICAgICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25MaWdodENoYW5nZShwcmV2aWV3Q29uZmlnLmxpZ2h0RW5hYmxlPSFwcmV2aWV3Q29uZmlnLmxpZ2h0RW5hYmxlKVwiXG4gICAgICAgICAgICAgID48L3VpLWljb24+XG4gICAgICAgICAgICAgIDx1aS1pY29uXG4gICAgICAgICAgICAgICAgdHlwZT1cImljb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicmVmcmVzaFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJyZWZyZXNoXCJcbiAgICAgICAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblJlZnJlc2hcIiBcbiAgICAgICAgICAgICAgPjwvdWktaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaW1pdGl2ZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDx1aS1sYWJlbCBzbG90PVwibGFiZWxcIiB2YWx1ZT1cImkxOG46c2hhZGVyLWdyYXBoLnByZXZpZXcubWVzaFwiPjwvdWktbGFiZWw+XG4gICAgICAgICAgICAgICAgPHVpLWFzc2V0IHNsb3Q9XCJjb250ZW50XCIgZHJvcHBhYmxlPVwiY2MuTWVzaFwiIFxuICAgICAgICAgICAgICAgICAgICA6dmFsdWU9XCJwcmV2aWV3Q29uZmlnLnByaW1pdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgIEBjaGFuZ2Uuc3RvcD1cIm9uUHJpbWl0aXZlQ2hhbmdlXCJcbiAgICAgICAgICAgICAgICA+PC91aS1hc3NldD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICBgLFxuICAgICAgICBmb290ZXI6IGBgLFxuICAgIH0pLFxufSk7XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/components/float-window/utils.js b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/utils.js new file mode 100644 index 0000000..ce26435 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/components/float-window/utils.js @@ -0,0 +1,102 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.convertMenuData = exports.filterMenuByKeyword = exports.getTitleBarHeight = exports.getBoundingClientRect = exports.validatePosition = void 0; +function validatePosition(position) { + return !(!position || ((position.left !== undefined && position.left === '') || + (position.right !== undefined && position.right === '') || + (position.top !== undefined && position.top === '') || + (position.bottom !== undefined && position.bottom === ''))); +} +exports.validatePosition = validatePosition; +function getBoundingClientRect(target) { + if (document.body.getAttribute('name') === 'sub') { + return { + left: target.clientLeft, + right: target.clientLeft + target.clientWidth, + top: target.clientTop, + bottom: target.clientTop + target.clientHeight, + width: target.clientWidth, + height: target.clientHeight, + }; + } + return target.getBoundingClientRect(); +} +exports.getBoundingClientRect = getBoundingClientRect; +/** + * 获取 title bar 的高度 + */ +function getTitleBarHeight() { + let titleBarHeight = 25; // 系统 titleBar 的高度 + if (document.body.getAttribute('name') === 'sub') { + // 窗口 title 的高度 + titleBarHeight += 50; + } + return titleBarHeight; +} +exports.getTitleBarHeight = getTitleBarHeight; +function filterMenuByKeyword(tree, keyword) { + const result = { + firstSelect: null, + filterTree: [], + }; + const keywordLowerCase = keyword.toLowerCase(); + function filterRecursive(menuItems) { + for (const item of menuItems) { + item.show = false; + const text = item.detail.value.toLowerCase(); + if (item.children.length === 0 && + (text.startsWith(keywordLowerCase) || text.includes(keywordLowerCase))) { + item.show = true; + let target = item.parent; + while (target) { + if (target.show) + break; + target.show = true; + target = target.parent; + } + } + if (item.children && item.children.length > 0) { + filterRecursive(item.children); + } + } + } + filterRecursive(tree); + const list = []; + function filterItems(menuItems) { + menuItems = menuItems.filter((item) => { + if (item.show && item.children.length === 0) { + list.push(item); + } + return item.show; + }); + for (const menuItem of menuItems) { + menuItem.children = filterItems(menuItem.children); + } + return menuItems; + } + return { + filterTree: filterItems(tree), + firstSelect: list[0], + }; +} +exports.filterMenuByKeyword = filterMenuByKeyword; +function convertMenuData(menuData, fold, parent) { + return menuData.map((item) => { + const submenu = item.submenu || []; + const itemMenu = { + parent: parent || null, + detail: { + addOptions: item.addOptions, + value: item.label, + }, + show: true, + fold: fold, + showArrow: submenu.length > 0, + children: [], + }; + itemMenu.children = convertMenuData(submenu, fold, itemMenu); + return itemMenu; + }); +} +exports.convertMenuData = convertMenuData; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcGFuZWxzL3NoYWRlci1ncmFwaC9jb21wb25lbnRzL2Zsb2F0LXdpbmRvdy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFjQSxTQUFnQixnQkFBZ0IsQ0FBQyxRQUE0RTtJQUN6RyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUNsQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3JELENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDdkQsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUNuRCxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLENBQzVELENBQUMsQ0FBQztBQUNQLENBQUM7QUFQRCw0Q0FPQztBQUVELFNBQWdCLHFCQUFxQixDQUFDLE1BQW1CO0lBQ3JELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQzlDLE9BQU87WUFDSCxJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDdkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVc7WUFDN0MsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQ3JCLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZO1lBQzlDLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVztZQUN6QixNQUFNLEVBQUUsTUFBTSxDQUFDLFlBQVk7U0FDOUIsQ0FBQztLQUNMO0lBQ0QsT0FBTyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztBQUMxQyxDQUFDO0FBWkQsc0RBWUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQjtJQUM3QixJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQSxrQkFBa0I7SUFDMUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLEVBQUU7UUFDOUMsZUFBZTtRQUNmLGNBQWMsSUFBSSxFQUFFLENBQUM7S0FDeEI7SUFDRCxPQUFPLGNBQWMsQ0FBQztBQUMxQixDQUFDO0FBUEQsOENBT0M7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxJQUFnQixFQUFFLE9BQWU7SUFDakUsTUFBTSxNQUFNLEdBQTZEO1FBQ3JFLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFVBQVUsRUFBRSxFQUFFO0tBQ2pCLENBQUM7SUFFRixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQyxTQUFTLGVBQWUsQ0FBQyxTQUFxQjtRQUMxQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUVsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQzFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFO2dCQUN4RSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDekIsT0FBTyxNQUFNLEVBQUU7b0JBQ1gsSUFBSSxNQUFNLENBQUMsSUFBSTt3QkFBRSxNQUFNO29CQUN2QixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7aUJBQzFCO2FBQ0o7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2xDO1NBQ0o7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXRCLE1BQU0sSUFBSSxHQUFlLEVBQUUsQ0FBQztJQUM1QixTQUFTLFdBQVcsQ0FBQyxTQUFxQjtRQUN0QyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQWMsRUFBRSxFQUFFO1lBQzVDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkI7WUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDSCxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRTtZQUM5QixRQUFRLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEQ7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsT0FBTztRQUNILFVBQVUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3ZCLENBQUM7QUFDTixDQUFDO0FBaERELGtEQWdEQztBQUVELFNBQWdCLGVBQWUsQ0FBQyxRQUE0QixFQUFFLElBQWEsRUFBRSxNQUFpQjtJQUMxRixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFzQixFQUFFLEVBQUU7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQWE7WUFDdkIsTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJO1lBQ3RCLE1BQU0sRUFBRTtnQkFDSixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVc7Z0JBQzVCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBTTthQUNyQjtZQUNELElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzdCLFFBQVEsRUFBRSxFQUFFO1NBQ2YsQ0FBQztRQUNGLFFBQVEsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBakJELDBDQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoRWRpdG9yQWRkT3B0aW9ucywgTWVudVRlbXBsYXRlSXRlbSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYWRlci1ncmFwaCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZURhdGEge1xuICAgIHBhcmVudDogVHJlZURhdGEgfCBudWxsLFxuICAgIGRldGFpbDoge1xuICAgICAgICBhZGRPcHRpb25zOiBHcmFwaEVkaXRvckFkZE9wdGlvbnMsXG4gICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgfSxcbiAgICBzaG93OiBib29sZWFuLFxuICAgIGZvbGQ6IGJvb2xlYW4sXG4gICAgc2hvd0Fycm93OiBib29sZWFuLFxuICAgIGNoaWxkcmVuOiBUcmVlRGF0YVtdLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQb3NpdGlvbihwb3NpdGlvbj86IHsgdG9wPzogc3RyaW5nOyByaWdodD86IHN0cmluZzsgbGVmdD86IHN0cmluZzsgYm90dG9tPzogc3RyaW5nOyB9KSB7XG4gICAgcmV0dXJuICEoIXBvc2l0aW9uIHx8IChcbiAgICAgICAgKHBvc2l0aW9uLmxlZnQgIT09IHVuZGVmaW5lZCAmJiBwb3NpdGlvbi5sZWZ0ID09PSAnJykgfHxcbiAgICAgICAgKHBvc2l0aW9uLnJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgcG9zaXRpb24ucmlnaHQgPT09ICcnKSB8fFxuICAgICAgICAocG9zaXRpb24udG9wICE9PSB1bmRlZmluZWQgJiYgcG9zaXRpb24udG9wID09PSAnJykgfHxcbiAgICAgICAgKHBvc2l0aW9uLmJvdHRvbSAhPT0gdW5kZWZpbmVkICYmIHBvc2l0aW9uLmJvdHRvbSA9PT0gJycpXG4gICAgKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QodGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuICAgIGlmIChkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnbmFtZScpID09PSAnc3ViJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVmdDogdGFyZ2V0LmNsaWVudExlZnQsXG4gICAgICAgICAgICByaWdodDogdGFyZ2V0LmNsaWVudExlZnQgKyB0YXJnZXQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICB0b3A6IHRhcmdldC5jbGllbnRUb3AsXG4gICAgICAgICAgICBib3R0b206IHRhcmdldC5jbGllbnRUb3AgKyB0YXJnZXQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGg6IHRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGFyZ2V0LmNsaWVudEhlaWdodCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbn1cblxuLyoqXG4gKiDojrflj5YgdGl0bGUgYmFyIOeahOmrmOW6plxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGl0bGVCYXJIZWlnaHQoKSB7XG4gICAgbGV0IHRpdGxlQmFySGVpZ2h0ID0gMjU7Ly8g57O757ufIHRpdGxlQmFyIOeahOmrmOW6plxuICAgIGlmIChkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnbmFtZScpID09PSAnc3ViJykge1xuICAgICAgICAvLyDnqpflj6MgdGl0bGUg55qE6auY5bqmXG4gICAgICAgIHRpdGxlQmFySGVpZ2h0ICs9IDUwO1xuICAgIH1cbiAgICByZXR1cm4gdGl0bGVCYXJIZWlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJNZW51QnlLZXl3b3JkKHRyZWU6IFRyZWVEYXRhW10sIGtleXdvcmQ6IHN0cmluZyk6IHsgZmlyc3RTZWxlY3Q6IFRyZWVEYXRhIHwgbnVsbCwgZmlsdGVyVHJlZTogVHJlZURhdGFbXSB9IHtcbiAgICBjb25zdCByZXN1bHQ6IHsgZmlyc3RTZWxlY3Q6IFRyZWVEYXRhIHwgbnVsbCwgZmlsdGVyVHJlZTogVHJlZURhdGFbXSB9ID0ge1xuICAgICAgICBmaXJzdFNlbGVjdDogbnVsbCxcbiAgICAgICAgZmlsdGVyVHJlZTogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IGtleXdvcmRMb3dlckNhc2UgPSBrZXl3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgZnVuY3Rpb24gZmlsdGVyUmVjdXJzaXZlKG1lbnVJdGVtczogVHJlZURhdGFbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWVudUl0ZW1zKSB7XG4gICAgICAgICAgICBpdGVtLnNob3cgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGl0ZW0uZGV0YWlsLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAodGV4dC5zdGFydHNXaXRoKGtleXdvcmRMb3dlckNhc2UpIHx8IHRleHQuaW5jbHVkZXMoa2V5d29yZExvd2VyQ2FzZSkpKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LnNob3cpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2hvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyUmVjdXJzaXZlKGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmlsdGVyUmVjdXJzaXZlKHRyZWUpO1xuXG4gICAgY29uc3QgbGlzdDogVHJlZURhdGFbXSA9IFtdO1xuICAgIGZ1bmN0aW9uIGZpbHRlckl0ZW1zKG1lbnVJdGVtczogVHJlZURhdGFbXSkge1xuICAgICAgICBtZW51SXRlbXMgPSBtZW51SXRlbXMuZmlsdGVyKChpdGVtOiBUcmVlRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uc2hvdyAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtLnNob3c7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IG1lbnVJdGVtIG9mIG1lbnVJdGVtcykge1xuICAgICAgICAgICAgbWVudUl0ZW0uY2hpbGRyZW4gPSBmaWx0ZXJJdGVtcyhtZW51SXRlbS5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJUcmVlOiBmaWx0ZXJJdGVtcyh0cmVlKSxcbiAgICAgICAgZmlyc3RTZWxlY3Q6IGxpc3RbMF0sXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRNZW51RGF0YShtZW51RGF0YTogTWVudVRlbXBsYXRlSXRlbVtdLCBmb2xkOiBib29sZWFuLCBwYXJlbnQ/OiBUcmVlRGF0YSk6IFRyZWVEYXRhW10ge1xuICAgIHJldHVybiBtZW51RGF0YS5tYXAoKGl0ZW06IE1lbnVUZW1wbGF0ZUl0ZW0pID0+IHtcbiAgICAgICAgY29uc3Qgc3VibWVudSA9IGl0ZW0uc3VibWVudSB8fCBbXTtcbiAgICAgICAgY29uc3QgaXRlbU1lbnU6IFRyZWVEYXRhID0ge1xuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnQgfHwgbnVsbCxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGFkZE9wdGlvbnM6IGl0ZW0uYWRkT3B0aW9ucyEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0ubGFiZWwhLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICBmb2xkOiBmb2xkLFxuICAgICAgICAgICAgc2hvd0Fycm93OiBzdWJtZW51Lmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIH07XG4gICAgICAgIGl0ZW1NZW51LmNoaWxkcmVuID0gY29udmVydE1lbnVEYXRhKHN1Ym1lbnUsIGZvbGQsIGl0ZW1NZW51KTtcbiAgICAgICAgcmV0dXJuIGl0ZW1NZW51O1xuICAgIH0pO1xufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/float-windows.js b/extensions/shader-graph/dist/panels/shader-graph/float-windows.js new file mode 100644 index 0000000..85ad789 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/float-windows.js @@ -0,0 +1,104 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.floatWindowsLogic = void 0; +const vue_js_1 = require("vue/dist/vue.js"); +const float_window_1 = require("./components/float-window"); +const shader_graph_1 = require("../../shader-graph"); +const vue_1 = require("vue"); +const floatWindowsLogic = (props, ctx) => { + const tabRefs = (0, vue_js_1.ref)([]); + const floatWindowRefs = (0, vue_js_1.ref)([]); + const pressTabRefs = new Map(); + const floatWindowMap = (0, float_window_1.getFloatWindowMap)(); + const floatWindowConfigList = (0, vue_js_1.ref)([]); + function onFloatWindowConfigChanged() { + (0, float_window_1.updateFloatWindowConfigs)().then((configs) => { + floatWindowConfigList.value = configs; + }); + } + shader_graph_1.MessageMgr.Instance.register(shader_graph_1.MessageType.AssetLoaded, () => { + initFloatWindowConfigs(); + }); + (0, vue_js_1.onMounted)(() => { + shader_graph_1.MessageMgr.Instance.register([ + shader_graph_1.MessageType.FloatWindowConfigChanged, + ], onFloatWindowConfigChanged); + }); + (0, vue_js_1.onUnmounted)(() => { + shader_graph_1.MessageMgr.Instance.unregister([ + shader_graph_1.MessageType.FloatWindowConfigChanged, + ], onFloatWindowConfigChanged); + }); + function getFloatWindowByKey(key) { + return floatWindowMap.get(key) ?? undefined; + } + function initFloatWindowConfigs() { + (0, float_window_1.updateFloatWindowConfigs)().then((configs) => { + floatWindowConfigList.value = configs; + (0, vue_1.nextTick)(() => { + floatWindowRefs.value.forEach((floatWindowRef) => { + shader_graph_1.GraphConfigMgr.Instance.addFloatWindow(floatWindowRef.config.key, floatWindowRef.$el); + }); + floatWindowConfigList.value.forEach((config, index) => { + if (config.base.defaultShow || config.details?.show) { + pressTab(tabRefs.value[index], floatWindowRefs.value[index], config.key); + } + else { + releaseTab(floatWindowRefs.value[index]); + } + }); + }); + }); + } + function pressTab(tabRef, floatWindowRef, key) { + if (tabRef && floatWindowRef) { + floatWindowRef.show(); + pressTabRefs.set(key, tabRef); + tabRef.setAttribute('pressed', ''); + } + } + function releaseTab(floatWindowRef) { + floatWindowRef.hide(); + onHideFloatWindow(floatWindowRef.config.key); + } + ///// 右边 tab 菜单 + function togglePressTab(key, index) { + // 当前按下的 tab + const tabRef = tabRefs.value[index]; + const floatWindowRef = floatWindowRefs.value[index]; + if (tabRef && floatWindowRef) { + if (tabRef.getAttribute('pressed') !== null) { + releaseTab(floatWindowRef); + } + else { + pressTab(tabRef, floatWindowRef, key); + } + } + } + function getStyle(tab) { + const style = {}; + if (tab.height !== undefined) { + style.height = tab.height + 'px'; + } + return style; + } + function onHideFloatWindow(key) { + const tabRef = pressTabRefs.get(key); + if (tabRef) { + tabRef.removeAttribute('pressed'); + pressTabRefs.delete(key); + } + } + ///// + return { + tabRefs, + floatWindowRefs, + floatWindowConfigList, + onHideFloatWindow, + togglePressTab, + getFloatWindowByKey, + getStyle, + }; +}; +exports.floatWindowsLogic = floatWindowsLogic; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXQtd2luZG93cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYW5lbHMvc2hhZGVyLWdyYXBoL2Zsb2F0LXdpbmRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNENBQThEO0FBRTlELDREQU1tQztBQUNuQyxxREFBNkU7QUFDN0UsNkJBQStCO0FBRXhCLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFVLEVBQUUsR0FBcUMsRUFBRSxFQUFFO0lBQ25GLE1BQU0sT0FBTyxHQUFHLElBQUEsWUFBRyxFQUFnQixFQUFFLENBQUMsQ0FBQztJQUN2QyxNQUFNLGVBQWUsR0FBRyxJQUFBLFlBQUcsRUFBdUIsRUFBRSxDQUFDLENBQUM7SUFDdEQsTUFBTSxZQUFZLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDekQsTUFBTSxjQUFjLEdBQUcsSUFBQSxnQ0FBaUIsR0FBRSxDQUFDO0lBQzNDLE1BQU0scUJBQXFCLEdBQUcsSUFBQSxZQUFHLEVBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBRTNELFNBQVMsMEJBQTBCO1FBQy9CLElBQUEsdUNBQXdCLEdBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUE0QixFQUFFLEVBQUU7WUFDN0QscUJBQXFCLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx5QkFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsMEJBQVcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3ZELHNCQUFzQixFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFBLGtCQUFTLEVBQUMsR0FBRyxFQUFFO1FBQ1gseUJBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3pCLDBCQUFXLENBQUMsd0JBQXdCO1NBQ3ZDLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUEsb0JBQVcsRUFBQyxHQUFHLEVBQUU7UUFDYix5QkFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDM0IsMEJBQVcsQ0FBQyx3QkFBd0I7U0FDdkMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxtQkFBbUIsQ0FBQyxHQUFXO1FBQ3BDLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDaEQsQ0FBQztJQUVELFNBQVMsc0JBQXNCO1FBQzNCLElBQUEsdUNBQXdCLEdBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUE0QixFQUFFLEVBQUU7WUFDN0QscUJBQXFCLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztZQUV0QyxJQUFBLGNBQVEsRUFBQyxHQUFHLEVBQUU7Z0JBQ1YsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtvQkFDN0MsNkJBQWMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUYsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gscUJBQXFCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDbEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTt3QkFDakQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzVFO3lCQUFNO3dCQUNILFVBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7cUJBQzVDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLFFBQVEsQ0FBQyxNQUFtQixFQUFFLGNBQWtDLEVBQUUsR0FBVztRQUNsRixJQUFJLE1BQU0sSUFBSSxjQUFjLEVBQUU7WUFDMUIsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUVELFNBQVMsVUFBVSxDQUFDLGNBQWtDO1FBQ2xELGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxlQUFlO0lBQ2YsU0FBUyxjQUFjLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDOUMsWUFBWTtRQUNaLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxJQUFJLE1BQU0sSUFBSSxjQUFjLEVBQUU7WUFDMUIsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDekMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNILFFBQVEsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0o7SUFDTCxDQUFDO0lBRUQsU0FBUyxRQUFRLENBQUMsR0FBbUI7UUFDakMsTUFBTSxLQUFLLEdBQTJCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzFCLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDcEM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsU0FBUyxpQkFBaUIsQ0FBQyxHQUFXO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxNQUFNLEVBQUU7WUFDUixNQUFNLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBQ0QsS0FBSztJQUVMLE9BQU87UUFDSCxPQUFPO1FBQ1AsZUFBZTtRQUNmLHFCQUFxQjtRQUVyQixpQkFBaUI7UUFDakIsY0FBYztRQUNkLG1CQUFtQjtRQUVuQixRQUFRO0tBQ1gsQ0FBQztBQUNOLENBQUMsQ0FBQztBQTNHVyxRQUFBLGlCQUFpQixxQkEyRzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2V0dXBDb250ZXh0IH0gZnJvbSAndnVlL3R5cGVzL3YzLXNldHVwLWNvbnRleHQnO1xuaW1wb3J0IHsgcmVmLCBvbk1vdW50ZWQsIG9uVW5tb3VudGVkIH0gZnJvbSAndnVlL2Rpc3QvdnVlLmpzJztcblxuaW1wb3J0IHtcbiAgICBGbG9hdFdpbmRvdyxcbiAgICBGbG9hdFdpbmRvd0NvbmZpZyxcbiAgICBGbG9hdFdpbmRvd1RhYixcbiAgICBnZXRGbG9hdFdpbmRvd01hcCxcbiAgICB1cGRhdGVGbG9hdFdpbmRvd0NvbmZpZ3MsXG59IGZyb20gJy4vY29tcG9uZW50cy9mbG9hdC13aW5kb3cnO1xuaW1wb3J0IHsgR3JhcGhDb25maWdNZ3IsIE1lc3NhZ2VNZ3IsIE1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vLi4vc2hhZGVyLWdyYXBoJztcbmltcG9ydCB7IG5leHRUaWNrIH0gZnJvbSAndnVlJztcblxuZXhwb3J0IGNvbnN0IGZsb2F0V2luZG93c0xvZ2ljID0gKHByb3BzOiB7IH0sIGN0eDogU2V0dXBDb250ZXh0IHwgU2V0dXBDb250ZXh0PGFueT4pID0+IHtcbiAgICBjb25zdCB0YWJSZWZzID0gcmVmPEhUTUxFbGVtZW50W10+KFtdKTtcbiAgICBjb25zdCBmbG9hdFdpbmRvd1JlZnMgPSByZWY8dHlwZW9mIEZsb2F0V2luZG93W10+KFtdKTtcbiAgICBjb25zdCBwcmVzc1RhYlJlZnM6IE1hcDxzdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBmbG9hdFdpbmRvd01hcCA9IGdldEZsb2F0V2luZG93TWFwKCk7XG4gICAgY29uc3QgZmxvYXRXaW5kb3dDb25maWdMaXN0ID0gcmVmPEZsb2F0V2luZG93Q29uZmlnW10+KFtdKTtcblxuICAgIGZ1bmN0aW9uIG9uRmxvYXRXaW5kb3dDb25maWdDaGFuZ2VkKCkge1xuICAgICAgICB1cGRhdGVGbG9hdFdpbmRvd0NvbmZpZ3MoKS50aGVuKChjb25maWdzOiBGbG9hdFdpbmRvd0NvbmZpZ1tdKSA9PiB7XG4gICAgICAgICAgICBmbG9hdFdpbmRvd0NvbmZpZ0xpc3QudmFsdWUgPSBjb25maWdzO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnJlZ2lzdGVyKE1lc3NhZ2VUeXBlLkFzc2V0TG9hZGVkLCAoKSA9PiB7XG4gICAgICAgIGluaXRGbG9hdFdpbmRvd0NvbmZpZ3MoKTtcbiAgICB9KTtcblxuICAgIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UucmVnaXN0ZXIoW1xuICAgICAgICAgICAgTWVzc2FnZVR5cGUuRmxvYXRXaW5kb3dDb25maWdDaGFuZ2VkLFxuICAgICAgICBdLCBvbkZsb2F0V2luZG93Q29uZmlnQ2hhbmdlZCk7XG4gICAgfSk7XG5cbiAgICBvblVubW91bnRlZCgoKSA9PiB7XG4gICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UudW5yZWdpc3RlcihbXG4gICAgICAgICAgICBNZXNzYWdlVHlwZS5GbG9hdFdpbmRvd0NvbmZpZ0NoYW5nZWQsXG4gICAgICAgIF0sIG9uRmxvYXRXaW5kb3dDb25maWdDaGFuZ2VkKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGdldEZsb2F0V2luZG93QnlLZXkoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGZsb2F0V2luZG93TWFwLmdldChrZXkpID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0RmxvYXRXaW5kb3dDb25maWdzKCkge1xuICAgICAgICB1cGRhdGVGbG9hdFdpbmRvd0NvbmZpZ3MoKS50aGVuKChjb25maWdzOiBGbG9hdFdpbmRvd0NvbmZpZ1tdKSA9PiB7XG4gICAgICAgICAgICBmbG9hdFdpbmRvd0NvbmZpZ0xpc3QudmFsdWUgPSBjb25maWdzO1xuXG4gICAgICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmxvYXRXaW5kb3dSZWZzLnZhbHVlLmZvckVhY2goKGZsb2F0V2luZG93UmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIEdyYXBoQ29uZmlnTWdyLkluc3RhbmNlLmFkZEZsb2F0V2luZG93KGZsb2F0V2luZG93UmVmLmNvbmZpZy5rZXksIGZsb2F0V2luZG93UmVmLiRlbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZmxvYXRXaW5kb3dDb25maWdMaXN0LnZhbHVlLmZvckVhY2goKGNvbmZpZywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5iYXNlLmRlZmF1bHRTaG93IHx8IGNvbmZpZy5kZXRhaWxzPy5zaG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVzc1RhYih0YWJSZWZzLnZhbHVlW2luZGV4XSwgZmxvYXRXaW5kb3dSZWZzLnZhbHVlW2luZGV4XSwgY29uZmlnLmtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlVGFiKGZsb2F0V2luZG93UmVmcy52YWx1ZVtpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlc3NUYWIodGFiUmVmOiBIVE1MRWxlbWVudCwgZmxvYXRXaW5kb3dSZWY6IHR5cGVvZiBGbG9hdFdpbmRvdywga2V5OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRhYlJlZiAmJiBmbG9hdFdpbmRvd1JlZikge1xuICAgICAgICAgICAgZmxvYXRXaW5kb3dSZWYuc2hvdygpO1xuICAgICAgICAgICAgcHJlc3NUYWJSZWZzLnNldChrZXksIHRhYlJlZik7XG4gICAgICAgICAgICB0YWJSZWYuc2V0QXR0cmlidXRlKCdwcmVzc2VkJywgJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsZWFzZVRhYihmbG9hdFdpbmRvd1JlZjogdHlwZW9mIEZsb2F0V2luZG93KSB7XG4gICAgICAgIGZsb2F0V2luZG93UmVmLmhpZGUoKTtcbiAgICAgICAgb25IaWRlRmxvYXRXaW5kb3coZmxvYXRXaW5kb3dSZWYuY29uZmlnLmtleSk7XG4gICAgfVxuXG4gICAgLy8vLy8g5Y+z6L65IHRhYiDoj5zljZVcbiAgICBmdW5jdGlvbiB0b2dnbGVQcmVzc1RhYihrZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICAgICAgICAvLyDlvZPliY3mjInkuIvnmoQgdGFiXG4gICAgICAgIGNvbnN0IHRhYlJlZiA9IHRhYlJlZnMudmFsdWVbaW5kZXhdO1xuICAgICAgICBjb25zdCBmbG9hdFdpbmRvd1JlZiA9IGZsb2F0V2luZG93UmVmcy52YWx1ZVtpbmRleF07XG4gICAgICAgIGlmICh0YWJSZWYgJiYgZmxvYXRXaW5kb3dSZWYpIHtcbiAgICAgICAgICAgIGlmICh0YWJSZWYuZ2V0QXR0cmlidXRlKCdwcmVzc2VkJykgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZWxlYXNlVGFiKGZsb2F0V2luZG93UmVmKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJlc3NUYWIodGFiUmVmLCBmbG9hdFdpbmRvd1JlZiwga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN0eWxlKHRhYjogRmxvYXRXaW5kb3dUYWIpIHtcbiAgICAgICAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgaWYgKHRhYi5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gdGFiLmhlaWdodCArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uSGlkZUZsb2F0V2luZG93KGtleTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRhYlJlZiA9IHByZXNzVGFiUmVmcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKHRhYlJlZikge1xuICAgICAgICAgICAgdGFiUmVmLnJlbW92ZUF0dHJpYnV0ZSgncHJlc3NlZCcpO1xuICAgICAgICAgICAgcHJlc3NUYWJSZWZzLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vLy8vXG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0YWJSZWZzLFxuICAgICAgICBmbG9hdFdpbmRvd1JlZnMsXG4gICAgICAgIGZsb2F0V2luZG93Q29uZmlnTGlzdCxcblxuICAgICAgICBvbkhpZGVGbG9hdFdpbmRvdyxcbiAgICAgICAgdG9nZ2xlUHJlc3NUYWIsXG4gICAgICAgIGdldEZsb2F0V2luZG93QnlLZXksXG5cbiAgICAgICAgZ2V0U3R5bGUsXG4gICAgfTtcbn07XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/index.js b/extensions/shader-graph/dist/panels/shader-graph/index.js new file mode 100644 index 0000000..2359b70 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/index.js @@ -0,0 +1,91 @@ +"use strict"; +'use state'; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const fs_extra_1 = require("fs-extra"); +const path_1 = require("path"); +const vue_js_1 = tslib_1.__importDefault(require("vue/dist/vue.js")); +const view_1 = tslib_1.__importDefault(require("./view")); +const Shortcuts = tslib_1.__importStar(require("./shortcuts")); +const shader_graph_1 = require("../../shader-graph"); +const shader_graph_2 = require("../../shader-graph"); +let vm = null; +const options = { + listeners: {}, + style: (0, fs_extra_1.readFileSync)((0, path_1.join)(__dirname, '../../../static/shader-graph/style.css'), 'utf-8'), + template: (0, fs_extra_1.readFileSync)((0, path_1.join)(__dirname, '../../../static/shader-graph/index.html'), 'utf-8'), + $: { + forge: '#graph-forge', + shaderGraph: '#shader-graph', + }, + methods: { + async openAsset(assetUuid, lastAssetUuid) { + if (!vm) + return; + Editor.Panel.focus(shader_graph_1.PANEL_NAME); + await shader_graph_1.GraphConfigMgr.Instance.autoSave(lastAssetUuid); + await shader_graph_1.GraphAssetMgr.Instance.openAsset(); + }, + async onSceneReady() { + if (!vm) + return; + if (shader_graph_1.GraphDataMgr.Instance.getDirty()) { + await shader_graph_1.GraphAssetMgr.Instance.checkIfSave(); + } + shader_graph_1.MessageMgr.Instance.setSceneReady(true); + await (0, shader_graph_2.declareGraphBlock)(); + await shader_graph_1.GraphAssetMgr.Instance.load(); + shader_graph_1.MaskMgr.Instance.hide(shader_graph_2.MaskType.WaitLoad); + shader_graph_1.MaskMgr.Instance.hide(shader_graph_2.MaskType.WaitSceneReady); + }, + async onSceneClose() { + if (!vm) + return; + shader_graph_1.MessageMgr.Instance.setSceneReady(false); + shader_graph_1.MaskMgr.Instance.show(shader_graph_2.MaskType.WaitSceneReady); + }, + onPopupCreateMenu() { + if (!vm) + return; + shader_graph_1.Menu.Instance.popupCreateMenu(); + }, + onAssetAdd(uuid, info) { + if (!vm || info.importer !== 'shader-graph') + return; + shader_graph_1.GraphAssetMgr.Instance.assetAdd(uuid, info); + }, + onAssetDelete(uuid, info) { + if (!vm || info.importer !== 'shader-graph') + return; + shader_graph_1.GraphAssetMgr.Instance.assetDelete(uuid, info); + }, + onAssetChange(uuid, info) { + if (!vm || info.importer !== 'shader-graph') + return; + shader_graph_1.GraphAssetMgr.Instance.assetChange(uuid, info); + }, + ...Shortcuts, + }, + async ready() { + vm?.$destroy(); + vm = new vue_js_1.default({ + extends: view_1.default, + }); + // 创建 shader graph View + vm.$mount(this.$.shaderGraph); + }, + async beforeClose() { + await shader_graph_1.GraphConfigMgr.Instance.autoSave(); + if (shader_graph_1.GraphDataMgr.Instance.getDirty()) { + await shader_graph_1.GraphAssetMgr.Instance.checkIfSave(); + } + }, + close() { + shader_graph_1.MessageMgr.Instance.unregisterAll(); + vm?.$destroy(); + vm = null; + }, +}; +// @ts-ignore +module.exports = Editor.Panel.define(options); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFuZWxzL3NoYWRlci1ncmFwaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsV0FBVyxDQUFDOzs7QUFDWix1Q0FBd0M7QUFDeEMsK0JBQTRCO0FBQzVCLHFFQUFrQztBQUVsQywwREFBaUM7QUFFakMsK0RBQXlDO0FBQ3pDLHFEQVE0QjtBQUU1QixxREFBaUU7QUFFakUsSUFBSSxFQUFFLEdBQVEsSUFBSSxDQUFDO0FBRW5CLE1BQU0sT0FBTyxHQUFHO0lBQ1osU0FBUyxFQUFFLEVBQUU7SUFDYixLQUFLLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSx3Q0FBd0MsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUN2RixRQUFRLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSx5Q0FBeUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMzRixDQUFDLEVBQUU7UUFDQyxLQUFLLEVBQUUsY0FBYztRQUNyQixXQUFXLEVBQUUsZUFBZTtLQUMvQjtJQUNELE9BQU8sRUFBRTtRQUNMLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBaUIsRUFBRSxhQUFxQjtZQUNwRCxJQUFJLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBQ2hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLHlCQUFVLENBQUMsQ0FBQztZQUUvQixNQUFNLDZCQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RCxNQUFNLDRCQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7UUFDRCxLQUFLLENBQUMsWUFBWTtZQUNkLElBQUksQ0FBQyxFQUFFO2dCQUFFLE9BQU87WUFFaEIsSUFBSSwyQkFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDbEMsTUFBTSw0QkFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUM5QztZQUVELHlCQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxNQUFNLElBQUEsZ0NBQWlCLEdBQUUsQ0FBQztZQUMxQixNQUFNLDRCQUFhLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BDLHNCQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx1QkFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLHNCQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx1QkFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxLQUFLLENBQUMsWUFBWTtZQUNkLElBQUksQ0FBQyxFQUFFO2dCQUFFLE9BQU87WUFFaEIseUJBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLHNCQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx1QkFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxpQkFBaUI7WUFDYixJQUFJLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBRWhCLG1CQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxVQUFVLENBQUMsSUFBWSxFQUFFLElBQWU7WUFDcEMsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGNBQWM7Z0JBQUUsT0FBTztZQUVwRCw0QkFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxhQUFhLENBQUMsSUFBWSxFQUFFLElBQWU7WUFDdkMsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGNBQWM7Z0JBQUUsT0FBTztZQUVwRCw0QkFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxhQUFhLENBQUMsSUFBWSxFQUFFLElBQWU7WUFDdkMsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGNBQWM7Z0JBQUUsT0FBTztZQUVwRCw0QkFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxHQUFHLFNBQVM7S0FDZjtJQUNELEtBQUssQ0FBQyxLQUFLO1FBQ1AsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ2YsRUFBRSxHQUFHLElBQUksZ0JBQUcsQ0FBQztZQUNULE9BQU8sRUFBRSxjQUFXO1NBQ3ZCLENBQUMsQ0FBQztRQUVILHVCQUF1QjtRQUN2QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELEtBQUssQ0FBQyxXQUFXO1FBQ2IsTUFBTSw2QkFBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxJQUFJLDJCQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sNEJBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDOUM7SUFDTCxDQUFDO0lBQ0QsS0FBSztRQUNELHlCQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNmLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0osQ0FBQztBQUVGLGFBQWE7QUFDYixNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdGF0ZSc7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZS9kaXN0L3Z1ZS5qcyc7XG5cbmltcG9ydCBTaGFkZXJHcmFwaCBmcm9tICcuL3ZpZXcnO1xuXG5pbXBvcnQgKiBhcyBTaG9ydGN1dHMgZnJvbSAnLi9zaG9ydGN1dHMnO1xuaW1wb3J0IHtcbiAgICBHcmFwaEFzc2V0TWdyLFxuICAgIEdyYXBoRGF0YU1ncixcbiAgICBNYXNrTWdyLFxuICAgIE1lbnUsXG4gICAgTWVzc2FnZU1ncixcbiAgICBHcmFwaENvbmZpZ01ncixcbiAgICBQQU5FTF9OQU1FLFxufSBmcm9tICcuLi8uLi9zaGFkZXItZ3JhcGgnO1xuaW1wb3J0IHsgQXNzZXRJbmZvIH0gZnJvbSAnQGNvY29zL2NyZWF0b3ItdHlwZXMvZWRpdG9yL3BhY2thZ2VzL2Fzc2V0LWRiL0B0eXBlcy9wdWJsaWMnO1xuaW1wb3J0IHsgTWFza1R5cGUsIGRlY2xhcmVHcmFwaEJsb2NrIH0gZnJvbSAnLi4vLi4vc2hhZGVyLWdyYXBoJztcblxubGV0IHZtOiBhbnkgPSBudWxsO1xuXG5jb25zdCBvcHRpb25zID0ge1xuICAgIGxpc3RlbmVyczoge30sXG4gICAgc3R5bGU6IHJlYWRGaWxlU3luYyhqb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL3N0YXRpYy9zaGFkZXItZ3JhcGgvc3R5bGUuY3NzJyksICd1dGYtOCcpLFxuICAgIHRlbXBsYXRlOiByZWFkRmlsZVN5bmMoam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9zdGF0aWMvc2hhZGVyLWdyYXBoL2luZGV4Lmh0bWwnKSwgJ3V0Zi04JyksXG4gICAgJDoge1xuICAgICAgICBmb3JnZTogJyNncmFwaC1mb3JnZScsXG4gICAgICAgIHNoYWRlckdyYXBoOiAnI3NoYWRlci1ncmFwaCcsXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFzeW5jIG9wZW5Bc3NldChhc3NldFV1aWQ6IHN0cmluZywgbGFzdEFzc2V0VXVpZDogc3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoIXZtKSByZXR1cm47XG4gICAgICAgICAgICBFZGl0b3IuUGFuZWwuZm9jdXMoUEFORUxfTkFNRSk7XG5cbiAgICAgICAgICAgIGF3YWl0IEdyYXBoQ29uZmlnTWdyLkluc3RhbmNlLmF1dG9TYXZlKGxhc3RBc3NldFV1aWQpO1xuICAgICAgICAgICAgYXdhaXQgR3JhcGhBc3NldE1nci5JbnN0YW5jZS5vcGVuQXNzZXQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgb25TY2VuZVJlYWR5KCkge1xuICAgICAgICAgICAgaWYgKCF2bSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAoR3JhcGhEYXRhTWdyLkluc3RhbmNlLmdldERpcnR5KCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBHcmFwaEFzc2V0TWdyLkluc3RhbmNlLmNoZWNrSWZTYXZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2Uuc2V0U2NlbmVSZWFkeSh0cnVlKTtcbiAgICAgICAgICAgIGF3YWl0IGRlY2xhcmVHcmFwaEJsb2NrKCk7XG4gICAgICAgICAgICBhd2FpdCBHcmFwaEFzc2V0TWdyLkluc3RhbmNlLmxvYWQoKTtcbiAgICAgICAgICAgIE1hc2tNZ3IuSW5zdGFuY2UuaGlkZShNYXNrVHlwZS5XYWl0TG9hZCk7XG4gICAgICAgICAgICBNYXNrTWdyLkluc3RhbmNlLmhpZGUoTWFza1R5cGUuV2FpdFNjZW5lUmVhZHkpO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBvblNjZW5lQ2xvc2UoKSB7XG4gICAgICAgICAgICBpZiAoIXZtKSByZXR1cm47XG5cbiAgICAgICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2Uuc2V0U2NlbmVSZWFkeShmYWxzZSk7XG4gICAgICAgICAgICBNYXNrTWdyLkluc3RhbmNlLnNob3coTWFza1R5cGUuV2FpdFNjZW5lUmVhZHkpO1xuICAgICAgICB9LFxuICAgICAgICBvblBvcHVwQ3JlYXRlTWVudSgpIHtcbiAgICAgICAgICAgIGlmICghdm0pIHJldHVybjtcblxuICAgICAgICAgICAgTWVudS5JbnN0YW5jZS5wb3B1cENyZWF0ZU1lbnUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Bc3NldEFkZCh1dWlkOiBzdHJpbmcsIGluZm86IEFzc2V0SW5mbykge1xuICAgICAgICAgICAgaWYgKCF2bSB8fCBpbmZvLmltcG9ydGVyICE9PSAnc2hhZGVyLWdyYXBoJykgcmV0dXJuO1xuXG4gICAgICAgICAgICBHcmFwaEFzc2V0TWdyLkluc3RhbmNlLmFzc2V0QWRkKHV1aWQsIGluZm8pO1xuICAgICAgICB9LFxuICAgICAgICBvbkFzc2V0RGVsZXRlKHV1aWQ6IHN0cmluZywgaW5mbzogQXNzZXRJbmZvKSB7XG4gICAgICAgICAgICBpZiAoIXZtIHx8IGluZm8uaW1wb3J0ZXIgIT09ICdzaGFkZXItZ3JhcGgnKSByZXR1cm47XG5cbiAgICAgICAgICAgIEdyYXBoQXNzZXRNZ3IuSW5zdGFuY2UuYXNzZXREZWxldGUodXVpZCwgaW5mbyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQXNzZXRDaGFuZ2UodXVpZDogc3RyaW5nLCBpbmZvOiBBc3NldEluZm8pIHtcbiAgICAgICAgICAgIGlmICghdm0gfHwgaW5mby5pbXBvcnRlciAhPT0gJ3NoYWRlci1ncmFwaCcpIHJldHVybjtcblxuICAgICAgICAgICAgR3JhcGhBc3NldE1nci5JbnN0YW5jZS5hc3NldENoYW5nZSh1dWlkLCBpbmZvKTtcbiAgICAgICAgfSxcbiAgICAgICAgLi4uU2hvcnRjdXRzLFxuICAgIH0sXG4gICAgYXN5bmMgcmVhZHkoKSB7XG4gICAgICAgIHZtPy4kZGVzdHJveSgpO1xuICAgICAgICB2bSA9IG5ldyBWdWUoe1xuICAgICAgICAgICAgZXh0ZW5kczogU2hhZGVyR3JhcGgsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIOWIm+W7uiBzaGFkZXIgZ3JhcGggVmlld1xuICAgICAgICB2bS4kbW91bnQodGhpcy4kLnNoYWRlckdyYXBoKTtcbiAgICB9LFxuICAgIGFzeW5jIGJlZm9yZUNsb3NlKCkge1xuICAgICAgICBhd2FpdCBHcmFwaENvbmZpZ01nci5JbnN0YW5jZS5hdXRvU2F2ZSgpO1xuICAgICAgICBpZiAoR3JhcGhEYXRhTWdyLkluc3RhbmNlLmdldERpcnR5KCkpIHtcbiAgICAgICAgICAgIGF3YWl0IEdyYXBoQXNzZXRNZ3IuSW5zdGFuY2UuY2hlY2tJZlNhdmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UudW5yZWdpc3RlckFsbCgpO1xuICAgICAgICB2bT8uJGRlc3Ryb3koKTtcbiAgICAgICAgdm0gPSBudWxsO1xuICAgIH0sXG59O1xuXG4vLyBAdHMtaWdub3JlXG5tb2R1bGUuZXhwb3J0cyA9IEVkaXRvci5QYW5lbC5kZWZpbmUob3B0aW9ucyk7XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/mask.js b/extensions/shader-graph/dist/panels/shader-graph/mask.js new file mode 100644 index 0000000..f712e0b --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/mask.js @@ -0,0 +1,118 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.maskLogic = void 0; +const vue_js_1 = require("vue/dist/vue.js"); +const shader_graph_1 = require("../../shader-graph"); +/** + * 用于提示引导用户处理相关操作例如(打开,导入,覆盖) + * @param props + * @param ctx + */ +const maskLogic = (props, ctx) => { + const maskRef = (0, vue_js_1.ref)(); + const displayMaskType = (0, vue_js_1.ref)(shader_graph_1.MaskMgr.Instance.displayMaskType); + const createNewList = (0, vue_js_1.ref)([ + { + type: 'Surface', + label: Editor.I18n.t('shader-graph.buttons.new') + 'Surface', + }, + { + type: 'Unlit', + label: Editor.I18n.t('shader-graph.buttons.new') + 'Unlit', + }, + ]); + function onUpdateMask(nextMaskType) { + displayMaskType.value = nextMaskType; + changeMaskDisplay(); + } + function changeMaskDisplay() { + if (!maskRef.value) + return; + if (displayMaskType.value === shader_graph_1.MaskType.None) { + maskRef.value.removeAttribute('show'); + } + else { + maskRef.value.setAttribute('show', ''); + } + } + // Test Code + // document.addEventListener('keydown', (event) => { + // let nextMaskType = MaskType.None; + // switch (event.code) { + // case 'Digit1': + // nextMaskType = MaskType.WaitSceneReady; + // break; + // case 'Digit2': + // nextMaskType = MaskType.AssetMissing; + // break; + // case 'Digit3': + // nextMaskType = MaskType.AssetChange; + // break; + // case 'Digit4': + // nextMaskType = MaskType.NeedCreateNewAsset; + // break; + // case 'Digit5': + // nextMaskType = MaskType.NeedSaveBeReloadByRename; + // break; + // } + // onUpdateMask(nextMaskType); + // }); + (0, vue_js_1.onMounted)(() => { + changeMaskDisplay(); + shader_graph_1.MessageMgr.Instance.register(shader_graph_1.MessageType.UpdateMask, onUpdateMask); + }); + (0, vue_js_1.onUnmounted)(() => { + shader_graph_1.MessageMgr.Instance.unregister(shader_graph_1.MessageType.UpdateMask, onUpdateMask); + }); + async function onSaveAs() { + shader_graph_1.GraphAssetMgr.Instance.saveAs().then((done) => { + done && shader_graph_1.MaskMgr.Instance.updateMask(); + }); + } + async function onCreateNew(type) { + shader_graph_1.GraphAssetMgr.Instance.createNew(type).then((done) => { + done && shader_graph_1.MaskMgr.Instance.updateMask(); + }); + } + async function onOpen() { + shader_graph_1.GraphAssetMgr.Instance.open().then((done) => { + done && shader_graph_1.MaskMgr.Instance.updateMask(); + }); + } + async function onReload() { + shader_graph_1.GraphAssetMgr.Instance.load().then((done) => { + done && shader_graph_1.MaskMgr.Instance.updateMask(); + }); + } + async function onOverride() { + shader_graph_1.GraphAssetMgr.Instance.save().then((done) => { + done && shader_graph_1.MaskMgr.Instance.updateMask(); + }); + } + async function onSaveAndReloadByRename() { + shader_graph_1.GraphAssetMgr.Instance.save().then(() => { + shader_graph_1.GraphAssetMgr.Instance.load().then((done) => { + done && shader_graph_1.MaskMgr.Instance.updateMask(); + }); + }); + } + async function onCancel() { + shader_graph_1.MaskMgr.Instance.updateMask(); + } + return { + onOpen, + onSaveAs, + onCreateNew, + onReload, + onOverride, + onCancel, + onSaveAndReloadByRename, + maskRef, + createNewList, + // mask + MaskType: shader_graph_1.MaskType, + displayMaskType, + }; +}; +exports.maskLogic = maskLogic; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYW5lbHMvc2hhZGVyLWdyYXBoL21hc2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNENBQThEO0FBRzlELHFEQUErRjtBQUUvRjs7OztHQUlHO0FBQ0ksTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFVLEVBQUUsR0FBcUMsRUFBRSxFQUFFO0lBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUEsWUFBRyxHQUFFLENBQUM7SUFDdEIsTUFBTSxlQUFlLEdBQUcsSUFBQSxZQUFHLEVBQVcsc0JBQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFeEUsTUFBTSxhQUFhLEdBQUcsSUFBQSxZQUFHLEVBQUM7UUFDdEI7WUFDSSxJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLFNBQVM7U0FDL0Q7UUFDRDtZQUNJLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsT0FBTztTQUM3RDtLQUNKLENBQUMsQ0FBQztJQUVILFNBQVMsWUFBWSxDQUFDLFlBQXNCO1FBQ3hDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1FBQ3JDLGlCQUFpQixFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVMsaUJBQWlCO1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztZQUFFLE9BQU87UUFFM0IsSUFBSSxlQUFlLENBQUMsS0FBSyxLQUFLLHVCQUFRLENBQUMsSUFBSSxFQUFFO1lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3pDO2FBQU07WUFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFD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RUQsT0FBTztRQUNILE1BQU07UUFDTixRQUFRO1FBQ1IsV0FBVztRQUNYLFFBQVE7UUFDUixVQUFVO1FBQ1YsUUFBUTtRQUNSLHVCQUF1QjtRQUV2QixPQUFPO1FBQ1AsYUFBYTtRQUViLE9BQU87UUFDUCxRQUFRLEVBQVIsdUJBQVE7UUFDUixlQUFlO0tBQ2xCLENBQUM7QUFDTixDQUFDLENBQUM7QUF4SFcsUUFBQSxTQUFTLGFBd0hwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIHJlZiB9IGZyb20gJ3Z1ZS9kaXN0L3Z1ZS5qcyc7XG5pbXBvcnQgeyBTZXR1cENvbnRleHQgfSBmcm9tICd2dWUvdHlwZXMvdjMtc2V0dXAtY29udGV4dCc7XG5cbmltcG9ydCB7IEdyYXBoQXNzZXRNZ3IsIE1lc3NhZ2VUeXBlLCBNYXNrTWdyLCBNZXNzYWdlTWdyLCBNYXNrVHlwZSB9IGZyb20gJy4uLy4uL3NoYWRlci1ncmFwaCc7XG5cbi8qKlxuICog55So5LqO5o+Q56S65byV5a+855So5oi35aSE55CG55u45YWz5pON5L2c5L6L5aaC77yI5omT5byA77yM5a+85YWl77yM6KaG55uW77yJXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEBwYXJhbSBjdHhcbiAqL1xuZXhwb3J0IGNvbnN0IG1hc2tMb2dpYyA9IChwcm9wczogeyB9LCBjdHg6IFNldHVwQ29udGV4dCB8IFNldHVwQ29udGV4dDxhbnk+KSA9PiB7XG4gICAgY29uc3QgbWFza1JlZiA9IHJlZigpO1xuICAgIGNvbnN0IGRpc3BsYXlNYXNrVHlwZSA9IHJlZjxNYXNrVHlwZT4oTWFza01nci5JbnN0YW5jZS5kaXNwbGF5TWFza1R5cGUpO1xuXG4gICAgY29uc3QgY3JlYXRlTmV3TGlzdCA9IHJlZihbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdTdXJmYWNlJyxcbiAgICAgICAgICAgIGxhYmVsOiBFZGl0b3IuSTE4bi50KCdzaGFkZXItZ3JhcGguYnV0dG9ucy5uZXcnKSArICdTdXJmYWNlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ1VubGl0JyxcbiAgICAgICAgICAgIGxhYmVsOiBFZGl0b3IuSTE4bi50KCdzaGFkZXItZ3JhcGguYnV0dG9ucy5uZXcnKSArICdVbmxpdCcsXG4gICAgICAgIH0sXG4gICAgXSk7XG5cbiAgICBmdW5jdGlvbiBvblVwZGF0ZU1hc2sobmV4dE1hc2tUeXBlOiBNYXNrVHlwZSkge1xuICAgICAgICBkaXNwbGF5TWFza1R5cGUudmFsdWUgPSBuZXh0TWFza1R5cGU7XG4gICAgICAgIGNoYW5nZU1hc2tEaXNwbGF5KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hhbmdlTWFza0Rpc3BsYXkoKSB7XG4gICAgICAgIGlmICghbWFza1JlZi52YWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChkaXNwbGF5TWFza1R5cGUudmFsdWUgPT09IE1hc2tUeXBlLk5vbmUpIHtcbiAgICAgICAgICAgIG1hc2tSZWYudmFsdWUucmVtb3ZlQXR0cmlidXRlKCdzaG93Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXNrUmVmLnZhbHVlLnNldEF0dHJpYnV0ZSgnc2hvdycsICcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRlc3QgQ29kZVxuICAgIC8vIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAvLyAgICAgbGV0IG5leHRNYXNrVHlwZSA9IE1hc2tUeXBlLk5vbmU7XG4gICAgLy8gICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgIC8vICAgICAgICAgY2FzZSAnRGlnaXQxJzpcbiAgICAvLyAgICAgICAgICAgICBuZXh0TWFza1R5cGUgPSBNYXNrVHlwZS5XYWl0U2NlbmVSZWFkeTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgJ0RpZ2l0Mic6XG4gICAgLy8gICAgICAgICAgICAgbmV4dE1hc2tUeXBlID0gTWFza1R5cGUuQXNzZXRNaXNzaW5nO1xuICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSAnRGlnaXQzJzpcbiAgICAvLyAgICAgICAgICAgICBuZXh0TWFza1R5cGUgPSBNYXNrVHlwZS5Bc3NldENoYW5nZTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgJ0RpZ2l0NCc6XG4gICAgLy8gICAgICAgICAgICAgbmV4dE1hc2tUeXBlID0gTWFza1R5cGUuTmVlZENyZWF0ZU5ld0Fzc2V0O1xuICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSAnRGlnaXQ1JzpcbiAgICAvLyAgICAgICAgICAgICBuZXh0TWFza1R5cGUgPSBNYXNrVHlwZS5OZWVkU2F2ZUJlUmVsb2FkQnlSZW5hbWU7XG4gICAgLy8gICAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgb25VcGRhdGVNYXNrKG5leHRNYXNrVHlwZSk7XG4gICAgLy8gfSk7XG5cbiAgICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgICAgICBjaGFuZ2VNYXNrRGlzcGxheSgpO1xuICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnJlZ2lzdGVyKE1lc3NhZ2VUeXBlLlVwZGF0ZU1hc2ssIG9uVXBkYXRlTWFzayk7XG4gICAgfSk7XG5cbiAgICBvblVubW91bnRlZCgoKSA9PiB7XG4gICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UudW5yZWdpc3RlcihNZXNzYWdlVHlwZS5VcGRhdGVNYXNrLCBvblVwZGF0ZU1hc2spO1xuICAgIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gb25TYXZlQXMoKSB7XG4gICAgICAgIEdyYXBoQXNzZXRNZ3IuSW5zdGFuY2Uuc2F2ZUFzKCkudGhlbigoZG9uZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgZG9uZSAmJiBNYXNrTWdyLkluc3RhbmNlLnVwZGF0ZU1hc2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gb25DcmVhdGVOZXcodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIEdyYXBoQXNzZXRNZ3IuSW5zdGFuY2UuY3JlYXRlTmV3KHR5cGUpLnRoZW4oKGRvbmU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGRvbmUgJiYgTWFza01nci5JbnN0YW5jZS51cGRhdGVNYXNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIG9uT3BlbigpIHtcbiAgICAgICAgR3JhcGhBc3NldE1nci5JbnN0YW5jZS5vcGVuKCkudGhlbigoZG9uZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgZG9uZSAmJiBNYXNrTWdyLkluc3RhbmNlLnVwZGF0ZU1hc2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gb25SZWxvYWQoKSB7XG4gICAgICAgIEdyYXBoQXNzZXRNZ3IuSW5zdGFuY2UubG9hZCgpLnRoZW4oKGRvbmU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGRvbmUgJiYgTWFza01nci5JbnN0YW5jZS51cGRhdGVNYXNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIG9uT3ZlcnJpZGUoKSB7XG4gICAgICAgIEdyYXBoQXNzZXRNZ3IuSW5zdGFuY2Uuc2F2ZSgpLnRoZW4oKGRvbmU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGRvbmUgJiYgTWFza01nci5JbnN0YW5jZS51cGRhdGVNYXNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIG9uU2F2ZUFuZFJlbG9hZEJ5UmVuYW1lKCkge1xuICAgICAgICBHcmFwaEFzc2V0TWdyLkluc3RhbmNlLnNhdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIEdyYXBoQXNzZXRNZ3IuSW5zdGFuY2UubG9hZCgpLnRoZW4oKGRvbmUpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lICYmIE1hc2tNZ3IuSW5zdGFuY2UudXBkYXRlTWFzaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIG9uQ2FuY2VsKCkge1xuICAgICAgICBNYXNrTWdyLkluc3RhbmNlLnVwZGF0ZU1hc2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBvbk9wZW4sXG4gICAgICAgIG9uU2F2ZUFzLFxuICAgICAgICBvbkNyZWF0ZU5ldyxcbiAgICAgICAgb25SZWxvYWQsXG4gICAgICAgIG9uT3ZlcnJpZGUsXG4gICAgICAgIG9uQ2FuY2VsLFxuICAgICAgICBvblNhdmVBbmRSZWxvYWRCeVJlbmFtZSxcblxuICAgICAgICBtYXNrUmVmLFxuICAgICAgICBjcmVhdGVOZXdMaXN0LFxuXG4gICAgICAgIC8vIG1hc2tcbiAgICAgICAgTWFza1R5cGUsXG4gICAgICAgIGRpc3BsYXlNYXNrVHlwZSxcbiAgICB9O1xufTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/shortcuts.js b/extensions/shader-graph/dist/panels/shader-graph/shortcuts.js new file mode 100644 index 0000000..cf4157e --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/shortcuts.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.onRedo = exports.onUndo = exports.onDuplicate = exports.onPaste = exports.onCut = exports.onCopy = exports.onDelete = exports.onSave = void 0; +const shader_graph_1 = require("../../shader-graph"); +function onSave() { + if (!shader_graph_1.MaskMgr.Instance.ready) + return; + shader_graph_1.GraphAssetMgr.Instance.save(); +} +exports.onSave = onSave; +function onDelete() { + if (!shader_graph_1.MaskMgr.Instance.ready) + return; + shader_graph_1.GraphEditorMgr.Instance.delete(); +} +exports.onDelete = onDelete; +function onCopy() { + if (!shader_graph_1.MaskMgr.Instance.ready) + return; + shader_graph_1.GraphEditorMgr.Instance.copy(); +} +exports.onCopy = onCopy; +function onCut() { + if (!shader_graph_1.MaskMgr.Instance.ready) + return; + shader_graph_1.GraphEditorMgr.Instance.cut(); +} +exports.onCut = onCut; +function onPaste() { + if (!shader_graph_1.MaskMgr.Instance.ready) + return; + shader_graph_1.GraphEditorMgr.Instance.paste(); +} +exports.onPaste = onPaste; +function onDuplicate() { + if (!shader_graph_1.MaskMgr.Instance.ready) + return; + shader_graph_1.GraphEditorMgr.Instance.duplicate(); +} +exports.onDuplicate = onDuplicate; +function onUndo() { + if (!shader_graph_1.MaskMgr.Instance.ready) + return; + shader_graph_1.GraphEditorMgr.Instance.undo(); +} +exports.onUndo = onUndo; +function onRedo() { + if (!shader_graph_1.MaskMgr.Instance.ready) + return; + shader_graph_1.GraphEditorMgr.Instance.redo(); +} +exports.onRedo = onRedo; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnRjdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhbmVscy9zaGFkZXItZ3JhcGgvc2hvcnRjdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUE0RTtBQUU1RSxTQUFnQixNQUFNO0lBQ2xCLElBQUksQ0FBQyxzQkFBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO1FBQUUsT0FBTztJQUVwQyw0QkFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsQyxDQUFDO0FBSkQsd0JBSUM7QUFDRCxTQUFnQixRQUFRO0lBQ3BCLElBQUksQ0FBQyxzQkFBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO1FBQUUsT0FBTztJQUVwQyw2QkFBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBSkQsNEJBSUM7QUFDRCxTQUFnQixNQUFNO0lBQ2xCLElBQUksQ0FBQyxzQkFBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO1FBQUUsT0FBTztJQUVwQyw2QkFBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBSkQsd0JBSUM7QUFDRCxTQUFnQixLQUFLO0lBQ2pCLElBQUksQ0FBQyxzQkFBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO1FBQUUsT0FBTztJQUVwQyw2QkFBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQyxDQUFDO0FBSkQsc0JBSUM7QUFDRCxTQUFnQixPQUFPO0lBQ25CLElBQUksQ0FBQyxzQkFBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO1FBQUUsT0FBTztJQUVwQyw2QkFBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBSkQsMEJBSUM7QUFDRCxTQUFnQixXQUFXO0lBQ3ZCLElBQUksQ0FBQyxzQkFBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO1FBQUUsT0FBTztJQUVwQyw2QkFBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN4QyxDQUFDO0FBSkQsa0NBSUM7QUFFRCxTQUFnQixNQUFNO0lBQ2xCLElBQUksQ0FBQyxzQkFBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO1FBQUUsT0FBTztJQUNwQyw2QkFBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBSEQsd0JBR0M7QUFFRCxTQUFnQixNQUFNO0lBQ2xCLElBQUksQ0FBQyxzQkFBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO1FBQUUsT0FBTztJQUNwQyw2QkFBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBSEQsd0JBR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFwaEFzc2V0TWdyLCBHcmFwaEVkaXRvck1nciwgTWFza01nciB9IGZyb20gJy4uLy4uL3NoYWRlci1ncmFwaCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBvblNhdmUoKSB7XG4gICAgaWYgKCFNYXNrTWdyLkluc3RhbmNlLnJlYWR5KSByZXR1cm47XG5cbiAgICBHcmFwaEFzc2V0TWdyLkluc3RhbmNlLnNhdmUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvbkRlbGV0ZSgpIHtcbiAgICBpZiAoIU1hc2tNZ3IuSW5zdGFuY2UucmVhZHkpIHJldHVybjtcblxuICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLmRlbGV0ZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9uQ29weSgpIHtcbiAgICBpZiAoIU1hc2tNZ3IuSW5zdGFuY2UucmVhZHkpIHJldHVybjtcblxuICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLmNvcHkoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvbkN1dCgpIHtcbiAgICBpZiAoIU1hc2tNZ3IuSW5zdGFuY2UucmVhZHkpIHJldHVybjtcblxuICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLmN1dCgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9uUGFzdGUoKSB7XG4gICAgaWYgKCFNYXNrTWdyLkluc3RhbmNlLnJlYWR5KSByZXR1cm47XG5cbiAgICBHcmFwaEVkaXRvck1nci5JbnN0YW5jZS5wYXN0ZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9uRHVwbGljYXRlKCkge1xuICAgIGlmICghTWFza01nci5JbnN0YW5jZS5yZWFkeSkgcmV0dXJuO1xuXG4gICAgR3JhcGhFZGl0b3JNZ3IuSW5zdGFuY2UuZHVwbGljYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvblVuZG8oKSB7XG4gICAgaWYgKCFNYXNrTWdyLkluc3RhbmNlLnJlYWR5KSByZXR1cm47XG4gICAgR3JhcGhFZGl0b3JNZ3IuSW5zdGFuY2UudW5kbygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25SZWRvKCkge1xuICAgIGlmICghTWFza01nci5JbnN0YW5jZS5yZWFkeSkgcmV0dXJuO1xuICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLnJlZG8oKTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/panels/shader-graph/view.js b/extensions/shader-graph/dist/panels/shader-graph/view.js new file mode 100644 index 0000000..e58d3c9 --- /dev/null +++ b/extensions/shader-graph/dist/panels/shader-graph/view.js @@ -0,0 +1,95 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const vue_js_1 = require("vue/dist/vue.js"); +const mask_1 = require("./mask"); +const float_windows_1 = require("./float-windows"); +const shader_graph_1 = require("../../shader-graph"); +exports.default = (0, vue_js_1.defineComponent)({ + props: {}, + setup(props, ctx) { + // 遮罩逻辑 + const mask = (0, mask_1.maskLogic)(props, ctx); + const floatWindows = (0, float_windows_1.floatWindowsLogic)(props, ctx); + const showCreateNewMenu = (0, vue_js_1.ref)(false); + const dirtyRef = (0, vue_js_1.ref)(); + const shaderGraphRef = (0, vue_js_1.ref)(); + const forgeRef = (0, vue_js_1.ref)(); + const foregroundRef = (0, vue_js_1.ref)(); + const dragAreaRef = (0, vue_js_1.ref)(); + function onDirty(dirty) { + if (dirty) { + dirtyRef.value?.removeAttribute('hidden'); + } + else { + dirtyRef.value?.setAttribute('hidden', ''); + } + } + (0, vue_js_1.onMounted)(() => { + shader_graph_1.MessageMgr.Instance.register(shader_graph_1.MessageType.DirtyChanged, onDirty); + shader_graph_1.MessageMgr.Instance.register(shader_graph_1.MessageType.DraggingProperty, onDrag); + if (forgeRef.value && shaderGraphRef.value) { + const resizeObserver = new ResizeObserver(entries => { + // 在尺寸变化时执行的回调函数 + entries.forEach(entry => { + if (entry.target === forgeRef.value) { + shader_graph_1.MessageMgr.Instance.send(shader_graph_1.MessageType.Resize); + } + }); + }); + // 将 ResizeObserver 添加到要观察的元素上 + resizeObserver.observe(forgeRef.value); + shader_graph_1.GraphEditorMgr.Instance.setGraphForge(forgeRef.value); + // 用于获取鼠标的坐标 + shader_graph_1.GraphEditorMgr.Instance.addMousePointerListener(shaderGraphRef.value); + shader_graph_1.GraphDataMgr.Instance.setGraphForge(forgeRef.value); + shader_graph_1.GraphConfigMgr.Instance.setGraphForge(forgeRef.value); + shader_graph_1.ForgeMgr.Instance.setGraphForge(forgeRef.value); + } + shader_graph_1.GraphAssetMgr.Instance.openAsset(); + }); + (0, vue_js_1.onUnmounted)(() => { + shader_graph_1.MessageMgr.Instance.unregister(shader_graph_1.MessageType.DirtyChanged, onDirty); + shader_graph_1.MessageMgr.Instance.unregister(shader_graph_1.MessageType.DraggingProperty, onDrag); + }); + function onReset() { + shader_graph_1.GraphDataMgr.Instance.restore(); + } + function onSave() { + shader_graph_1.GraphAssetMgr.Instance.save(); + } + function onDrag() { + foregroundRef.value?.removeAttribute('disallowed-event'); + dragAreaRef.value?.removeAttribute('disallowed-event'); + } + function onDragEnd(event) { + foregroundRef.value?.setAttribute('disallowed-event', ''); + dragAreaRef.value?.setAttribute('disallowed-event', ''); + const value = event.dataTransfer?.getData('value'); + const options = value && JSON.parse(value); + if (options) { + const { x, y } = shader_graph_1.GraphEditorMgr.Instance.convertsMousePoint(event.x, event.y - 28); + options.x = x; + options.y = y; + shader_graph_1.GraphEditorMgr.Instance.add(options); + } + } + function onChangeCreateNewMenu(show) { + showCreateNewMenu.value = show; + } + return { + dirtyRef, + forgeRef, + foregroundRef, + dragAreaRef, + shaderGraphRef, + onReset, + onSave, + onDragEnd, + showCreateNewMenu, + onChangeCreateNewMenu, + ...mask, + ...floatWindows, + }; + }, +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYW5lbHMvc2hhZGVyLWdyYXBoL3ZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0Q0FBK0U7QUFHL0UsaUNBQW1DO0FBQ25DLG1EQUFvRDtBQUNwRCxxREFRNEI7QUFFNUIsa0JBQWUsSUFBQSx3QkFBZSxFQUFDO0lBRTNCLEtBQUssRUFBRSxFQUVOO0lBRUQsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHO1FBQ1osT0FBTztRQUNQLE1BQU0sSUFBSSxHQUFHLElBQUEsZ0JBQVMsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBQSxpQ0FBaUIsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbkQsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLFlBQUcsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFBLFlBQUcsR0FBa0IsQ0FBQztRQUN2QyxNQUFNLGNBQWMsR0FBRyxJQUFBLFlBQUcsR0FBZSxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUEsWUFBRyxHQUF5QixDQUFDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUEsWUFBRyxHQUFlLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBQSxZQUFHLEdBQWUsQ0FBQztRQUV2QyxTQUFTLE9BQU8sQ0FBQyxLQUFjO1lBQzNCLElBQUksS0FBSyxFQUFFO2dCQUNQLFFBQVEsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzdDO2lCQUFNO2dCQUNILFFBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUM5QztRQUNMLENBQUM7UUFFRCxJQUFBLGtCQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ1oseUJBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxD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QUNuRixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZCxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZCw2QkFBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEM7UUFDTCxDQUFDO1FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxJQUFhO1lBQ3hDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbkMsQ0FBQztRQUVELE9BQU87WUFDSCxRQUFRO1lBQ1IsUUFBUTtZQUNSLGFBQWE7WUFDYixXQUFXO1lBQ1gsY0FBYztZQUVkLE9BQU87WUFDUCxNQUFNO1lBRU4sU0FBUztZQUVULGlCQUFpQjtZQUNqQixxQkFBcUI7WUFFckIsR0FBRyxJQUFJO1lBQ1AsR0FBRyxZQUFZO1NBQ2xCLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50LCBvbk1vdW50ZWQsIG9uVW5tb3VudGVkLCByZWYgfSBmcm9tICd2dWUvZGlzdC92dWUuanMnO1xuXG5pbXBvcnQgeyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9ibG9jay1mb3JnZSc7XG5pbXBvcnQgeyBtYXNrTG9naWMgfSBmcm9tICcuL21hc2snO1xuaW1wb3J0IHsgZmxvYXRXaW5kb3dzTG9naWMgfSBmcm9tICcuL2Zsb2F0LXdpbmRvd3MnO1xuaW1wb3J0IHtcbiAgICBHcmFwaEVkaXRvck1ncixcbiAgICBHcmFwaERhdGFNZ3IsXG4gICAgRm9yZ2VNZ3IsXG4gICAgTWVzc2FnZU1ncixcbiAgICBHcmFwaEFzc2V0TWdyLFxuICAgIE1lc3NhZ2VUeXBlLFxuICAgIEdyYXBoQ29uZmlnTWdyLFxufSBmcm9tICcuLi8uLi9zaGFkZXItZ3JhcGgnO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb21wb25lbnQoe1xuXG4gICAgcHJvcHM6IHtcblxuICAgIH0sXG5cbiAgICBzZXR1cChwcm9wcywgY3R4KSB7XG4gICAgICAgIC8vIOmBrue9qemAu+i+kVxuICAgICAgICBjb25zdCBtYXNrID0gbWFza0xvZ2ljKHByb3BzLCBjdHgpO1xuICAgICAgICBjb25zdCBmbG9hdFdpbmRvd3MgPSBmbG9hdFdpbmRvd3NMb2dpYyhwcm9wcywgY3R4KTtcblxuICAgICAgICBjb25zdCBzaG93Q3JlYXRlTmV3TWVudSA9IHJlZihmYWxzZSk7XG4gICAgICAgIGNvbnN0IGRpcnR5UmVmID0gcmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICAgICAgICBjb25zdCBzaGFkZXJHcmFwaFJlZiA9IHJlZjxIVE1MRWxlbWVudD4oKTtcbiAgICAgICAgY29uc3QgZm9yZ2VSZWYgPSByZWY8SFRNTEdyYXBoRm9yZ2VFbGVtZW50PigpO1xuICAgICAgICBjb25zdCBmb3JlZ3JvdW5kUmVmID0gcmVmPEhUTUxFbGVtZW50PigpO1xuICAgICAgICBjb25zdCBkcmFnQXJlYVJlZiA9IHJlZjxIVE1MRWxlbWVudD4oKTtcblxuICAgICAgICBmdW5jdGlvbiBvbkRpcnR5KGRpcnR5OiBib29sZWFuKSB7XG4gICAgICAgICAgICBpZiAoZGlydHkpIHtcbiAgICAgICAgICAgICAgICBkaXJ0eVJlZi52YWx1ZT8ucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlydHlSZWYudmFsdWU/LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb25Nb3VudGVkKCAoKSA9PiB7XG4gICAgICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnJlZ2lzdGVyKE1lc3NhZ2VUeXBlLkRpcnR5Q2hhbmdlZCwgb25EaXJ0eSk7XG4gICAgICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnJlZ2lzdGVyKE1lc3NhZ2VUeXBlLkRyYWdnaW5nUHJvcGVydHksIG9uRHJhZyk7XG4gICAgICAgICAgICBpZiAoZm9yZ2VSZWYudmFsdWUgJiYgc2hhZGVyR3JhcGhSZWYudmFsdWUpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyDlnKjlsLrlr7jlj5jljJbml7bmiafooYznmoTlm57osIPlh73mlbBcbiAgICAgICAgICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS50YXJnZXQgPT09IGZvcmdlUmVmLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS5zZW5kKE1lc3NhZ2VUeXBlLlJlc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIOWwhiBSZXNpemVPYnNlcnZlciDmt7vliqDliLDopoHop4Llr5/nmoTlhYPntKDkuIpcbiAgICAgICAgICAgICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZvcmdlUmVmLnZhbHVlKTtcblxuICAgICAgICAgICAgICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLnNldEdyYXBoRm9yZ2UoZm9yZ2VSZWYudmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIOeUqOS6juiOt+WPlum8oOagh+eahOWdkOagh1xuICAgICAgICAgICAgICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLmFkZE1vdXNlUG9pbnRlckxpc3RlbmVyKHNoYWRlckdyYXBoUmVmLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBHcmFwaERhdGFNZ3IuSW5zdGFuY2Uuc2V0R3JhcGhGb3JnZShmb3JnZVJlZi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgR3JhcGhDb25maWdNZ3IuSW5zdGFuY2Uuc2V0R3JhcGhGb3JnZShmb3JnZVJlZi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgRm9yZ2VNZ3IuSW5zdGFuY2Uuc2V0R3JhcGhGb3JnZShmb3JnZVJlZi52YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEdyYXBoQXNzZXRNZ3IuSW5zdGFuY2Uub3BlbkFzc2V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9uVW5tb3VudGVkKCgpID0+IHtcbiAgICAgICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2UudW5yZWdpc3RlcihNZXNzYWdlVHlwZS5EaXJ0eUNoYW5nZWQsIG9uRGlydHkpO1xuICAgICAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS51bnJlZ2lzdGVyKE1lc3NhZ2VUeXBlLkRyYWdnaW5nUHJvcGVydHksIG9uRHJhZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIG9uUmVzZXQoKSB7XG4gICAgICAgICAgICBHcmFwaERhdGFNZ3IuSW5zdGFuY2UucmVzdG9yZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25TYXZlKCkge1xuICAgICAgICAgICAgR3JhcGhBc3NldE1nci5JbnN0YW5jZS5zYXZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvbkRyYWcoKSB7XG4gICAgICAgICAgICBmb3JlZ3JvdW5kUmVmLnZhbHVlPy5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FsbG93ZWQtZXZlbnQnKTtcbiAgICAgICAgICAgIGRyYWdBcmVhUmVmLnZhbHVlPy5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FsbG93ZWQtZXZlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uRHJhZ0VuZChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgICAgICBmb3JlZ3JvdW5kUmVmLnZhbHVlPy5zZXRBdHRyaWJ1dGUoJ2Rpc2FsbG93ZWQtZXZlbnQnLCAnJyk7XG4gICAgICAgICAgICBkcmFnQXJlYVJlZi52YWx1ZT8uc2V0QXR0cmlidXRlKCdkaXNhbGxvd2VkLWV2ZW50JywgJycpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC5kYXRhVHJhbnNmZXI/LmdldERhdGEoJ3ZhbHVlJyk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdmFsdWUgJiYgSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gR3JhcGhFZGl0b3JNZ3IuSW5zdGFuY2UuY29udmVydHNNb3VzZVBvaW50KGV2ZW50LngsIGV2ZW50LnkgLSAyOCk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy54ID0geDtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnkgPSB5O1xuICAgICAgICAgICAgICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLmFkZChvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uQ2hhbmdlQ3JlYXRlTmV3TWVudShzaG93OiBib29sZWFuKSB7XG4gICAgICAgICAgICBzaG93Q3JlYXRlTmV3TWVudS52YWx1ZSA9IHNob3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGlydHlSZWYsXG4gICAgICAgICAgICBmb3JnZVJlZixcbiAgICAgICAgICAgIGZvcmVncm91bmRSZWYsXG4gICAgICAgICAgICBkcmFnQXJlYVJlZixcbiAgICAgICAgICAgIHNoYWRlckdyYXBoUmVmLFxuXG4gICAgICAgICAgICBvblJlc2V0LFxuICAgICAgICAgICAgb25TYXZlLFxuXG4gICAgICAgICAgICBvbkRyYWdFbmQsXG5cbiAgICAgICAgICAgIHNob3dDcmVhdGVOZXdNZW51LFxuICAgICAgICAgICAgb25DaGFuZ2VDcmVhdGVOZXdNZW51LFxuXG4gICAgICAgICAgICAuLi5tYXNrLFxuICAgICAgICAgICAgLi4uZmxvYXRXaW5kb3dzLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/base-mgr.js b/extensions/shader-graph/dist/shader-graph/base/base-mgr.js new file mode 100644 index 0000000..7c121f8 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/base-mgr.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BaseMgr = void 0; +const tslib_1 = require("tslib"); +const events_1 = tslib_1.__importDefault(require("events")); +class BaseMgr extends events_1.default { + constructor() { + super(...arguments); + this._graphForge = null; + } + get graphForge() { + return this._graphForge; + } + setGraphForge(forge) { + this._graphForge = forge; + } + getRootGraphData() { + return this.graphForge.rootGraph; + } + getCurrentGraphData() { + const currentGraphData = this.graphForge.getCurrentGraph(); + if (currentGraphData) { + if (!currentGraphData.details) { + currentGraphData.details = {}; + } + if (!Array.isArray(currentGraphData.details.properties)) { + currentGraphData.details.properties = []; + } + } + return currentGraphData; + } + setGraphDataToForge(graphData) { + this.graphForge.setCurrentGraph(graphData); + } + release() { + } +} +exports.BaseMgr = BaseMgr; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tZ3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2Jhc2UvYmFzZS1tZ3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDREQUFrQztBQUlsQyxNQUFhLE9BQVEsU0FBUSxnQkFBWTtJQUF6Qzs7UUFFYyxnQkFBVyxHQUFpQyxJQUFJLENBQUM7SUFpQy9ELENBQUM7SUFoQ0csSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVksQ0FBQztJQUM3QixDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQTRCO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3RCLE1BQU0sZ0JBQWdCLEdBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN0RSxJQUFJLGdCQUFnQixFQUFFO1lBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQzNCLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7YUFDakM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3JELGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO2FBQzVDO1NBQ0o7UUFDRCxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxTQUFvQjtRQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sT0FBTztJQUVkLENBQUM7Q0FDSjtBQW5DRCwwQkFtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9ibG9jay1mb3JnZSc7XG5pbXBvcnQgeyBHcmFwaERhdGEgfSBmcm9tICcuLi8uLi9ibG9jay1mb3JnZS9pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgQmFzZU1nciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgICBwcm90ZWN0ZWQgX2dyYXBoRm9yZ2U6IEhUTUxHcmFwaEZvcmdlRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBnZXQgZ3JhcGhGb3JnZSgpOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGhGb3JnZSE7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEdyYXBoRm9yZ2UoZm9yZ2U6IEhUTUxHcmFwaEZvcmdlRWxlbWVudCkge1xuICAgICAgICB0aGlzLl9ncmFwaEZvcmdlID0gZm9yZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvb3RHcmFwaERhdGEoKTogR3JhcGhEYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JhcGhGb3JnZS5yb290R3JhcGghO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXJyZW50R3JhcGhEYXRhKCk6IEdyYXBoRGF0YSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRHcmFwaERhdGE6IEdyYXBoRGF0YSA9IHRoaXMuZ3JhcGhGb3JnZS5nZXRDdXJyZW50R3JhcGgoKTtcbiAgICAgICAgaWYgKGN1cnJlbnRHcmFwaERhdGEpIHtcbiAgICAgICAgICAgIGlmICghY3VycmVudEdyYXBoRGF0YS5kZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyYXBoRGF0YS5kZXRhaWxzID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudEdyYXBoRGF0YS5kZXRhaWxzLnByb3BlcnRpZXMpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyYXBoRGF0YS5kZXRhaWxzLnByb3BlcnRpZXMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudEdyYXBoRGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0R3JhcGhEYXRhVG9Gb3JnZShncmFwaERhdGE6IEdyYXBoRGF0YSkge1xuICAgICAgICB0aGlzLmdyYXBoRm9yZ2Uuc2V0Q3VycmVudEdyYXBoKGdyYXBoRGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbGVhc2UoKSB7XG5cbiAgICB9XG59XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/forge-mgr.js b/extensions/shader-graph/dist/shader-graph/base/forge-mgr.js new file mode 100644 index 0000000..740ca27 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/forge-mgr.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ForgeMgr = void 0; +const index_1 = require("./index"); +const block_forge_1 = require("../../block-forge"); +/** + * 用于把 shader-graph 数据转成具体的对象,方便操作跟获取,主要是二次封装 Forge 这个类 + */ +class ForgeMgr extends index_1.BaseMgr { + constructor() { + super(...arguments); + this._forge = null; + } + static get Instance() { + if (!this._instance) { + this._instance = new ForgeMgr(); + } + return this._instance; + } + get forge() { + this._forge = new block_forge_1.Forge(this.graphForge.getRootGraph()); + return this._forge; + } + getGraph() { + return this.forge.getGraph(); + } + getBlockMap() { + return this.getGraph().getBlockMap(); + } + getBlockByUuid(uuid) { + return this.getBlockMap()[uuid]; + } + release() { + } +} +exports.ForgeMgr = ForgeMgr; +ForgeMgr._instance = null; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ2UtbWdyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NoYWRlci1ncmFwaC9iYXNlL2ZvcmdlLW1nci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBa0M7QUFDbEMsbURBQTBDO0FBRTFDOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsZUFBTztJQUFyQzs7UUFXWSxXQUFNLEdBQWlCLElBQUksQ0FBQztJQXFCeEMsQ0FBQztJQTVCVSxNQUFNLEtBQUssUUFBUTtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7U0FDbkM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUdELElBQVksS0FBSztRQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxtQkFBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFHLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVNLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVNLFdBQVc7UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRU0sY0FBYyxDQUFDLElBQVk7UUFDOUIsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU87SUFFUCxDQUFDOztBQS9CTCw0QkFnQ0M7QUE5QlUsa0JBQVMsR0FBb0IsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZU1nciB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgRm9yZ2UgfSBmcm9tICcuLi8uLi9ibG9jay1mb3JnZSc7XG5cbi8qKlxuICog55So5LqO5oqKIHNoYWRlci1ncmFwaCDmlbDmja7ovazmiJDlhbfkvZPnmoTlr7nosaHvvIzmlrnkvr/mk43kvZzot5/ojrflj5bvvIzkuLvopoHmmK/kuozmrKHlsIHoo4UgRm9yZ2Ug6L+Z5Liq57G7XG4gKi9cbmV4cG9ydCBjbGFzcyBGb3JnZU1nciBleHRlbmRzIEJhc2VNZ3Ige1xuXG4gICAgc3RhdGljIF9pbnN0YW5jZTogRm9yZ2VNZ3IgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IEZvcmdlTWdyIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgRm9yZ2VNZ3IoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9yZ2U6IEZvcmdlIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBnZXQgZm9yZ2UoKTogRm9yZ2Uge1xuICAgICAgICB0aGlzLl9mb3JnZSA9IG5ldyBGb3JnZSh0aGlzLmdyYXBoRm9yZ2UuZ2V0Um9vdEdyYXBoKCkhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcmdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRHcmFwaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9yZ2UuZ2V0R3JhcGgoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QmxvY2tNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEdyYXBoKCkuZ2V0QmxvY2tNYXAoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QmxvY2tCeVV1aWQodXVpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJsb2NrTWFwKClbdXVpZF07XG4gICAgfVxuXG4gICAgcmVsZWFzZSgpIHtcblxuICAgIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/graph-asset-mgr.js b/extensions/shader-graph/dist/shader-graph/base/graph-asset-mgr.js new file mode 100644 index 0000000..01cdcd8 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/graph-asset-mgr.js @@ -0,0 +1,264 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphAssetMgr = void 0; +const path_1 = require("path"); +const fs_extra_1 = require("fs-extra"); +const internal_1 = require("./internal"); +const global_exports_1 = require("../global-exports"); +const utils_1 = require("../utils"); +const index_1 = require("./index"); +const declare_1 = require("../declare"); +/** + * 用于处理 shader-graph Asset 资源的存储 + */ +class GraphAssetMgr { + constructor() { + this.assetUuid = ''; + this.assetData = ''; + this.shaderGraphAssetInfo = null; + } + static get Instance() { + if (!this._instance) { + this._instance = new GraphAssetMgr(); + } + return this._instance; + } + get uuid() { + return this.assetUuid || ''; + } + async openAsset() { + await index_1.GraphConfigMgr.Instance.load(); + const isReady = await index_1.MessageMgr.Instance.checkSceneReady(); + if (isReady) { + index_1.MaskMgr.Instance.show(internal_1.MaskType.WaitLoad); + await (0, declare_1.declareGraphBlock)(); + await this.load(); + } + else { + index_1.MessageMgr.Instance.setSceneReady(false); + index_1.MaskMgr.Instance.show(internal_1.MaskType.WaitSceneReady); + } + } + async load(uuid) { + uuid = uuid || await Editor.Profile.getConfig(global_exports_1.PACKAGE_JSON.name, 'asset-uuid', 'local'); + if (!uuid) { + index_1.MaskMgr.Instance.show(internal_1.MaskType.NeedCreateNewAsset); + return false; + } + this.assetUuid = uuid; + this.shaderGraphAssetInfo = await Editor.Message.request('asset-db', 'query-asset-info', uuid); + if (!this.shaderGraphAssetInfo && index_1.GraphDataMgr.Instance.getGraphAssetData()) { + index_1.MaskMgr.Instance.show(internal_1.MaskType.AssetMissing); + return false; + } + if (this.shaderGraphAssetInfo) { + this.assetData = (0, fs_extra_1.readFileSync)(this.shaderGraphAssetInfo.file, 'utf8'); + index_1.GraphDataMgr.Instance.setGraphDataByAsset(this.shaderGraphAssetInfo, this.assetData); + } + else { + this.assetData = ''; + } + if (!this.assetData) { + index_1.MaskMgr.Instance.show(internal_1.MaskType.NeedCreateNewAsset); + return false; + } + index_1.MaskMgr.Instance.hide(internal_1.MaskType.AssetMissing); + index_1.MaskMgr.Instance.hide(internal_1.MaskType.NeedCreateNewAsset); + index_1.MessageMgr.Instance.send(index_1.MessageType.AssetLoaded); + return true; + } + /** + * 打开指定 Shader Graph 资源 + */ + async open() { + try { + const result = await Editor.Dialog.select({ + title: Editor.I18n.t('shader-graph.messages.titles.open'), + path: global_exports_1.PROJECT_PATH, + type: 'file', + multi: false, + filters: [{ name: 'Shader Graph', extensions: ['shadergraph'] }], + }); + const uuid = await (0, utils_1.getAssetUuidByPath)(result.filePaths[0]); + await Editor.Profile.setConfig(global_exports_1.PACKAGE_JSON.name, 'asset-uuid', uuid, 'local'); + return await this.load(uuid); + } + catch (err) { + console.error(err); + return false; + } + } + /** + * 新建 Shader Graph 资源 + */ + async createNew(type) { + try { + const result = await Editor.Dialog.save({ + title: Editor.I18n.t('shader-graph.messages.save.title'), + path: (0, path_1.join)(Editor.Project.path, 'assets', 'New Shader Graph'), + filters: [{ + name: 'New Shader Graph', + extensions: ['shadergraph'], + }], + }); + const url = (0, utils_1.convertToProjectDbUrl)(result.filePath); + const defaultShaderGraph = await index_1.GraphDataMgr.createDefaultShaderGraph(type); + const asset = await this.createAsset(url, defaultShaderGraph); + if (asset) { + return await this.load(asset.uuid); + } + return false; + } + catch (err) { + console.error(err); + return false; + } + } + /** + * 保存 + */ + async save() { + try { + if (!this.shaderGraphAssetInfo) + return false; + index_1.GraphDataMgr.Instance.syncLastGraphData(); + console.time('save'); + Editor.Message.request('asset-db', 'save-asset', this.shaderGraphAssetInfo.uuid, index_1.GraphDataMgr.Instance.getGraphAssetData()).then(() => { + console.timeEnd('save'); + }); + index_1.GraphDataMgr.Instance.setDirty(false); + return true; + } + catch (e) { + console.error(e); + return false; + } + } + /** + * 另存为 + */ + async saveAs() { + try { + const result = await Editor.Dialog.save({ + title: Editor.I18n.t('shader-graph.messages.save.title'), + path: (0, path_1.join)(Editor.Project.path, 'assets', this.shaderGraphAssetInfo?.name || global_exports_1.DEFAULT_NAME), + filters: [{ + name: 'Shader Graph', + extensions: ['shadergraph'], + }], + }); + const url = (0, utils_1.convertToProjectDbUrl)(result.filePath); + if (!url) { + console.debug('另存 Shader Graph 资源失败, 保存的 url 为 null'); + return false; + } + const asset = await this.createAsset(url, index_1.GraphDataMgr.Instance.getGraphAssetData()); + if (asset) { + return await this.load(asset.uuid); + } + return false; + } + catch (e) { + console.error('保存失败!', e); + return false; + } + } + /** + * 检查是否需要保存 + */ + async checkIfSave() { + if (this.shaderGraphAssetInfo && !(0, fs_extra_1.existsSync)(this.shaderGraphAssetInfo.file)) { + const result = await Editor.Dialog.warn(Editor.I18n.t('shader-graph.messages.missing_assets.detail'), { + title: Editor.I18n.t('shader-graph.messages.titles.normal'), + default: 0, + cancel: 1, + buttons: [ + Editor.I18n.t('shader-graph.buttons.save'), + Editor.I18n.t('shader-graph.buttons.unsaved'), + ], + }); + if (0 === result.response) { + // 另存为 + return await this.saveAs(); + } + return false; + } + else { + const result = await Editor.Dialog.warn(Editor.I18n.t('shader-graph.messages.save.detail'), { + title: Editor.I18n.t('shader-graph.messages.titles.normal'), + default: 0, + cancel: 1, + buttons: [ + Editor.I18n.t('shader-graph.buttons.save'), + Editor.I18n.t('shader-graph.buttons.unsaved'), + ], + }); + if (0 === result.response) { + // 另存为 + return await this.save(); + } + return false; + } + } + async createAsset(url, content) { + try { + if (!url || !content) + return; + // 强制覆盖 + return await Editor.Message.request('asset-db', 'create-asset', url, content, { overwrite: true }); + } + catch (e) { + console.error(e); + } + } + assetAdd(uuid, info) { + if (info && info.importer) { + index_1.MessageMgr.Instance.callSceneMethod('registerEffects', [uuid]); + } + } + async assetDelete(uuid, info) { + if (info && info.importer) { + index_1.MessageMgr.Instance.callSceneMethod('removeEffects', [uuid]); + } + if (this.uuid === uuid) { + await index_1.GraphConfigMgr.Instance.delete(uuid); + index_1.MaskMgr.Instance.show(internal_1.MaskType.AssetMissing); + } + } + assetChange(uuid, info) { + if (info && info.importer) { + index_1.MessageMgr.Instance.callSceneMethod('updateEffect', [uuid]); + } + if (this.uuid === uuid && index_1.GraphDataMgr.Instance.graphForge && index_1.GraphDataMgr.Instance.graphData) { + try { + // 更新名字 + const newName = (0, utils_1.getName)(info.name); + const needToRename = index_1.GraphDataMgr.Instance.graphForge.getCurrentGraph().name !== newName; + const dirty = index_1.GraphDataMgr.Instance.getDirty(); + if (dirty && needToRename) { + index_1.MaskMgr.Instance.show(internal_1.MaskType.NeedSaveBeReloadByRename); + return; + } + if (dirty) + return; + if (needToRename) { + this.load(); + return; + } + // const baseData = readFileSync(info.file, 'utf8'); + // const conflictA = this.graphForge.serialize() !== baseData; + // const conflictB = this.graphForge.serialize(this.graphData) !== baseData; + // + // if (conflictA && conflictB) { + // MaskMgr.Instance.show(MaskType.AssetChange); + // } + } + catch (e) { + console.error(e); + } + } + } +} +exports.GraphAssetMgr = GraphAssetMgr; +GraphAssetMgr._instance = null; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtYXNzZXQtbWdyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NoYWRlci1ncmFwaC9iYXNlL2dyYXBoLWFzc2V0LW1nci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBNEI7QUFDNUIsdUNBQW9EO0FBSXBELHlDQUFzQztBQUV0QyxzREFBNkU7QUFDN0Usb0NBQThFO0FBQzlFLG1DQUF5RjtBQUN6Rix3Q0FBK0M7QUFFL0M7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFBMUI7UUFXWSxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLHlCQUFvQixHQUFxQixJQUFJLENBQUM7SUEwUDFELENBQUM7SUFuUVUsTUFBTSxLQUFLLFFBQVE7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFNRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUztRQUNsQixNQUFNLHNCQUFjLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXJDLE1BQU0sT0FBTyxHQUFHLE1BQU0sa0JBQVUsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUQsSUFBSSxPQUFPLEVBQUU7WUFDVCxlQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sSUFBQSwyQkFBaUIsR0FBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3JCO2FBQU07WUFDSCxrQkFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENB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bkMsTUFBTSxZQUFZLEdBQUcsb0JBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7Z0JBRXpGLE1BQU0sS0FBSyxHQUFHLG9CQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMvQyxJQUFJLEtBQUssSUFBSSxZQUFZLEVBQUU7b0JBQ3ZCLGVBQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQztvQkFDekQsT0FBTztpQkFDVjtnQkFFRCxJQUFJLEtBQUs7b0JBQUUsT0FBTztnQkFFbEIsSUFBSSxZQUFZLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNaLE9BQU87aUJBQ1Y7Z0JBRUQsb0RBQW9EO2dCQUNwRCw4REFBOEQ7Z0JBQzlELDRFQUE0RTtnQkFDNUUsRUFBRTtnQkFDRixnQ0FBZ0M7Z0JBQ2hDLG1EQUFtRDtnQkFDbkQsSUFBSTthQUNQO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwQjtTQUNKO0lBQ0wsQ0FBQzs7QUF0UUwsc0NBdVFDO0FBclFVLHVCQUFTLEdBQXlCLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcblxuaW1wb3J0IHR5cGUgeyBBc3NldEluZm8gfSBmcm9tICdAY29jb3MvY3JlYXRvci10eXBlcy9lZGl0b3IvcGFja2FnZXMvYXNzZXQtZGIvQHR5cGVzL3B1YmxpYyc7XG5cbmltcG9ydCB7IE1hc2tUeXBlIH0gZnJvbSAnLi9pbnRlcm5hbCc7XG5cbmltcG9ydCB7IERFRkFVTFRfTkFNRSwgUEFDS0FHRV9KU09OLCBQUk9KRUNUX1BBVEggfSBmcm9tICcuLi9nbG9iYWwtZXhwb3J0cyc7XG5pbXBvcnQgeyBjb252ZXJ0VG9Qcm9qZWN0RGJVcmwsIGdldEFzc2V0VXVpZEJ5UGF0aCwgZ2V0TmFtZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEdyYXBoQ29uZmlnTWdyLCBHcmFwaERhdGFNZ3IsIE1lc3NhZ2VNZ3IsIE1lc3NhZ2VUeXBlLCBNYXNrTWdyIH0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgeyBkZWNsYXJlR3JhcGhCbG9jayB9IGZyb20gJy4uL2RlY2xhcmUnO1xuXG4vKipcbiAqIOeUqOS6juWkhOeQhiBzaGFkZXItZ3JhcGggQXNzZXQg6LWE5rqQ55qE5a2Y5YKoXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaEFzc2V0TWdyIHtcblxuICAgIHN0YXRpYyBfaW5zdGFuY2U6IEdyYXBoQXNzZXRNZ3IgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IEdyYXBoQXNzZXRNZ3Ige1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBHcmFwaEFzc2V0TWdyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXNzZXRVdWlkID0gJyc7XG4gICAgcHJpdmF0ZSBhc3NldERhdGEgPSAnJztcbiAgICBwcml2YXRlIHNoYWRlckdyYXBoQXNzZXRJbmZvOiBBc3NldEluZm8gfCBudWxsID0gbnVsbDtcblxuICAgIGdldCB1dWlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFzc2V0VXVpZCB8fCAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb3BlbkFzc2V0KCkge1xuICAgICAgICBhd2FpdCBHcmFwaENvbmZpZ01nci5JbnN0YW5jZS5sb2FkKCk7XG5cbiAgICAgICAgY29uc3QgaXNSZWFkeSA9IGF3YWl0IE1lc3NhZ2VNZ3IuSW5zdGFuY2UuY2hlY2tTY2VuZVJlYWR5KCk7XG4gICAgICAgIGlmIChpc1JlYWR5KSB7XG4gICAgICAgICAgICBNYXNrTWdyLkluc3RhbmNlLnNob3coTWFza1R5cGUuV2FpdExvYWQpO1xuICAgICAgICAgICAgYXdhaXQgZGVjbGFyZUdyYXBoQmxvY2soKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS5zZXRTY2VuZVJlYWR5KGZhbHNlKTtcbiAgICAgICAgICAgIE1hc2tNZ3IuSW5zdGFuY2Uuc2hvdyhNYXNrVHlwZS5XYWl0U2NlbmVSZWFkeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZCh1dWlkPzogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHV1aWQgPSB1dWlkIHx8IGF3YWl0IEVkaXRvci5Qcm9maWxlLmdldENvbmZpZyhQQUNLQUdFX0pTT04ubmFtZSwgJ2Fzc2V0LXV1aWQnLCAnbG9jYWwnKTtcbiAgICAgICAgaWYgKCF1dWlkKSB7XG4gICAgICAgICAgICBNYXNrTWdyLkluc3RhbmNlLnNob3coTWFza1R5cGUuTmVlZENyZWF0ZU5ld0Fzc2V0KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2V0VXVpZCA9IHV1aWQ7XG4gICAgICAgIHRoaXMuc2hhZGVyR3JhcGhBc3NldEluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXVpZCk7XG4gICAgICAgIGlmICghdGhpcy5zaGFkZXJHcmFwaEFzc2V0SW5mbyAmJiBHcmFwaERhdGFNZ3IuSW5zdGFuY2UuZ2V0R3JhcGhBc3NldERhdGEoKSkge1xuICAgICAgICAgICAgTWFza01nci5JbnN0YW5jZS5zaG93KE1hc2tUeXBlLkFzc2V0TWlzc2luZyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaGFkZXJHcmFwaEFzc2V0SW5mbykge1xuICAgICAgICAgICAgdGhpcy5hc3NldERhdGEgPSByZWFkRmlsZVN5bmModGhpcy5zaGFkZXJHcmFwaEFzc2V0SW5mby5maWxlLCAndXRmOCcpO1xuICAgICAgICAgICAgR3JhcGhEYXRhTWdyLkluc3RhbmNlLnNldEdyYXBoRGF0YUJ5QXNzZXQodGhpcy5zaGFkZXJHcmFwaEFzc2V0SW5mbywgdGhpcy5hc3NldERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NldERhdGEgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hc3NldERhdGEpIHtcbiAgICAgICAgICAgIE1hc2tNZ3IuSW5zdGFuY2Uuc2hvdyhNYXNrVHlwZS5OZWVkQ3JlYXRlTmV3QXNzZXQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIE1hc2tNZ3IuSW5zdGFuY2UuaGlkZShNYXNrVHlwZS5Bc3NldE1pc3NpbmcpO1xuICAgICAgICBNYXNrTWdyLkluc3RhbmNlLmhpZGUoTWFza1R5cGUuTmVlZENyZWF0ZU5ld0Fzc2V0KTtcbiAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS5zZW5kKE1lc3NhZ2VUeXBlLkFzc2V0TG9hZGVkKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omT5byA5oyH5a6aIFNoYWRlciBHcmFwaCDotYTmupBcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgb3BlbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVkaXRvci5EaWFsb2cuc2VsZWN0KHtcbiAgICAgICAgICAgICAgICB0aXRsZTogRWRpdG9yLkkxOG4udCgnc2hhZGVyLWdyYXBoLm1lc3NhZ2VzLnRpdGxlcy5vcGVuJyksXG4gICAgICAgICAgICAgICAgcGF0aDogUFJPSkVDVF9QQVRILFxuICAgICAgICAgICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgICAgICAgICBtdWx0aTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3sgbmFtZTogJ1NoYWRlciBHcmFwaCcsIGV4dGVuc2lvbnM6IFsnc2hhZGVyZ3JhcGgnXSB9XSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCB1dWlkID0gYXdhaXQgZ2V0QXNzZXRVdWlkQnlQYXRoKHJlc3VsdC5maWxlUGF0aHNbMF0pO1xuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLlByb2ZpbGUuc2V0Q29uZmlnKFBBQ0tBR0VfSlNPTi5uYW1lLCAnYXNzZXQtdXVpZCcsIHV1aWQsICdsb2NhbCcpO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZCh1dWlkKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlrDlu7ogU2hhZGVyIEdyYXBoIOi1hOa6kFxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVOZXcodHlwZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLnNhdmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBFZGl0b3IuSTE4bi50KCdzaGFkZXItZ3JhcGgubWVzc2FnZXMuc2F2ZS50aXRsZScpLFxuICAgICAgICAgICAgICAgIHBhdGg6IGpvaW4oRWRpdG9yLlByb2plY3QucGF0aCwgJ2Fzc2V0cycsICdOZXcgU2hhZGVyIEdyYXBoJyksXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ05ldyBTaGFkZXIgR3JhcGgnLFxuICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zOiBbJ3NoYWRlcmdyYXBoJ10sXG4gICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgdXJsID0gY29udmVydFRvUHJvamVjdERiVXJsKHJlc3VsdC5maWxlUGF0aCk7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0U2hhZGVyR3JhcGggPSBhd2FpdCBHcmFwaERhdGFNZ3IuY3JlYXRlRGVmYXVsdFNoYWRlckdyYXBoKHR5cGUpO1xuICAgICAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUFzc2V0KHVybCwgZGVmYXVsdFNoYWRlckdyYXBoKTtcbiAgICAgICAgICAgIGlmIChhc3NldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWQoYXNzZXQudXVpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+d5a2YXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHNhdmUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hhZGVyR3JhcGhBc3NldEluZm8pIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIEdyYXBoRGF0YU1nci5JbnN0YW5jZS5zeW5jTGFzdEdyYXBoRGF0YSgpO1xuICAgICAgICAgICAgY29uc29sZS50aW1lKCdzYXZlJyk7XG4gICAgICAgICAgICBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdzYXZlLWFzc2V0JywgdGhpcy5zaGFkZXJHcmFwaEFzc2V0SW5mby51dWlkLCBHcmFwaERhdGFNZ3IuSW5zdGFuY2UuZ2V0R3JhcGhBc3NldERhdGEoKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS50aW1lRW5kKCdzYXZlJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIEdyYXBoRGF0YU1nci5JbnN0YW5jZS5zZXREaXJ0eShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWPpuWtmOS4ulxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBzYXZlQXMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLnNhdmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBFZGl0b3IuSTE4bi50KCdzaGFkZXItZ3JhcGgubWVzc2FnZXMuc2F2ZS50aXRsZScpLFxuICAgICAgICAgICAgICAgIHBhdGg6IGpvaW4oRWRpdG9yLlByb2plY3QucGF0aCwgJ2Fzc2V0cycsIHRoaXMuc2hhZGVyR3JhcGhBc3NldEluZm8/Lm5hbWUgfHwgREVGQVVMVF9OQU1FKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU2hhZGVyIEdyYXBoJyxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uczogWydzaGFkZXJncmFwaCddLFxuICAgICAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGNvbnZlcnRUb1Byb2plY3REYlVybChyZXN1bHQuZmlsZVBhdGgpO1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCflj6blrZggU2hhZGVyIEdyYXBoIOi1hOa6kOWksei0pSwg5L+d5a2Y55qEIHVybCDkuLogbnVsbCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUFzc2V0KHVybCwgR3JhcGhEYXRhTWdyLkluc3RhbmNlLmdldEdyYXBoQXNzZXREYXRhKCkpO1xuICAgICAgICAgICAgaWYgKGFzc2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZChhc3NldC51dWlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign5L+d5a2Y5aSx6LSlIScsIGUpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qOA5p+l5piv5ZCm6ZyA6KaB5L+d5a2YXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGNoZWNrSWZTYXZlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAodGhpcy5zaGFkZXJHcmFwaEFzc2V0SW5mbyAmJiAhZXhpc3RzU3luYyh0aGlzLnNoYWRlckdyYXBoQXNzZXRJbmZvLmZpbGUpKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oRWRpdG9yLkkxOG4udCgnc2hhZGVyLWdyYXBoLm1lc3NhZ2VzLm1pc3NpbmdfYXNzZXRzLmRldGFpbCcpLCB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IEVkaXRvci5JMThuLnQoJ3NoYWRlci1ncmFwaC5tZXNzYWdlcy50aXRsZXMubm9ybWFsJyksXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgICAgICAgICAgICBjYW5jZWw6IDEsXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICBFZGl0b3IuSTE4bi50KCdzaGFkZXItZ3JhcGguYnV0dG9ucy5zYXZlJyksXG4gICAgICAgICAgICAgICAgICAgIEVkaXRvci5JMThuLnQoJ3NoYWRlci1ncmFwaC5idXR0b25zLnVuc2F2ZWQnKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoMCA9PT0gcmVzdWx0LnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgLy8g5Y+m5a2Y5Li6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2F2ZUFzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oRWRpdG9yLkkxOG4udCgnc2hhZGVyLWdyYXBoLm1lc3NhZ2VzLnNhdmUuZGV0YWlsJyksIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogRWRpdG9yLkkxOG4udCgnc2hhZGVyLWdyYXBoLm1lc3NhZ2VzLnRpdGxlcy5ub3JtYWwnKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICAgICAgICAgIGNhbmNlbDogMSxcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICAgICAgICAgIEVkaXRvci5JMThuLnQoJ3NoYWRlci1ncmFwaC5idXR0b25zLnNhdmUnKSxcbiAgICAgICAgICAgICAgICAgICAgRWRpdG9yLkkxOG4udCgnc2hhZGVyLWdyYXBoLmJ1dHRvbnMudW5zYXZlZCcpLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICgwID09PSByZXN1bHQucmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAvLyDlj6blrZjkuLpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zYXZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlQXNzZXQodXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8QXNzZXRJbmZvIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIXVybCB8fCAhY29udGVudCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyDlvLrliLbopobnm5ZcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCB1cmwsIGNvbnRlbnQsIHsgb3ZlcndyaXRlOiB0cnVlIH0pIGFzIEFzc2V0SW5mbztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3NldEFkZCh1dWlkOiBzdHJpbmcsIGluZm86IEFzc2V0SW5mbykge1xuICAgICAgICBpZiAoaW5mbyAmJiBpbmZvLmltcG9ydGVyKSB7XG4gICAgICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLmNhbGxTY2VuZU1ldGhvZCgncmVnaXN0ZXJFZmZlY3RzJywgW3V1aWRdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhc3NldERlbGV0ZSh1dWlkOiBzdHJpbmcsIGluZm86IEFzc2V0SW5mbykge1xuICAgICAgICBpZiAoaW5mbyAmJiBpbmZvLmltcG9ydGVyKSB7XG4gICAgICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLmNhbGxTY2VuZU1ldGhvZCgncmVtb3ZlRWZmZWN0cycsIFt1dWlkXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudXVpZCA9PT0gdXVpZCkge1xuICAgICAgICAgICAgYXdhaXQgR3JhcGhDb25maWdNZ3IuSW5zdGFuY2UuZGVsZXRlKHV1aWQpO1xuICAgICAgICAgICAgTWFza01nci5JbnN0YW5jZS5zaG93KE1hc2tUeXBlLkFzc2V0TWlzc2luZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXNzZXRDaGFuZ2UodXVpZDogc3RyaW5nLCBpbmZvOiBBc3NldEluZm8pIHtcblxuICAgICAgICBpZiAoaW5mbyAmJiBpbmZvLmltcG9ydGVyKSB7XG4gICAgICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLmNhbGxTY2VuZU1ldGhvZCgndXBkYXRlRWZmZWN0JywgW3V1aWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnV1aWQgPT09IHV1aWQgJiYgR3JhcGhEYXRhTWdyLkluc3RhbmNlLmdyYXBoRm9yZ2UgJiYgR3JhcGhEYXRhTWdyLkluc3RhbmNlLmdyYXBoRGF0YSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyDmm7TmlrDlkI3lrZdcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdOYW1lID0gZ2V0TmFtZShpbmZvLm5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lZWRUb1JlbmFtZSA9IEdyYXBoRGF0YU1nci5JbnN0YW5jZS5ncmFwaEZvcmdlLmdldEN1cnJlbnRHcmFwaCgpLm5hbWUgIT09IG5ld05hbWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaXJ0eSA9IEdyYXBoRGF0YU1nci5JbnN0YW5jZS5nZXREaXJ0eSgpO1xuICAgICAgICAgICAgICAgIGlmIChkaXJ0eSAmJiBuZWVkVG9SZW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgTWFza01nci5JbnN0YW5jZS5zaG93KE1hc2tUeXBlLk5lZWRTYXZlQmVSZWxvYWRCeVJlbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlydHkpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGlmIChuZWVkVG9SZW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjb25zdCBiYXNlRGF0YSA9IHJlYWRGaWxlU3luYyhpbmZvLmZpbGUsICd1dGY4Jyk7XG4gICAgICAgICAgICAgICAgLy8gY29uc3QgY29uZmxpY3RBID0gdGhpcy5ncmFwaEZvcmdlLnNlcmlhbGl6ZSgpICE9PSBiYXNlRGF0YTtcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBjb25mbGljdEIgPSB0aGlzLmdyYXBoRm9yZ2Uuc2VyaWFsaXplKHRoaXMuZ3JhcGhEYXRhKSAhPT0gYmFzZURhdGE7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBpZiAoY29uZmxpY3RBICYmIGNvbmZsaWN0Qikge1xuICAgICAgICAgICAgICAgIC8vICAgICBNYXNrTWdyLkluc3RhbmNlLnNob3coTWFza1R5cGUuQXNzZXRDaGFuZ2UpO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/graph-config-mgr.js b/extensions/shader-graph/dist/shader-graph/base/graph-config-mgr.js new file mode 100644 index 0000000..212399f --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/graph-config-mgr.js @@ -0,0 +1,113 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphConfigMgr = void 0; +const lodash_1 = require("lodash"); +const global_exports_1 = require("../global-exports"); +const base_mgr_1 = require("./base-mgr"); +const float_window_1 = require("../../panels/shader-graph/components/float-window"); +const CONFIG_KEY = 'shader-graph.graph-configs'; +/** + * 用于处理 shader-graph 配置存储 + */ +class GraphConfigMgr extends base_mgr_1.BaseMgr { + constructor() { + super(...arguments); + this.uuid = ''; + this.floatWindows = {}; + this.graphConfigs = {}; + } + static get Instance() { + if (!this._instance) { + this._instance = new GraphConfigMgr(); + } + return this._instance; + } + getFloatingWindowConfig(name, floatWindowConfig) { + const { top, left, right, bottom, width, height } = this.floatWindows[name].style; + const show = (this.floatWindows[name].getAttribute('hidden') === null); + floatWindowConfig = floatWindowConfig || {}; + if (!floatWindowConfig.position) { + floatWindowConfig.position = {}; + } + if (left) { + floatWindowConfig.position.left = left; + } + else { + delete floatWindowConfig.position.left; + } + if (right) { + floatWindowConfig.position.right = right; + } + else { + delete floatWindowConfig.position.right; + } + if (top) { + floatWindowConfig.position.top = top; + } + else { + delete floatWindowConfig.position.top; + } + if (bottom) { + floatWindowConfig.position.bottom = bottom; + } + else { + delete floatWindowConfig.position.bottom; + } + if (Object.keys(floatWindowConfig.position).length === 0) { + delete floatWindowConfig.position; + } + floatWindowConfig.show = show; + floatWindowConfig.width = width; + floatWindowConfig.height = height; + return floatWindowConfig; + } + getConfig(uuid) { + return this.graphConfigs[uuid || this.uuid] || { offset: { x: 0, y: 0 }, scale: 1, floatWindows: {} }; + } + async load() { + this.uuid = await Editor.Profile.getConfig(global_exports_1.PACKAGE_JSON.name, 'asset-uuid', 'local'); + this.graphConfigs = await Editor.Profile.getConfig(global_exports_1.PACKAGE_JSON.name, CONFIG_KEY, 'local') || {}; + console.debug('load config: ', this.uuid, this.graphConfigs); + } + async delete(uuid) { + delete this.graphConfigs[uuid || this.uuid]; + await Editor.Profile.setConfig(global_exports_1.PACKAGE_JSON.name, CONFIG_KEY, this.graphConfigs, 'local'); + } + async sync() { + this.graphForge.setGraphInfo(await this.getConfig()); + } + async autoSave(assetUuid) { + const uuid = assetUuid || this.uuid; + const graphConfig = this.getConfig(uuid); + const graphInfo = this.graphForge.getGraphInfo(); + graphConfig.scale = graphInfo.scale; + graphConfig.offset = graphInfo.offset; + for (const name in this.floatWindows) { + const config = (0, float_window_1.getFloatWindowConfigByName)(name); + if (!config?.dontSave) { + graphConfig.floatWindows[name] = this.getFloatingWindowConfig(name, graphConfig.floatWindows[name]); + } + if (graphConfig.floatWindows[name] && 0 === Object.keys(graphConfig.floatWindows[name]).length) { + delete graphConfig.floatWindows[name]; + } + } + this.graphConfigs[uuid] = graphConfig; + console.debug('Auto save config: ', uuid, this.graphConfigs); + await Editor.Profile.setConfig(global_exports_1.PACKAGE_JSON.name, CONFIG_KEY, this.graphConfigs, 'local'); + } + getFloatingWindowConfigByName(name) { + return this.getConfig().floatWindows[name]; + } + async saveDetails(name, details) { + const graphConfig = this.getConfig(); + graphConfig.floatWindows[name] = (0, lodash_1.merge)({}, graphConfig.floatWindows[name], details); + this.graphConfigs[this.uuid] = graphConfig; + await Editor.Profile.setConfig(global_exports_1.PACKAGE_NAME, CONFIG_KEY, this.graphConfigs, 'local'); + } + addFloatWindow(name, floatWindow) { + this.floatWindows[name] = floatWindow; + } +} +exports.GraphConfigMgr = GraphConfigMgr; +GraphConfigMgr._instance = null; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtY29uZmlnLW1nci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaGFkZXItZ3JhcGgvYmFzZS9ncmFwaC1jb25maWctbWdyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUErQjtBQUcvQixzREFBK0Q7QUFDL0QseUNBQXFDO0FBQ3JDLG9GQUErRjtBQUUvRixNQUFNLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQztBQUVoRDs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLGtCQUFPO0lBQTNDOztRQVdZLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixpQkFBWSxHQUFtQyxFQUFFLENBQUM7UUFDbEQsaUJBQVksR0FBa0IsRUFBRSxDQUFDO0lBbUc3QyxDQUFDO0lBNUdVLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztTQUN6QztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBTVMsdUJBQXVCLENBQUMsSUFBWSxFQUFFLGlCQUFxQztRQUNqRixNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNsRixNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBRXZFLGlCQUFpQixHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFO1lBQzdCLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7U0FD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LFdBQVcsQ0FBQyxJQUFZLEVBQUUsT0FBOEI7UUFDakUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBQSxjQUFLLEVBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQzNDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsNkJBQVksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRU0sY0FBYyxDQUFDLElBQVksRUFBRSxXQUF3QjtRQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQztJQUMxQyxDQUFDOztBQS9HTCx3Q0FnSEM7QUE5R1Usd0JBQVMsR0FBMEIsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBJRmxvYXRXaW5kb3dDb25maWcsIElHcmFwaENvbmZpZ3MgfSBmcm9tICcuL2ludGVybmFsJztcbmltcG9ydCB7IFBBQ0tBR0VfSlNPTiwgUEFDS0FHRV9OQU1FIH0gZnJvbSAnLi4vZ2xvYmFsLWV4cG9ydHMnO1xuaW1wb3J0IHsgQmFzZU1nciB9IGZyb20gJy4vYmFzZS1tZ3InO1xuaW1wb3J0IHsgZ2V0RmxvYXRXaW5kb3dDb25maWdCeU5hbWUgfSBmcm9tICcuLi8uLi9wYW5lbHMvc2hhZGVyLWdyYXBoL2NvbXBvbmVudHMvZmxvYXQtd2luZG93JztcblxuY29uc3QgQ09ORklHX0tFWSA9ICdzaGFkZXItZ3JhcGguZ3JhcGgtY29uZmlncyc7XG5cbi8qKlxuICog55So5LqO5aSE55CGIHNoYWRlci1ncmFwaCDphY3nva7lrZjlgqhcbiAqL1xuZXhwb3J0IGNsYXNzIEdyYXBoQ29uZmlnTWdyIGV4dGVuZHMgQmFzZU1nciB7XG5cbiAgICBzdGF0aWMgX2luc3RhbmNlOiBHcmFwaENvbmZpZ01nciB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogR3JhcGhDb25maWdNZ3Ige1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBHcmFwaENvbmZpZ01ncigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHV1aWQgPSAnJztcbiAgICBwcml2YXRlIGZsb2F0V2luZG93czogeyBba2V5OiBzdHJpbmddOiBIVE1MRWxlbWVudCB9ID0ge307XG4gICAgcHJpdmF0ZSBncmFwaENvbmZpZ3M6IElHcmFwaENvbmZpZ3MgPSB7fTtcblxuICAgIHByb3RlY3RlZCBnZXRGbG9hdGluZ1dpbmRvd0NvbmZpZyhuYW1lOiBzdHJpbmcsIGZsb2F0V2luZG93Q29uZmlnOiBJRmxvYXRXaW5kb3dDb25maWcpOiBJRmxvYXRXaW5kb3dDb25maWcge1xuICAgICAgICBjb25zdCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5mbG9hdFdpbmRvd3NbbmFtZV0uc3R5bGU7XG4gICAgICAgIGNvbnN0IHNob3cgPSAodGhpcy5mbG9hdFdpbmRvd3NbbmFtZV0uZ2V0QXR0cmlidXRlKCdoaWRkZW4nKSA9PT0gbnVsbCk7XG5cbiAgICAgICAgZmxvYXRXaW5kb3dDb25maWcgPSBmbG9hdFdpbmRvd0NvbmZpZyB8fCB7fTtcbiAgICAgICAgaWYgKCFmbG9hdFdpbmRvd0NvbmZpZy5wb3NpdGlvbikge1xuICAgICAgICAgICAgZmxvYXRXaW5kb3dDb25maWcucG9zaXRpb24gPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgICAgICBmbG9hdFdpbmRvd0NvbmZpZy5wb3NpdGlvbi5sZWZ0ID0gbGVmdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmbG9hdFdpbmRvd0NvbmZpZy5wb3NpdGlvbi5sZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgICBmbG9hdFdpbmRvd0NvbmZpZy5wb3NpdGlvbi5yaWdodCA9IHJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIGZsb2F0V2luZG93Q29uZmlnLnBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgZmxvYXRXaW5kb3dDb25maWcucG9zaXRpb24udG9wID0gdG9wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIGZsb2F0V2luZG93Q29uZmlnLnBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b20pIHtcbiAgICAgICAgICAgIGZsb2F0V2luZG93Q29uZmlnLnBvc2l0aW9uLmJvdHRvbSA9IGJvdHRvbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmbG9hdFdpbmRvd0NvbmZpZy5wb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmxvYXRXaW5kb3dDb25maWcucG9zaXRpb24pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIGZsb2F0V2luZG93Q29uZmlnLnBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgZmxvYXRXaW5kb3dDb25maWcuc2hvdyA9IHNob3c7XG4gICAgICAgIGZsb2F0V2luZG93Q29uZmlnLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGZsb2F0V2luZG93Q29uZmlnLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICByZXR1cm4gZmxvYXRXaW5kb3dDb25maWc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldENvbmZpZyh1dWlkPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyYXBoQ29uZmlnc1t1dWlkIHx8IHRoaXMudXVpZF0gfHwgeyBvZmZzZXQ6IHsgeDogMCwgeTogMCB9LCBzY2FsZTogMSwgZmxvYXRXaW5kb3dzOiB7fSB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkKCkge1xuICAgICAgICB0aGlzLnV1aWQgPSBhd2FpdCBFZGl0b3IuUHJvZmlsZS5nZXRDb25maWcoUEFDS0FHRV9KU09OLm5hbWUsICdhc3NldC11dWlkJywgJ2xvY2FsJyk7XG4gICAgICAgIHRoaXMuZ3JhcGhDb25maWdzID0gYXdhaXQgRWRpdG9yLlByb2ZpbGUuZ2V0Q29uZmlnKFBBQ0tBR0VfSlNPTi5uYW1lLCBDT05GSUdfS0VZLCAnbG9jYWwnKSB8fCB7fTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnbG9hZCBjb25maWc6ICcsIHRoaXMudXVpZCwgdGhpcy5ncmFwaENvbmZpZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkZWxldGUodXVpZD86IHN0cmluZykge1xuICAgICAgICBkZWxldGUgdGhpcy5ncmFwaENvbmZpZ3NbdXVpZCB8fCB0aGlzLnV1aWRdO1xuICAgICAgICBhd2FpdCBFZGl0b3IuUHJvZmlsZS5zZXRDb25maWcoUEFDS0FHRV9KU09OLm5hbWUsIENPTkZJR19LRVksIHRoaXMuZ3JhcGhDb25maWdzLCAnbG9jYWwnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3luYygpIHtcbiAgICAgICAgdGhpcy5ncmFwaEZvcmdlLnNldEdyYXBoSW5mbyhhd2FpdCB0aGlzLmdldENvbmZpZygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYXV0b1NhdmUoYXNzZXRVdWlkPzogc3RyaW5nICkge1xuICAgICAgICBjb25zdCB1dWlkID0gYXNzZXRVdWlkIHx8IHRoaXMudXVpZDtcbiAgICAgICAgY29uc3QgZ3JhcGhDb25maWcgPSB0aGlzLmdldENvbmZpZyh1dWlkKTtcbiAgICAgICAgY29uc3QgZ3JhcGhJbmZvID0gdGhpcy5ncmFwaEZvcmdlLmdldEdyYXBoSW5mbygpO1xuICAgICAgICBncmFwaENvbmZpZy5zY2FsZSA9IGdyYXBoSW5mby5zY2FsZTtcbiAgICAgICAgZ3JhcGhDb25maWcub2Zmc2V0ID0gZ3JhcGhJbmZvLm9mZnNldDtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHRoaXMuZmxvYXRXaW5kb3dzKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBnZXRGbG9hdFdpbmRvd0NvbmZpZ0J5TmFtZShuYW1lKTtcbiAgICAgICAgICAgIGlmICghY29uZmlnPy5kb250U2F2ZSkge1xuICAgICAgICAgICAgICAgIGdyYXBoQ29uZmlnLmZsb2F0V2luZG93c1tuYW1lXSA9IHRoaXMuZ2V0RmxvYXRpbmdXaW5kb3dDb25maWcobmFtZSwgZ3JhcGhDb25maWcuZmxvYXRXaW5kb3dzW25hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChncmFwaENvbmZpZy5mbG9hdFdpbmRvd3NbbmFtZV0gJiYgMCA9PT0gT2JqZWN0LmtleXMoZ3JhcGhDb25maWcuZmxvYXRXaW5kb3dzW25hbWVdKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZ3JhcGhDb25maWcuZmxvYXRXaW5kb3dzW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JhcGhDb25maWdzW3V1aWRdID0gZ3JhcGhDb25maWc7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ0F1dG8gc2F2ZSBjb25maWc6ICcsIHV1aWQsIHRoaXMuZ3JhcGhDb25maWdzKTtcbiAgICAgICAgYXdhaXQgRWRpdG9yLlByb2ZpbGUuc2V0Q29uZmlnKFBBQ0tBR0VfSlNPTi5uYW1lLCBDT05GSUdfS0VZLCB0aGlzLmdyYXBoQ29uZmlncywgJ2xvY2FsJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZsb2F0aW5nV2luZG93Q29uZmlnQnlOYW1lKG5hbWU6IHN0cmluZyk6IElGbG9hdFdpbmRvd0NvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbmZpZygpLmZsb2F0V2luZG93c1tuYW1lXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2F2ZURldGFpbHMobmFtZTogc3RyaW5nLCBkZXRhaWxzOiB7IFtrZXk6IHN0cmluZ106IGFueX0pIHtcbiAgICAgICAgY29uc3QgZ3JhcGhDb25maWcgPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBncmFwaENvbmZpZy5mbG9hdFdpbmRvd3NbbmFtZV0gPSBtZXJnZSh7fSwgZ3JhcGhDb25maWcuZmxvYXRXaW5kb3dzW25hbWVdLCBkZXRhaWxzKTtcbiAgICAgICAgdGhpcy5ncmFwaENvbmZpZ3NbdGhpcy51dWlkXSA9IGdyYXBoQ29uZmlnO1xuICAgICAgICBhd2FpdCBFZGl0b3IuUHJvZmlsZS5zZXRDb25maWcoUEFDS0FHRV9OQU1FLCBDT05GSUdfS0VZLCB0aGlzLmdyYXBoQ29uZmlncywgJ2xvY2FsJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZsb2F0V2luZG93KG5hbWU6IHN0cmluZywgZmxvYXRXaW5kb3c6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZmxvYXRXaW5kb3dzW25hbWVdID0gZmxvYXRXaW5kb3c7XG4gICAgfVxufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/graph-data-mgr.js b/extensions/shader-graph/dist/shader-graph/base/graph-data-mgr.js new file mode 100644 index 0000000..2d70558 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/graph-data-mgr.js @@ -0,0 +1,233 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphDataMgr = void 0; +const tslib_1 = require("tslib"); +const js_yaml_1 = tslib_1.__importDefault(require("js-yaml")); +const lodash_1 = require("lodash"); +const declare_1 = require("../declare"); +const block_forge_1 = require("../../block-forge"); +const index_1 = require("./index"); +const utils_1 = require("../utils"); +/** + * 用于处理 shader-graph 数据 + */ +class GraphDataMgr extends index_1.BaseMgr { + constructor() { + super(...arguments); + /** + * 表示是否设置 Graph + * @private + */ + this._dirty = false; + this.graphData = null; + /** + * 存储面板一些主要配置 + * 例如缩放,偏移 + * @private + */ + this.graphConfig = undefined; + } + static get Instance() { + if (!this._instance) { + this._instance = new GraphDataMgr(); + } + return this._instance; + } + static async createDefaultShaderGraph(type = 'SurfaceMasterNode', graphType = 'Graph', graphName = 'New Shader Graph') { + switch (type) { + case 'Surface': + type = 'SurfaceMasterNode'; + break; + case 'Unlit': + type = 'UnlitMasterNode'; + break; + } + const graphGraphData = { + type: graphType, + name: graphName, + nodes: {}, + graphs: {}, + lines: {}, + details: { + properties: [], + }, + }; + const blockData = await (0, declare_1.getBlockDataByType)(type); + if (!blockData) { + console.log(`create default shader graph failed, MasterNode: ${type}`); + } + else { + blockData.position = { x: 347, y: -280 }; + graphGraphData.nodes[(0, block_forge_1.generateUUID)()] = blockData; + } + return js_yaml_1.default.dump(graphGraphData); + } + setDirty(val, type) { + this._dirty = val; + index_1.MessageMgr.Instance.send(index_1.MessageType.DirtyChanged, val, type); + } + getDirty() { + return this._dirty; + } + release() { + if (this.onDirtyDebounce) { + this.graphForge.removeEventListener('dirty', this.onDirtyDebounce); + this.graphForge.removeEventListener('undo', this.onDirtyDebounce); + this.graphForge.removeEventListener('redo', this.onDirtyDebounce); + index_1.MessageMgr.Instance.register(index_1.MessageType.Dirty, this.onDirtyDebounce); + } + this.onEnterGraphBind && this.graphForge.removeEventListener('enter-graph', this.onEnterGraphBind); + this.onAssetLoadedBind && index_1.MessageMgr.Instance.unregister(index_1.MessageType.AssetLoaded, this.onAssetLoadedBind); + } + setGraphForge(forge) { + super.setGraphForge(forge); + this.onDirtyDebounce = (0, lodash_1.debounce)(this.onDirty.bind(this), 100); + forge.addEventListener('dirty', this.onDirtyDebounce); + forge.addEventListener('undo', this.onDirtyDebounce); + forge.addEventListener('redo', this.onDirtyDebounce); + this.onEnterGraphBind = this.onEnterGraph.bind(this); + forge.addEventListener('enter-graph', this.onEnterGraphBind); + this.onAssetLoadedBind = this.onAssetLoaded.bind(this); + index_1.MessageMgr.Instance.register(index_1.MessageType.AssetLoaded, this.onAssetLoadedBind); + index_1.MessageMgr.Instance.register(index_1.MessageType.Dirty, this.onDirtyDebounce); + } + reset() { + this.setDirty(false); + } + onAssetLoaded() { + this.reset(); + this.reload(); + } + onDirty(event) { + if (!this.graphForge) + return; + index_1.GraphConfigMgr.Instance.autoSave().then(() => { }); + const customEvent = event; + this.setDirty(true, customEvent && customEvent.detail?.dirtyType); + } + onEnterGraph() { + if (!this.graphForge) + return; + this.graphData = this.graphForge.getCurrentGraph(); + index_1.MessageMgr.Instance.send(index_1.MessageType.EnterGraph); + } + async restore() { + if (this.lastGraphData) { + this.setGraphDataToForge(this.lastGraphData); + } + this.graphData = this.graphForge.getCurrentGraph(); + this.lastGraphData = JSON.parse(JSON.stringify(this.graphData)); + this.setDirty(false); + index_1.MessageMgr.Instance.send(index_1.MessageType.Restore); + } + setGraphDataByAsset(assetInfo, asset) { + if (!this.graphForge) + return; + if (asset) { + this.graphData = this.validateGraphData(assetInfo, this.graphForge.deserialize(asset)); + } + else { + console.warn('reload failed, graph data asset is null.'); + return; + } + } + async reload() { + if (!this.graphForge || !this.graphData) + return; + this.lastGraphData = JSON.parse(JSON.stringify(this.graphData)); + this.setGraphDataToForge(this.graphData); + await index_1.GraphConfigMgr.Instance.sync(); + index_1.MaskMgr.Instance.hideAll(); + index_1.MessageMgr.Instance.send(index_1.MessageType.SetGraphDataToForge); + } + syncLastGraphData() { + this.lastGraphData = JSON.parse(JSON.stringify(this.graphData)); + } + /** + * 存储到 Asset 的字符串数据 + */ + getGraphAssetData() { + if (!this.graphForge) + return ''; + return this.graphForge.serialize(); + } + /** + * 还原成原始节点 + * @private + */ + reduceToBaseNode(property) { + const graphData = this.getCurrentGraphData(); + for (const nodeID in graphData.nodes) { + const node = graphData.nodes[nodeID]; + const details = node && node.details; + if (!details) + continue; + if (details && details.propertyID === property.id) { + details.title = property.name; + details.outputPins = property.outputPins; + // 重置 + const block = (0, declare_1.getBlockTemplateByType)(details.baseType); + node.type = details.baseType; + const inputPins = []; + block?.data.details.inputPins?.forEach((pin, index) => { + const rawPinData = details.inputPins?.[index]; + if (rawPinData) { + pin.value = rawPinData.value; + } + inputPins.push(pin); + }); + node.details.inputPins = inputPins; + const outputPins = []; + block?.data.details.outputPins?.forEach((pin, index) => { + const rawPinData = details.outputPins?.[index]; + if (rawPinData) { + pin.value = rawPinData.value; + } + outputPins.push(pin); + }); + node.details.outputPins = outputPins; + } + } + this.setGraphDataToForge(graphData); + } + /** + * 验证数据 + * @private + */ + validateGraphData(assetInfo, graphData) { + let dirty = false; + const newName = (0, utils_1.getName)(assetInfo.path); + if (graphData.name !== newName) { + graphData.name = newName; + dirty = true; + } + for (const uuid in graphData.nodes) { + const block = graphData.nodes[uuid]; + const blockTemplate = (0, declare_1.getBlockTemplateByType)(block.type); + if (blockTemplate) { + // 1.新增 slot 需要补全数据 + const inputPins = block.details.inputPins; + if (inputPins && blockTemplate.data.details.inputPins) { + blockTemplate.data.details.inputPins.forEach((pin, index) => { + const inputPinData = inputPins[index]; + if (!inputPinData) { + inputPins[index] = pin; + dirty = true; + } + }); + } + } + } + // 初始化 + if (!graphData.details.properties) { + graphData.details.properties = []; + } + if (dirty && this.graphForge) { + Editor.Message.request('asset-db', 'save-asset', assetInfo.uuid, this.graphForge.serialize(graphData)); + } + return graphData; + } +} +exports.GraphDataMgr = GraphDataMgr; +GraphDataMgr._instance = null; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtZGF0YS1tZ3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2Jhc2UvZ3JhcGgtZGF0YS1tZ3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDhEQUEyQjtBQUMzQixtQ0FBa0M7QUFNbEMsd0NBQXdFO0FBQ3hFLG1EQUF3RTtBQUV4RSxtQ0FBa0c7QUFFbEcsb0NBQW1DO0FBRW5DOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsZUFBTztJQUF6Qzs7UUF5Q0k7OztXQUdHO1FBQ08sV0FBTSxHQUFHLEtBQUssQ0FBQztRQUlsQixjQUFTLEdBQXFCLElBQUksQ0FBQztRQUUxQzs7OztXQUlHO1FBQ0ssZ0JBQVcsR0FBNkIsU0FBUyxDQUFDO0lBZ005RCxDQUFDO0lBcFBVLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztTQUN2QztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLEVBQUUsU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLEdBQUcsa0JBQWtCO1FBQ3hILFFBQVEsSUFBSSxFQUFFO1lBQ1YsS0FBSyxTQUFTO2dCQUNWLElBQUksR0FBRyxtQkFBbUIsQ0FBQztnQkFDM0IsTUFBTTtZQUNWLEtBQUssT0FBTztnQkFDUixJQUFJLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3pCLE1BQU07U0FDYjtRQUVELE1BQU0sY0FBYyxHQUFjO1lBQzlCLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxFQUFFO1lBQ1YsS0FBSyxFQUFFLEVBQUU7WUFDVCxPQUFPLEVB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UEwsb0NBd1BDO0FBdFBVLHNCQUFTLEdBQXdCLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgdHlwZSB7IEdyYXBoRGF0YSwgUGluRGF0YSwgQmxvY2tEYXRhIH0gZnJvbSAnLi4vLi4vYmxvY2stZm9yZ2UvaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgQmxvY2tUZW1wbGF0ZURhdGEgfSBmcm9tICcuLi9pbnRlcm5hbCc7XG5cbmltcG9ydCB7IGdldEJsb2NrRGF0YUJ5VHlwZSwgZ2V0QmxvY2tUZW1wbGF0ZUJ5VHlwZSB9IGZyb20gJy4uL2RlY2xhcmUnO1xuaW1wb3J0IHsgZ2VuZXJhdGVVVUlELCBIVE1MR3JhcGhGb3JnZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9ibG9jay1mb3JnZSc7XG5cbmltcG9ydCB7IEJhc2VNZ3IsIE1lc3NhZ2VNZ3IsIE1lc3NhZ2VUeXBlLCBNYXNrTWdyLCBHcmFwaENvbmZpZ01nciwgSUdyYXBoQ29uZmlnIH0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgeyBBc3NldEluZm8gfSBmcm9tICdAY29jb3MvY3JlYXRvci10eXBlcy9lZGl0b3IvcGFja2FnZXMvYXNzZXQtZGIvQHR5cGVzL3B1YmxpYyc7XG5pbXBvcnQgeyBnZXROYW1lIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIOeUqOS6juWkhOeQhiBzaGFkZXItZ3JhcGgg5pWw5o2uXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaERhdGFNZ3IgZXh0ZW5kcyBCYXNlTWdyIHtcblxuICAgIHN0YXRpYyBfaW5zdGFuY2U6IEdyYXBoRGF0YU1nciB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogR3JhcGhEYXRhTWdyIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgR3JhcGhEYXRhTWdyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgY3JlYXRlRGVmYXVsdFNoYWRlckdyYXBoKHR5cGUgPSAnU3VyZmFjZU1hc3Rlck5vZGUnLCBncmFwaFR5cGUgPSAnR3JhcGgnLCBncmFwaE5hbWUgPSAnTmV3IFNoYWRlciBHcmFwaCcpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdTdXJmYWNlJzpcbiAgICAgICAgICAgICAgICB0eXBlID0gJ1N1cmZhY2VNYXN0ZXJOb2RlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1VubGl0JzpcbiAgICAgICAgICAgICAgICB0eXBlID0gJ1VubGl0TWFzdGVyTm9kZSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncmFwaEdyYXBoRGF0YTogR3JhcGhEYXRhID0ge1xuICAgICAgICAgICAgdHlwZTogZ3JhcGhUeXBlLFxuICAgICAgICAgICAgbmFtZTogZ3JhcGhOYW1lLFxuICAgICAgICAgICAgbm9kZXM6IHt9LFxuICAgICAgICAgICAgZ3JhcGhzOiB7fSxcbiAgICAgICAgICAgIGxpbmVzOiB7fSxcbiAgICAgICAgICAgIGRldGFpbHM6IHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJsb2NrRGF0YSA9IGF3YWl0IGdldEJsb2NrRGF0YUJ5VHlwZSh0eXBlKTtcbiAgICAgICAgaWYgKCFibG9ja0RhdGEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBjcmVhdGUgZGVmYXVsdCBzaGFkZXIgZ3JhcGggZmFpbGVkLCBNYXN0ZXJOb2RlOiAke3R5cGV9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBibG9ja0RhdGEucG9zaXRpb24gPSB7IHg6IDM0NywgeTogLTI4MCB9O1xuICAgICAgICAgICAgZ3JhcGhHcmFwaERhdGEubm9kZXNbZ2VuZXJhdGVVVUlEKCldID0gYmxvY2tEYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5YW1sLmR1bXAoZ3JhcGhHcmFwaERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOihqOekuuaYr+WQpuiuvue9riBHcmFwaFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9kaXJ0eSA9IGZhbHNlO1xuXG4gICAgLy8g5Zu+5pWw5o2uXG4gICAgcHJvdGVjdGVkIGxhc3RHcmFwaERhdGE6IEdyYXBoRGF0YSB8IHVuZGVmaW5lZDtcbiAgICBwdWJsaWMgZ3JhcGhEYXRhOiBHcmFwaERhdGEgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIOWtmOWCqOmdouadv+S4gOS6m+S4u+imgemFjee9rlxuICAgICAqIOS+i+Wmgue8qeaUvu+8jOWBj+enu1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBncmFwaENvbmZpZzogSUdyYXBoQ29uZmlnIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgcHVibGljIHNldERpcnR5KHZhbDogYm9vbGVhbiwgdHlwZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHZhbDtcbiAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS5zZW5kKE1lc3NhZ2VUeXBlLkRpcnR5Q2hhbmdlZCwgdmFsLCB0eXBlKTtcbiAgICB9XG4gICAgcHVibGljIGdldERpcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlydHk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFzc2V0TG9hZGVkQmluZD86ICh1dWlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBvbkRpcnR5RGVib3VuY2U/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICAgIHByaXZhdGUgb25FbnRlckdyYXBoQmluZD86ICgpID0+IHZvaWQ7XG5cbiAgICByZWxlYXNlKCkge1xuICAgICAgICBpZiAodGhpcy5vbkRpcnR5RGVib3VuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhGb3JnZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkaXJ0eScsIHRoaXMub25EaXJ0eURlYm91bmNlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhGb3JnZS5yZW1vdmVFdmVudExpc3RlbmVyKCd1bmRvJywgdGhpcy5vbkRpcnR5RGVib3VuY2UpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaEZvcmdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3JlZG8nLCB0aGlzLm9uRGlydHlEZWJvdW5jZSk7XG4gICAgICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnJlZ2lzdGVyKE1lc3NhZ2VUeXBlLkRpcnR5LCB0aGlzLm9uRGlydHlEZWJvdW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkVudGVyR3JhcGhCaW5kICYmIHRoaXMuZ3JhcGhGb3JnZS5yZW1vdmVFdmVudExpc3RlbmVyKCdlbnRlci1ncmFwaCcsIHRoaXMub25FbnRlckdyYXBoQmluZCk7XG4gICAgICAgIHRoaXMub25Bc3NldExvYWRlZEJpbmQgJiYgTWVzc2FnZU1nci5JbnN0YW5jZS51bnJlZ2lzdGVyKE1lc3NhZ2VUeXBlLkFzc2V0TG9hZGVkLCB0aGlzLm9uQXNzZXRMb2FkZWRCaW5kKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0R3JhcGhGb3JnZShmb3JnZTogSFRNTEdyYXBoRm9yZ2VFbGVtZW50KSB7XG4gICAgICAgIHN1cGVyLnNldEdyYXBoRm9yZ2UoZm9yZ2UpO1xuICAgICAgICB0aGlzLm9uRGlydHlEZWJvdW5jZSA9IGRlYm91bmNlKHRoaXMub25EaXJ0eS5iaW5kKHRoaXMpLCAxMDApO1xuICAgICAgICBmb3JnZS5hZGRFdmVudExpc3RlbmVyKCdkaXJ0eScsIHRoaXMub25EaXJ0eURlYm91bmNlKTtcbiAgICAgICAgZm9yZ2UuYWRkRXZlbnRMaXN0ZW5lcigndW5kbycsIHRoaXMub25EaXJ0eURlYm91bmNlKTtcbiAgICAgICAgZm9yZ2UuYWRkRXZlbnRMaXN0ZW5lcigncmVkbycsIHRoaXMub25EaXJ0eURlYm91bmNlKTtcblxuICAgICAgICB0aGlzLm9uRW50ZXJHcmFwaEJpbmQgPSB0aGlzLm9uRW50ZXJHcmFwaC5iaW5kKHRoaXMpO1xuICAgICAgICBmb3JnZS5hZGRFdmVudExpc3RlbmVyKCdlbnRlci1ncmFwaCcsIHRoaXMub25FbnRlckdyYXBoQmluZCk7XG5cbiAgICAgICAgdGhpcy5vbkFzc2V0TG9hZGVkQmluZCA9IHRoaXMub25Bc3NldExvYWRlZC5iaW5kKHRoaXMpO1xuICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnJlZ2lzdGVyKE1lc3NhZ2VUeXBlLkFzc2V0TG9hZGVkLCB0aGlzLm9uQXNzZXRMb2FkZWRCaW5kKTtcbiAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS5yZWdpc3RlcihNZXNzYWdlVHlwZS5EaXJ0eSwgdGhpcy5vbkRpcnR5RGVib3VuY2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuc2V0RGlydHkoZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Bc3NldExvYWRlZCgpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EaXJ0eShldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyYXBoRm9yZ2UpIHJldHVybjtcblxuICAgICAgICBHcmFwaENvbmZpZ01nci5JbnN0YW5jZS5hdXRvU2F2ZSgpLnRoZW4oKCkgPT4ge30pO1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICB0aGlzLnNldERpcnR5KHRydWUsIGN1c3RvbUV2ZW50ICYmIGN1c3RvbUV2ZW50LmRldGFpbD8uZGlydHlUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FbnRlckdyYXBoKCkge1xuICAgICAgICBpZiAoIXRoaXMuZ3JhcGhGb3JnZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuZ3JhcGhEYXRhID0gdGhpcy5ncmFwaEZvcmdlLmdldEN1cnJlbnRHcmFwaCgpO1xuICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnNlbmQoTWVzc2FnZVR5cGUuRW50ZXJHcmFwaCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlc3RvcmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RHcmFwaERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JhcGhEYXRhVG9Gb3JnZSh0aGlzLmxhc3RHcmFwaERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JhcGhEYXRhID0gdGhpcy5ncmFwaEZvcmdlLmdldEN1cnJlbnRHcmFwaCgpO1xuICAgICAgICB0aGlzLmxhc3RHcmFwaERhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ3JhcGhEYXRhKSk7XG5cbiAgICAgICAgdGhpcy5zZXREaXJ0eShmYWxzZSk7XG5cbiAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS5zZW5kKE1lc3NhZ2VUeXBlLlJlc3RvcmUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRHcmFwaERhdGFCeUFzc2V0KGFzc2V0SW5mbzogQXNzZXRJbmZvLCBhc3NldDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5ncmFwaEZvcmdlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGFzc2V0KSB7XG4gICAgICAgICAgICB0aGlzLmdyYXBoRGF0YSA9IHRoaXMudmFsaWRhdGVHcmFwaERhdGEoYXNzZXRJbmZvLCB0aGlzLmdyYXBoRm9yZ2UuZGVzZXJpYWxpemUoYXNzZXQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybigncmVsb2FkIGZhaWxlZCwgZ3JhcGggZGF0YSBhc3NldCBpcyBudWxsLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbG9hZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyYXBoRm9yZ2UgfHwgIXRoaXMuZ3JhcGhEYXRhKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5sYXN0R3JhcGhEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdyYXBoRGF0YSkpO1xuICAgICAgICB0aGlzLnNldEdyYXBoRGF0YVRvRm9yZ2UodGhpcy5ncmFwaERhdGEpO1xuXG4gICAgICAgIGF3YWl0IEdyYXBoQ29uZmlnTWdyLkluc3RhbmNlLnN5bmMoKTtcbiAgICAgICAgTWFza01nci5JbnN0YW5jZS5oaWRlQWxsKCk7XG4gICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2Uuc2VuZChNZXNzYWdlVHlwZS5TZXRHcmFwaERhdGFUb0ZvcmdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3luY0xhc3RHcmFwaERhdGEoKSB7XG4gICAgICAgIHRoaXMubGFzdEdyYXBoRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ncmFwaERhdGEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlrZjlgqjliLAgQXNzZXQg55qE5a2X56ym5Liy5pWw5o2uXG4gICAgICovXG4gICAgcHVibGljIGdldEdyYXBoQXNzZXREYXRhKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5ncmFwaEZvcmdlKSByZXR1cm4gJyc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JhcGhGb3JnZS5zZXJpYWxpemUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDov5jljp/miJDljp/lp4voioLngrlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyByZWR1Y2VUb0Jhc2VOb2RlKHByb3BlcnR5OiBQcm9wZXJ0eURhdGEpIHtcbiAgICAgICAgY29uc3QgZ3JhcGhEYXRhID0gdGhpcy5nZXRDdXJyZW50R3JhcGhEYXRhKCk7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlEIGluIGdyYXBoRGF0YS5ub2Rlcykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZTogQmxvY2tEYXRhID0gZ3JhcGhEYXRhLm5vZGVzW25vZGVJRF07XG4gICAgICAgICAgICBjb25zdCBkZXRhaWxzID0gbm9kZSAmJiBub2RlLmRldGFpbHM7XG4gICAgICAgICAgICBpZiAoIWRldGFpbHMpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoZGV0YWlscyAmJiBkZXRhaWxzLnByb3BlcnR5SUQgPT09IHByb3BlcnR5LmlkKSB7XG4gICAgICAgICAgICAgICAgZGV0YWlscy50aXRsZSA9IHByb3BlcnR5Lm5hbWU7XG4gICAgICAgICAgICAgICAgZGV0YWlscy5vdXRwdXRQaW5zID0gcHJvcGVydHkub3V0cHV0UGlucztcbiAgICAgICAgICAgICAgICAvLyDph43nva5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGdldEJsb2NrVGVtcGxhdGVCeVR5cGUoZGV0YWlscy5iYXNlVHlwZSk7XG4gICAgICAgICAgICAgICAgbm9kZS50eXBlID0gZGV0YWlscy5iYXNlVHlwZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0UGluczogUGluRGF0YVtdID0gW107XG4gICAgICAgICAgICAgICAgYmxvY2s/LmRhdGEuZGV0YWlscy5pbnB1dFBpbnM/LmZvckVhY2goKHBpbjogUGluRGF0YSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYXdQaW5EYXRhID0gZGV0YWlscy5pbnB1dFBpbnM/LltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChyYXdQaW5EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaW4udmFsdWUgPSByYXdQaW5EYXRhLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlucHV0UGlucy5wdXNoKHBpbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbm9kZS5kZXRhaWxzLmlucHV0UGlucyA9IGlucHV0UGlucztcblxuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dFBpbnM6IFBpbkRhdGFbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGJsb2NrPy5kYXRhLmRldGFpbHMub3V0cHV0UGlucz8uZm9yRWFjaCgocGluOiBQaW5EYXRhLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhd1BpbkRhdGEgPSBkZXRhaWxzLm91dHB1dFBpbnM/LltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChyYXdQaW5EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaW4udmFsdWUgPSByYXdQaW5EYXRhLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFBpbnMucHVzaChwaW4pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG5vZGUuZGV0YWlscy5vdXRwdXRQaW5zID0gb3V0cHV0UGlucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEdyYXBoRGF0YVRvRm9yZ2UoZ3JhcGhEYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpqozor4HmlbDmja5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCB2YWxpZGF0ZUdyYXBoRGF0YShhc3NldEluZm86IEFzc2V0SW5mbywgZ3JhcGhEYXRhOiBHcmFwaERhdGEpIHtcbiAgICAgICAgbGV0IGRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbmV3TmFtZSA9IGdldE5hbWUoYXNzZXRJbmZvLnBhdGgpO1xuICAgICAgICBpZiAoZ3JhcGhEYXRhLm5hbWUgIT09IG5ld05hbWUpIHtcbiAgICAgICAgICAgIGdyYXBoRGF0YS5uYW1lID0gbmV3TmFtZTtcbiAgICAgICAgICAgIGRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdXVpZCBpbiBncmFwaERhdGEubm9kZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrOiBCbG9ja0RhdGEgPSBncmFwaERhdGEubm9kZXNbdXVpZF07XG4gICAgICAgICAgICBjb25zdCBibG9ja1RlbXBsYXRlOiBCbG9ja1RlbXBsYXRlRGF0YSB8IHVuZGVmaW5lZCA9IGdldEJsb2NrVGVtcGxhdGVCeVR5cGUoYmxvY2sudHlwZSk7XG4gICAgICAgICAgICBpZiAoYmxvY2tUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIDEu5paw5aKeIHNsb3Qg6ZyA6KaB6KGl5YWo5pWw5o2uXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRQaW5zID0gYmxvY2suZGV0YWlscy5pbnB1dFBpbnM7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0UGlucyAmJiBibG9ja1RlbXBsYXRlLmRhdGEuZGV0YWlscy5pbnB1dFBpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tUZW1wbGF0ZS5kYXRhLmRldGFpbHMuaW5wdXRQaW5zLmZvckVhY2goKHBpbjogUGluRGF0YSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRQaW5EYXRhOiBQaW5EYXRhIHwgdW5kZWZpbmVkID0gaW5wdXRQaW5zW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5wdXRQaW5EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRQaW5zW2luZGV4XSA9IHBpbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDliJ3lp4vljJZcbiAgICAgICAgaWYgKCFncmFwaERhdGEuZGV0YWlscy5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBncmFwaERhdGEuZGV0YWlscy5wcm9wZXJ0aWVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpcnR5ICYmIHRoaXMuZ3JhcGhGb3JnZSkge1xuICAgICAgICAgICAgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnc2F2ZS1hc3NldCcsIGFzc2V0SW5mby51dWlkLCB0aGlzLmdyYXBoRm9yZ2Uuc2VyaWFsaXplKGdyYXBoRGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncmFwaERhdGE7XG4gICAgfVxufVxuXG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/graph-editor-mgr.js b/extensions/shader-graph/dist/shader-graph/base/graph-editor-mgr.js new file mode 100644 index 0000000..d9c8d95 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/graph-editor-mgr.js @@ -0,0 +1,282 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphEditorMgr = void 0; +const declare_1 = require("../declare"); +const block_forge_1 = require("../../block-forge"); +const utils_1 = require("../utils"); +const index_1 = require("./index"); +/** + * shader graph 的基础操作,增、删 + */ +class GraphEditorMgr extends index_1.BaseMgr { + constructor() { + super(...arguments); + this.clipboardData = []; + this.lastMousePoint = { x: 0, y: 0 }; + this.shaderGraphPanel = null; + } + static get Instance() { + if (!this._instance) { + this._instance = new GraphEditorMgr(); + } + return this._instance; + } + get mousePoint() { + return this.lastMousePoint; + } + get mousePointInPanel() { + return this.convertsMousePoint(this.lastMousePoint.x, this.lastMousePoint.y); + } + convertsMousePoint(x, y) { + const rect = this.shaderGraphPanel.getBoundingClientRect(); + return { + x: x - rect.x, + y: y - rect.y, + }; + } + addMousePointerListener(shaderGraphPanel) { + this.shaderGraphPanel = shaderGraphPanel; + document.body.addEventListener('mousemove', (event) => { + this.lastMousePoint = { x: event.clientX, y: event.clientY }; + }); + } + /** + * 剪切板是否为空 + */ + get clipboardIsNull() { + return this.clipboardData.length === 0; + } + add(options) { + options = JSON.parse(JSON.stringify(options)); + const blockTemplate = (0, declare_1.getBlockTemplateByType)(options.type); + const data = blockTemplate && blockTemplate.data; + if (!data) + return; + if (!options.details.outputPins || options.details.outputPins.length === 0) { + options.details.outputPins = data.details.outputPins || []; + } + if (!options.details.inputPins || options.details.inputPins.length === 0) { + options.details.inputPins = data.details.inputPins || []; + } + let position = { x: options.x || 0, y: options.y || 0 }; + if (options.x === undefined && options.y === undefined) { + position = this.graphForge.convertCoordinate(this.mousePointInPanel); + } + else if (!options.dontConvertPos) { + position = this.graphForge.convertCoordinate(position); + } + this.graphForge.addBlock({ + type: options.type, + position: position, + details: options.details, + }, options.uuid); + index_1.MessageMgr.Instance.send(index_1.MessageType.Dirty); + } + deleteLinesByDuplicateOutput(lines, line) { + Object.keys(lines).forEach(key => { + const otherLine = lines[key]; + if (otherLine.output.node === line.output.node && + otherLine.output.param === line.output.param) { + this.graphForge.removeLine(key); + } + }); + } + async delete(options = []) { + const list = (0, utils_1.mergeGraphEditorOtherOptions)(options, this.getSelectedItems()); + this.graphForge?.startRecording(); + for (const item of list) { + if (item.blockData) { + const data = item.blockData; + if (this.isMaster(data.type)) + continue; + await this.graphForge?.removeBlock(item.uuid); + if (data.details.inputPins) { + await this.removeRegisterMenuByInputPins(data.details.inputPins); + } + } + } + for (const item of list) { + if (item.lineData) { + await this.graphForge?.removeLine(item.uuid); + } + } + this.graphForge?.stopRecording(); + index_1.MessageMgr.Instance.send(index_1.MessageType.Dirty); + } + cut(options = []) { + const list = (0, utils_1.mergeGraphEditorOtherOptions)(options, this.getSelectedItems()); + if (list.length > 0) { + this.clipboardData = []; + for (const item of list) { + if (item.lineData) + continue; + const data = item.blockData; + if (!data) + continue; + if (this.isMaster(data.type)) + continue; + this.graphForge.removeBlock(item.uuid); + if (data.details.inputPins) { + this.removeRegisterMenuByInputPins(data.details.inputPins); + } + this.clipboardData.push(item); + } + } + } + copy(options = []) { + const list = (0, utils_1.mergeGraphEditorOtherOptions)(options, this.getSelectedItems()); + if (list.length > 0) { + this.clipboardData = []; + for (const item of list) { + if (item.lineData) + continue; + const data = item.blockData; + if (!data) + continue; + if (this.isMaster(data.type)) + continue; + this.clipboardData.push(JSON.parse(JSON.stringify(item))); + } + } + } + paste() { + const mousePoint = this.graphForge.convertCoordinate({ + x: this.mousePointInPanel.x, + y: this.mousePointInPanel.y, + }); + this.usePaste(mousePoint, this.clipboardData); + index_1.MessageMgr.Instance.send(index_1.MessageType.Dirty); + } + undo() { + this.graphForge?.undo(); + } + redo() { + this.graphForge?.redo(); + } + usePaste(mousePoint, list) { + const offsetPoint = (0, utils_1.getOffsetPointByMousePoint)(list, mousePoint); + const blockIDMap = new Map(); + list.forEach((item) => { + const newBlockID = (0, block_forge_1.generateUUID)(); + const data = JSON.parse(JSON.stringify(item.blockData)); + data.position.x += offsetPoint.x; + data.position.y += offsetPoint.y; + this.graphForge.addBlock(data, newBlockID); + blockIDMap.set(item.uuid, newBlockID); + }); + const blockMap = index_1.ForgeMgr.Instance.getBlockMap(); + // 为了用于去重 + const noDuplicatesArray = []; + const newLines = []; + list.forEach((item) => { + const block = blockMap[item.uuid]; + block.getOutputPinsList().forEach((pin) => { + pin.connectPins.forEach((connectPin) => { + // 如果拷贝输出的 block 没有包含在选中的 block 中就不需要添加 line + const outputNode = blockIDMap.get(connectPin.block.uuid); + if (!outputNode) + return; + const newLineInfo = { + type: 'curve', + input: { + node: blockIDMap.get(pin.block.uuid) || pin.block.uuid, + param: pin.desc.tag, + }, + output: { + node: blockIDMap.get(connectPin.block.uuid) || connectPin.block.uuid, + param: connectPin.desc.tag, + }, + details: {}, + }; + const tag = newLineInfo.input.node + newLineInfo.input.param + + newLineInfo.output.node + newLineInfo.output.param; + if (!noDuplicatesArray.includes(tag)) { + noDuplicatesArray.push(tag); + newLines.push(newLineInfo); + } + }); + }); + block.getInputPinsList().forEach((pin) => { + pin.connectPins.forEach((connectPin) => { + const newLineInfo = { + type: 'curve', + input: { + node: blockIDMap.get(connectPin.block.uuid) || connectPin.block.uuid, + param: connectPin.desc.tag, + }, + output: { + node: blockIDMap.get(pin.block.uuid) || pin.block.uuid, + param: pin.desc.tag, + }, + details: {}, + }; + const tag = newLineInfo.input.node + newLineInfo.input.param + + newLineInfo.output.node + newLineInfo.output.param; + if (!noDuplicatesArray.includes(tag)) { + noDuplicatesArray.push(tag); + newLines.push(newLineInfo); + } + }); + }); + }); + // TODO 这里是 hack 如果不加 500 线条会无法添加 + setTimeout(() => { + newLines.forEach((line) => { + this.graphForge.addLine(line); + }); + }, 500); + } + duplicate(options = []) { + const list = (0, utils_1.mergeGraphEditorOtherOptions)(options, this.getSelectedItems()).filter((item) => item.blockData !== null); + const mousePoint = this.graphForge.convertCoordinate({ + x: this.mousePointInPanel.x, + y: this.mousePointInPanel.y, + }); + this.usePaste(mousePoint, list); + index_1.MessageMgr.Instance.send(index_1.MessageType.Dirty); + } + zoomToFit() { + this.graphForge.zoomToFit(); + } + /** + * 重置,回原点 + */ + reset() { + this.graphForge.setGraphInfo({ + scale: 1, + offset: { x: 0, y: 0 }, + }); + } + isMaster(type) { + return (0, declare_1.getBlockTemplateByType)(type)?.isMaster || false; + } + /** + * 获取当前选择的对象列表 + */ + getSelectedItems() { + const list = []; + this.graphForge.getSelectedLineList().forEach((item) => { + list.push({ + uuid: item.id, + lineData: item.target, + }); + }); + this.graphForge.getSelectedBlockList().forEach((item) => { + list.push({ + uuid: item.id, + blockData: item.target, + }); + }); + return list; + } + removeRegisterMenuByInputPins(inputPinDataList) { + inputPinDataList.forEach((pin) => { + if (pin.details.registerEnumType) { + (0, block_forge_1.removeDynamicEnumToType)(pin.details.registerEnumType, pin.value); + } + }); + } +} +exports.GraphEditorMgr = GraphEditorMgr; +GraphEditorMgr._instance = null; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtZWRpdG9yLW1nci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaGFkZXItZ3JhcGgvYmFzZS9ncmFwaC1lZGl0b3ItbWdyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHdDQUFvRDtBQUNwRCxtREFBK0U7QUFDL0Usb0NBR2tCO0FBRWxCLG1DQUFxRTtBQUdyRTs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLGVBQU87SUFBM0M7O1FBVVksa0JBQWEsR0FBOEIsRUFBRSxDQUFDO1FBRTlDLG1CQUFjLEdBQTZCLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFTbEUscUJBQWdCLEdBQXVCLElBQUksQ0FBQztJQTBSaEQsQ0FBQztJQTVTVSxNQUFNLEtBQUssUUFBUTtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7U0FDekM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUtELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUdELGtCQUFrQixDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzVELE9BQU87WUFDSCxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2IsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNo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SUFBSSxDQUFDLE1BQWtCO2FBQ3BDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQW9CLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNOLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDYixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQW1CO2FBQ3RDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLDZCQUE2QixDQUFDLGdCQUEyQjtRQUM3RCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRTtZQUN0QyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzlCLElBQUEscUNBQXVCLEVBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEU7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O0FBOVNMLHdDQStTQztBQTdTVSx3QkFBUyxHQUEwQixJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJsb2NrRGF0YSwgSVBpbkRlc2NyaXB0aW9uLCBMaW5lRGF0YSwgUGluRGF0YSB9IGZyb20gJy4uLy4uL2Jsb2NrLWZvcmdlL2ludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdExpbmVJbmZvLCBTZWxlY3ROb2RlSW5mbyB9IGZyb20gJ0BpdGhhcmJvcnMvdWktZ3JhcGgvZGlzdC9pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBJTm9kZURldGFpbHMsIFByb3BlcnR5RGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZSc7XG5cbmltcG9ydCB7IGdldEJsb2NrVGVtcGxhdGVCeVR5cGUgfSBmcm9tICcuLi9kZWNsYXJlJztcbmltcG9ydCB7IGdlbmVyYXRlVVVJRCwgUGluLCByZW1vdmVEeW5hbWljRW51bVRvVHlwZSB9IGZyb20gJy4uLy4uL2Jsb2NrLWZvcmdlJztcbmltcG9ydCB7XG4gICAgZ2V0T2Zmc2V0UG9pbnRCeU1vdXNlUG9pbnQsXG4gICAgbWVyZ2VHcmFwaEVkaXRvck90aGVyT3B0aW9ucyxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbXBvcnQgeyBCYXNlTWdyLCBGb3JnZU1nciwgTWVzc2FnZU1nciwgTWVzc2FnZVR5cGUgfSBmcm9tICcuL2luZGV4JztcbmltcG9ydCB7IEdyYXBoRWRpdG9yQWRkT3B0aW9ucywgR3JhcGhFZGl0b3JPdGhlck9wdGlvbnMgfSBmcm9tICcuL2ludGVybmFsJztcblxuLyoqXG4gKiBzaGFkZXIgZ3JhcGgg55qE5Z+656GA5pON5L2c77yM5aKe44CB5YigXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaEVkaXRvck1nciBleHRlbmRzIEJhc2VNZ3Ige1xuXG4gICAgc3RhdGljIF9pbnN0YW5jZTogR3JhcGhFZGl0b3JNZ3IgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBHcmFwaEVkaXRvck1nciB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IEdyYXBoRWRpdG9yTWdyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xpcGJvYXJkRGF0YTogR3JhcGhFZGl0b3JPdGhlck9wdGlvbnNbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBsYXN0TW91c2VQb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9ID0geyB4OiAwLCB5OiAwIH07XG4gICAgcHVibGljIGdldCBtb3VzZVBvaW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0TW91c2VQb2ludDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vdXNlUG9pbnRJblBhbmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0c01vdXNlUG9pbnQodGhpcy5sYXN0TW91c2VQb2ludC54LCB0aGlzLmxhc3RNb3VzZVBvaW50LnkpO1xuICAgIH1cblxuICAgIHNoYWRlckdyYXBoUGFuZWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgY29udmVydHNNb3VzZVBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnNoYWRlckdyYXBoUGFuZWwhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCAtIHJlY3QueCxcbiAgICAgICAgICAgIHk6IHkgLSByZWN0LnksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE1vdXNlUG9pbnRlckxpc3RlbmVyKHNoYWRlckdyYXBoUGFuZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2hhZGVyR3JhcGhQYW5lbCA9IHNoYWRlckdyYXBoUGFuZWw7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhc3RNb3VzZVBvaW50ID0geyB4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWJquWIh+adv+aYr+WQpuS4uuepulxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2xpcGJvYXJkSXNOdWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgcHVibGljIGFkZChvcHRpb25zOiBHcmFwaEVkaXRvckFkZE9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuXG4gICAgICAgIGNvbnN0IGJsb2NrVGVtcGxhdGUgPSBnZXRCbG9ja1RlbXBsYXRlQnlUeXBlKG9wdGlvbnMudHlwZSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBibG9ja1RlbXBsYXRlICYmIGJsb2NrVGVtcGxhdGUuZGF0YTtcblxuICAgICAgICBpZiAoIWRhdGEpIHJldHVybjtcblxuICAgICAgICBpZiAoIW9wdGlvbnMuZGV0YWlscy5vdXRwdXRQaW5zIHx8IG9wdGlvbnMuZGV0YWlscy5vdXRwdXRQaW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgb3B0aW9ucy5kZXRhaWxzLm91dHB1dFBpbnMgPSBkYXRhLmRldGFpbHMub3V0cHV0UGlucyB8fCBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuZGV0YWlscy5pbnB1dFBpbnMgfHwgb3B0aW9ucy5kZXRhaWxzLmlucHV0UGlucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZGV0YWlscy5pbnB1dFBpbnMgPSBkYXRhLmRldGFpbHMuaW5wdXRQaW5zIHx8IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBvc2l0aW9uID0geyB4OiBvcHRpb25zLnggfHwgMCwgeTogb3B0aW9ucy55IHx8IDAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMueCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMuZ3JhcGhGb3JnZS5jb252ZXJ0Q29vcmRpbmF0ZSh0aGlzLm1vdXNlUG9pbnRJblBhbmVsKTtcbiAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5kb250Q29udmVydFBvcykge1xuICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLmdyYXBoRm9yZ2UuY29udmVydENvb3JkaW5hdGUocG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmFwaEZvcmdlLmFkZEJsb2NrKHtcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMudHlwZSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgICAgIGRldGFpbHM6IG9wdGlvbnMuZGV0YWlscyxcbiAgICAgICAgfSwgb3B0aW9ucy51dWlkKTtcblxuICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnNlbmQoTWVzc2FnZVR5cGUuRGlydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVMaW5lc0J5RHVwbGljYXRlT3V0cHV0KGxpbmVzOiB7IFtrZXk6IHN0cmluZ106IExpbmVEYXRhIH0sIGxpbmU6IExpbmVEYXRhKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGxpbmVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdGhlckxpbmUgPSBsaW5lc1trZXldO1xuICAgICAgICAgICAgaWYgKG90aGVyTGluZS5vdXRwdXQubm9kZSA9PT0gbGluZS5vdXRwdXQubm9kZSAmJlxuICAgICAgICAgICAgICAgIG90aGVyTGluZS5vdXRwdXQucGFyYW0gPT09IGxpbmUub3V0cHV0LnBhcmFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaEZvcmdlLnJlbW92ZUxpbmUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRlbGV0ZShvcHRpb25zOiBHcmFwaEVkaXRvck90aGVyT3B0aW9uc1tdID0gW10pIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG1lcmdlR3JhcGhFZGl0b3JPdGhlck9wdGlvbnMob3B0aW9ucywgdGhpcy5nZXRTZWxlY3RlZEl0ZW1zKCkpO1xuXG4gICAgICAgIHRoaXMuZ3JhcGhGb3JnZT8uc3RhcnRSZWNvcmRpbmcoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uYmxvY2tEYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGl0ZW0uYmxvY2tEYXRhITtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01hc3RlcihkYXRhLnR5cGUpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ3JhcGhGb3JnZT8ucmVtb3ZlQmxvY2soaXRlbS51dWlkKTtcblxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmRldGFpbHMuaW5wdXRQaW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUmVnaXN0ZXJNZW51QnlJbnB1dFBpbnMoZGF0YS5kZXRhaWxzLmlucHV0UGlucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0KSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5saW5lRGF0YSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ3JhcGhGb3JnZT8ucmVtb3ZlTGluZShpdGVtLnV1aWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JhcGhGb3JnZT8uc3RvcFJlY29yZGluZygpO1xuICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnNlbmQoTWVzc2FnZVR5cGUuRGlydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjdXQob3B0aW9uczogR3JhcGhFZGl0b3JPdGhlck9wdGlvbnNbXSA9IFtdKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBtZXJnZUdyYXBoRWRpdG9yT3RoZXJPcHRpb25zKG9wdGlvbnMsIHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpKTtcblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNsaXBib2FyZERhdGEgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ubGluZURhdGEpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGl0ZW0uYmxvY2tEYXRhO1xuICAgICAgICAgICAgICAgIGlmICghZGF0YSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01hc3RlcihkYXRhLnR5cGUpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGhGb3JnZS5yZW1vdmVCbG9jayhpdGVtLnV1aWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZGV0YWlscy5pbnB1dFBpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVSZWdpc3Rlck1lbnVCeUlucHV0UGlucyhkYXRhLmRldGFpbHMuaW5wdXRQaW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jbGlwYm9hcmREYXRhLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGNvcHkob3B0aW9uczogR3JhcGhFZGl0b3JPdGhlck9wdGlvbnNbXSA9IFtdKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBtZXJnZUdyYXBoRWRpdG9yT3RoZXJPcHRpb25zKG9wdGlvbnMsIHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpKTtcblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNsaXBib2FyZERhdGEgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ubGluZURhdGEpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGl0ZW0uYmxvY2tEYXRhO1xuICAgICAgICAgICAgICAgIGlmICghZGF0YSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01hc3RlcihkYXRhLnR5cGUpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkRGF0YS5wdXNoKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgcGFzdGUoKSB7XG4gICAgICAgIGNvbnN0IG1vdXNlUG9pbnQgPSB0aGlzLmdyYXBoRm9yZ2UuY29udmVydENvb3JkaW5hdGUoe1xuICAgICAgICAgICAgeDogdGhpcy5tb3VzZVBvaW50SW5QYW5lbC54LFxuICAgICAgICAgICAgeTogdGhpcy5tb3VzZVBvaW50SW5QYW5lbC55LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51c2VQYXN0ZShtb3VzZVBvaW50LCB0aGlzLmNsaXBib2FyZERhdGEpO1xuXG4gICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2Uuc2VuZChNZXNzYWdlVHlwZS5EaXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVuZG8oKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhGb3JnZT8udW5kbygpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWRvKCkge1xuICAgICAgICB0aGlzLmdyYXBoRm9yZ2U/LnJlZG8oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVzZVBhc3RlKG1vdXNlUG9pbnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSwgbGlzdDogR3JhcGhFZGl0b3JPdGhlck9wdGlvbnNbXSkge1xuICAgICAgICBjb25zdCBvZmZzZXRQb2ludCA9IGdldE9mZnNldFBvaW50QnlNb3VzZVBvaW50KGxpc3QsIG1vdXNlUG9pbnQpO1xuXG4gICAgICAgIGNvbnN0IGJsb2NrSURNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbTogR3JhcGhFZGl0b3JPdGhlck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrSUQgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGl0ZW0uYmxvY2tEYXRhKSk7XG4gICAgICAgICAgICBkYXRhLnBvc2l0aW9uLnggKz0gb2Zmc2V0UG9pbnQueDtcbiAgICAgICAgICAgIGRhdGEucG9zaXRpb24ueSArPSBvZmZzZXRQb2ludC55O1xuICAgICAgICAgICAgdGhpcy5ncmFwaEZvcmdlLmFkZEJsb2NrKGRhdGEsIG5ld0Jsb2NrSUQpO1xuICAgICAgICAgICAgYmxvY2tJRE1hcC5zZXQoaXRlbS51dWlkLCBuZXdCbG9ja0lEKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYmxvY2tNYXAgPSBGb3JnZU1nci5JbnN0YW5jZS5nZXRCbG9ja01hcCgpO1xuXG4gICAgICAgIC8vIOS4uuS6hueUqOS6juWOu+mHjVxuICAgICAgICBjb25zdCBub0R1cGxpY2F0ZXNBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgbmV3TGluZXM6IExpbmVEYXRhW10gPSBbXTtcbiAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtOiBHcmFwaEVkaXRvck90aGVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja01hcFtpdGVtLnV1aWRdO1xuICAgICAgICAgICAgYmxvY2suZ2V0T3V0cHV0UGluc0xpc3QoKS5mb3JFYWNoKChwaW46IFBpbikgPT4ge1xuICAgICAgICAgICAgICAgIHBpbi5jb25uZWN0UGlucy5mb3JFYWNoKChjb25uZWN0UGluOiBQaW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5ou36LSd6L6T5Ye655qEIGJsb2NrIOayoeacieWMheWQq+WcqOmAieS4reeahCBibG9jayDkuK3lsLHkuI3pnIDopoHmt7vliqAgbGluZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXROb2RlID0gYmxvY2tJRE1hcC5nZXQoY29ubmVjdFBpbi5ibG9jay51dWlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvdXRwdXROb2RlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3TGluZUluZm86IExpbmVEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2N1cnZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogYmxvY2tJRE1hcC5nZXQocGluLmJsb2NrLnV1aWQpIHx8IHBpbi5ibG9jay51dWlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtOiBwaW4uZGVzYy50YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogYmxvY2tJRE1hcC5nZXQoY29ubmVjdFBpbi5ibG9jay51dWlkKSB8fCBjb25uZWN0UGluLmJsb2NrLnV1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW06IGNvbm5lY3RQaW4uZGVzYy50YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczoge30sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IG5ld0xpbmVJbmZvLmlucHV0Lm5vZGUgKyBuZXdMaW5lSW5mby5pbnB1dC5wYXJhbSArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdMaW5lSW5mby5vdXRwdXQubm9kZSArIG5ld0xpbmVJbmZvLm91dHB1dC5wYXJhbTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vRHVwbGljYXRlc0FycmF5LmluY2x1ZGVzKHRhZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vRHVwbGljYXRlc0FycmF5LnB1c2godGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xpbmVzLnB1c2gobmV3TGluZUluZm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJsb2NrLmdldElucHV0UGluc0xpc3QoKS5mb3JFYWNoKChwaW46IFBpbikgPT4ge1xuICAgICAgICAgICAgICAgIHBpbi5jb25uZWN0UGlucy5mb3JFYWNoKChjb25uZWN0UGluOiBQaW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3TGluZUluZm86IExpbmVEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2N1cnZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogYmxvY2tJRE1hcC5nZXQoY29ubmVjdFBpbi5ibG9jay51dWlkKSB8fCBjb25uZWN0UGluLmJsb2NrLnV1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW06IGNvbm5lY3RQaW4uZGVzYy50YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogYmxvY2tJRE1hcC5nZXQocGluLmJsb2NrLnV1aWQpIHx8IHBpbi5ibG9jay51dWlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtOiBwaW4uZGVzYy50YWcsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gbmV3TGluZUluZm8uaW5wdXQubm9kZSArIG5ld0xpbmVJbmZvLmlucHV0LnBhcmFtICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xpbmVJbmZvLm91dHB1dC5ub2RlICsgbmV3TGluZUluZm8ub3V0cHV0LnBhcmFtO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9EdXBsaWNhdGVzQXJyYXkuaW5jbHVkZXModGFnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9EdXBsaWNhdGVzQXJyYXkucHVzaCh0YWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3TGluZXMucHVzaChuZXdMaW5lSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUT0RPIOi/memHjOaYryBoYWNrIOWmguaenOS4jeWKoCA1MDAg57q/5p2h5Lya5peg5rOV5re75YqgXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgbmV3TGluZXMuZm9yRWFjaCgobGluZTogTGluZURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoRm9yZ2UuYWRkTGluZShsaW5lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkdXBsaWNhdGUob3B0aW9uczogR3JhcGhFZGl0b3JPdGhlck9wdGlvbnNbXSA9IFtdKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBtZXJnZUdyYXBoRWRpdG9yT3RoZXJPcHRpb25zKG9wdGlvbnMsIHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uYmxvY2tEYXRhICE9PSBudWxsKTtcbiAgICAgICAgY29uc3QgbW91c2VQb2ludCA9IHRoaXMuZ3JhcGhGb3JnZS5jb252ZXJ0Q29vcmRpbmF0ZSh7XG4gICAgICAgICAgICB4OiB0aGlzLm1vdXNlUG9pbnRJblBhbmVsLngsXG4gICAgICAgICAgICB5OiB0aGlzLm1vdXNlUG9pbnRJblBhbmVsLnksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVzZVBhc3RlKG1vdXNlUG9pbnQsIGxpc3QpO1xuICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnNlbmQoTWVzc2FnZVR5cGUuRGlydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB6b29tVG9GaXQoKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhGb3JnZS56b29tVG9GaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDph43nva7vvIzlm57ljp/ngrlcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhGb3JnZS5zZXRHcmFwaEluZm8oe1xuICAgICAgICAgICAgc2NhbGU6IDEsXG4gICAgICAgICAgICBvZmZzZXQ6IHsgeDogMCwgeTogMH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNYXN0ZXIodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBnZXRCbG9ja1RlbXBsYXRlQnlUeXBlKHR5cGUpPy5pc01hc3RlciB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3pgInmi6nnmoTlr7nosaHliJfooahcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkSXRlbXMoKSB7XG4gICAgICAgIGNvbnN0IGxpc3Q6IEdyYXBoRWRpdG9yT3RoZXJPcHRpb25zW10gPSBbXTtcbiAgICAgICAgdGhpcy5ncmFwaEZvcmdlLmdldFNlbGVjdGVkTGluZUxpc3QoKS5mb3JFYWNoKChpdGVtOiBTZWxlY3RMaW5lSW5mbykgPT4ge1xuICAgICAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB1dWlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgIGxpbmVEYXRhOiBpdGVtLnRhcmdldCBhcyBMaW5lRGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncmFwaEZvcmdlLmdldFNlbGVjdGVkQmxvY2tMaXN0KCkuZm9yRWFjaCgoaXRlbTogU2VsZWN0Tm9kZUluZm8pID0+IHtcbiAgICAgICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgdXVpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICBibG9ja0RhdGE6IGl0ZW0udGFyZ2V0IGFzIEJsb2NrRGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVSZWdpc3Rlck1lbnVCeUlucHV0UGlucyhpbnB1dFBpbkRhdGFMaXN0OiBQaW5EYXRhW10pIHtcbiAgICAgICAgaW5wdXRQaW5EYXRhTGlzdC5mb3JFYWNoKChwaW46IFBpbkRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChwaW4uZGV0YWlscy5yZWdpc3RlckVudW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlRHluYW1pY0VudW1Ub1R5cGUocGluLmRldGFpbHMucmVnaXN0ZXJFbnVtVHlwZSwgcGluLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/graph-property-mgr.js b/extensions/shader-graph/dist/shader-graph/base/graph-property-mgr.js new file mode 100644 index 0000000..3f1bcd9 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/graph-property-mgr.js @@ -0,0 +1,151 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphPropertyMgr = void 0; +const interface_1 = require("../interface"); +const index_1 = require("./index"); +const declare_1 = require("../declare"); +/** + * 用于处理 Property + */ +class GraphPropertyMgr { + static get Instance() { + if (!this._instance) { + this._instance = new GraphPropertyMgr(); + } + return this._instance; + } + getPropertyByID(id) { + const currentGraphData = index_1.GraphDataMgr.Instance.getCurrentGraphData(); + return currentGraphData.details.properties.find((property) => property.id === id); + } + updateProperty(id, newPropertyData) { + const currentGraphData = index_1.GraphDataMgr.Instance.getCurrentGraphData(); + currentGraphData.details.properties = currentGraphData.details.properties.map((item) => { + if (item.id === id) { + return newPropertyData; + } + return item; + }); + this.updatePropertyToGraphNode(newPropertyData); + index_1.GraphDataMgr.Instance.setDirty(true); + } + updatePropertyValue(id, value) { + const currentGraphData = index_1.GraphDataMgr.Instance.getCurrentGraphData(); + if (!currentGraphData) + return; + currentGraphData.details.properties = currentGraphData.details.properties.map((item) => { + if (item.id === id) { + item = value; + } + return item; + }); + this.updatePropertyToGraphNode(value); + index_1.GraphDataMgr.Instance.setDirty(true); + } + async iterateProperties(handle) { + const currentGraphData = index_1.GraphDataMgr.Instance.getCurrentGraphData(); + if (!currentGraphData) + return; + for (const property of currentGraphData.details.properties) { + await handle(property, (0, declare_1.getPropertyDefineByType)(property.type)); + } + } + exitsProperty(name) { + const currentGraphData = index_1.GraphDataMgr.Instance.getCurrentGraphData(); + for (const property of currentGraphData.details.properties) { + if (property.name === name) { + return true; + } + } + return false; + } + createProperty(type, name) { + let propertyDefine; + if (typeof type === 'string') { + propertyDefine = (0, declare_1.getPropertyDefineByType)(type); + } + else { + propertyDefine = type; + } + const propertyData = new interface_1.PropertyData(); + propertyData.name = name; + propertyData.type = propertyDefine?.type; + propertyData.declareType = propertyDefine?.declareType; + propertyData.outputPins = []; + propertyDefine?.outputs.forEach((slot, index) => { + propertyData.outputPins.push({ + dataType: slot.type, + value: slot.default, + details: { + connectType: slot.connectType, + }, + }); + }); + return propertyData; + } + addProperty(propertyDefine) { + const currentGraphData = index_1.GraphDataMgr.Instance.getCurrentGraphData(); + // name 是唯一标识,如果存在 name 就重命名 + const existingNames = new Set(currentGraphData.details.properties.map((item) => item.name)); + let newName = propertyDefine.name; + let counter = 1; + while (existingNames.has(newName)) { + newName = `${propertyDefine.name}_${counter}`; + counter++; + } + const propertyData = this.createProperty(propertyDefine, newName); + const properties = currentGraphData.details.properties; + if (properties) { + currentGraphData.details.properties.push(propertyData); + index_1.GraphDataMgr.Instance.setDirty(true); + } + return propertyData; + } + removeProperty(index) { + const currentGraphData = index_1.GraphDataMgr.Instance.getCurrentGraphData(); + const property = currentGraphData.details.properties.splice(index, 1)[0]; + index_1.GraphDataMgr.Instance.reduceToBaseNode(property); + const rootGraphData = index_1.GraphDataMgr.Instance.getRootGraphData(); + this.removePropertyPinInSubGraphNode(rootGraphData, property.id); + for (const graphID in rootGraphData.graphs) { + this.removePropertyPinInSubGraphNode(rootGraphData.graphs[graphID], property.id); + } + index_1.GraphDataMgr.Instance.setDirty(true); + return property; + } + removePropertyPinInSubGraphNode(graphData, propertyID) { + for (const nodeID in graphData.nodes) { + const node = graphData.nodes[nodeID]; + if (node.type === 'SubGraphNode') { + const index = node.details.inputPins?.findIndex((pin) => pin.details.propertyID === propertyID); + if (index !== -1 && index !== undefined) { + node.details.inputPins?.splice(index, 1); + node.details.inputDescription?.splice(index, 1); + } + } + } + } + /** + * 更新 PropertyNode 数据(title、output) + * @param property + * @private + */ + updatePropertyToGraphNode(property) { + if (!index_1.GraphDataMgr.Instance.graphData) { + console.debug('updatePropertyToGraphNode failed, the graph data is null'); + return; + } + for (const nodeID in index_1.GraphDataMgr.Instance.graphData.nodes) { + const node = index_1.GraphDataMgr.Instance.graphData.nodes[nodeID]; + const details = node && node.details; + if (details && details.propertyID === property.id) { + details.title = property.name; + details.outputPins = property.outputPins; + } + } + index_1.GraphDataMgr.Instance.reload(); + } +} +exports.GraphPropertyMgr = GraphPropertyMgr; +GraphPropertyMgr._instance = null; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtcHJvcGVydHktbWdyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NoYWRlci1ncmFwaC9iYXNlL2dyYXBoLXByb3BlcnR5LW1nci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSw0Q0FBNEM7QUFFNUMsbUNBQXVDO0FBQ3ZDLHdDQUFxRDtBQUVyRDs7R0FFRztBQUNILE1BQWEsZ0JBQWdCO0lBSWxCLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTSxlQUFlLENBQUMsRUFBVTtRQUM3QixNQUFNLGdCQUFnQixHQUFHLG9CQUFZLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFckUsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQXNCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVNLGNBQWMsQ0FBQyxFQUFVLEVBQUUsZUFBNkI7UUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBWSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRXJFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFrQixFQUFFLEVBQUU7WUFDakcsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDaEIsT0FBTyxlQUFlLENBQUM7YUFDMUI7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx5QkFB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QyxRQUFzQjtRQUNwRCxJQUFJLENBQUMsb0JBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ2xDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztZQUMxRSxPQUFPO1NBQ1Y7UUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLG9CQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDeEQsTUFBTSxJQUFJLEdBQUcsb0JBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQXVCLENBQUM7WUFDckQsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQzlCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQzthQUM1QztTQUNKO1FBRUQsb0JBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7QUEvSkwsNENBZ0tDO0FBOUpVLDBCQUFTLEdBQTRCLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSU5vZGVEZXRhaWxzIH0gZnJvbSAnLi4vaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlEZWZpbmUsIFNsb3REZWZpbmUgfSBmcm9tICcuLi8uLi8uLi9AdHlwZXMvc2hhZGVyLW5vZGUtdHlwZSc7XG5pbXBvcnQgdHlwZSB7IEJsb2NrRGF0YSwgR3JhcGhEYXRhIH0gZnJvbSAnLi4vLi4vYmxvY2stZm9yZ2UvaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgUHJvcGVydHlEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgR3JhcGhEYXRhTWdyIH0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eURlZmluZUJ5VHlwZSB9IGZyb20gJy4uL2RlY2xhcmUnO1xuXG4vKipcbiAqIOeUqOS6juWkhOeQhiBQcm9wZXJ0eVxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhQcm9wZXJ0eU1nciB7XG5cbiAgICBzdGF0aWMgX2luc3RhbmNlOiBHcmFwaFByb3BlcnR5TWdyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBHcmFwaFByb3BlcnR5TWdyIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgR3JhcGhQcm9wZXJ0eU1ncigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJvcGVydHlCeUlEKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEdyYXBoRGF0YSA9IEdyYXBoRGF0YU1nci5JbnN0YW5jZS5nZXRDdXJyZW50R3JhcGhEYXRhKCk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRHcmFwaERhdGEuZGV0YWlscy5wcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5OiBQcm9wZXJ0eURhdGEpID0+IHByb3BlcnR5LmlkID09PSBpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVByb3BlcnR5KGlkOiBzdHJpbmcsIG5ld1Byb3BlcnR5RGF0YTogUHJvcGVydHlEYXRhKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRHcmFwaERhdGEgPSBHcmFwaERhdGFNZ3IuSW5zdGFuY2UuZ2V0Q3VycmVudEdyYXBoRGF0YSgpO1xuXG4gICAgICAgIGN1cnJlbnRHcmFwaERhdGEuZGV0YWlscy5wcm9wZXJ0aWVzID0gY3VycmVudEdyYXBoRGF0YS5kZXRhaWxzLnByb3BlcnRpZXMubWFwKChpdGVtOiBQcm9wZXJ0eURhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdQcm9wZXJ0eURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlUHJvcGVydHlUb0dyYXBoTm9kZShuZXdQcm9wZXJ0eURhdGEpO1xuICAgICAgICBHcmFwaERhdGFNZ3IuSW5zdGFuY2Uuc2V0RGlydHkodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVByb3BlcnR5VmFsdWUoaWQ6IHN0cmluZywgdmFsdWU6IFByb3BlcnR5RGF0YSkge1xuICAgICAgICBjb25zdCBjdXJyZW50R3JhcGhEYXRhID0gR3JhcGhEYXRhTWdyLkluc3RhbmNlLmdldEN1cnJlbnRHcmFwaERhdGEoKTtcbiAgICAgICAgaWYgKCFjdXJyZW50R3JhcGhEYXRhKSByZXR1cm47XG5cbiAgICAgICAgY3VycmVudEdyYXBoRGF0YS5kZXRhaWxzLnByb3BlcnRpZXMgPSBjdXJyZW50R3JhcGhEYXRhLmRldGFpbHMucHJvcGVydGllcy5tYXAoKGl0ZW06IFByb3BlcnR5RGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZVByb3BlcnR5VG9HcmFwaE5vZGUodmFsdWUpO1xuICAgICAgICBHcmFwaERhdGFNZ3IuSW5zdGFuY2Uuc2V0RGlydHkodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGl0ZXJhdGVQcm9wZXJ0aWVzKGhhbmRsZTogKHByb3BlcnR5OiBQcm9wZXJ0eURhdGEsIHByb3BlcnR5RGVmaW5lOiBQcm9wZXJ0eURlZmluZSB8IHVuZGVmaW5lZCkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50R3JhcGhEYXRhID0gR3JhcGhEYXRhTWdyLkluc3RhbmNlLmdldEN1cnJlbnRHcmFwaERhdGEoKTtcbiAgICAgICAgaWYgKCFjdXJyZW50R3JhcGhEYXRhKSByZXR1cm47XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBjdXJyZW50R3JhcGhEYXRhLmRldGFpbHMucHJvcGVydGllcykge1xuICAgICAgICAgICAgYXdhaXQgaGFuZGxlKHByb3BlcnR5LCBnZXRQcm9wZXJ0eURlZmluZUJ5VHlwZShwcm9wZXJ0eS50eXBlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZXhpdHNQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEdyYXBoRGF0YSA9IEdyYXBoRGF0YU1nci5JbnN0YW5jZS5nZXRDdXJyZW50R3JhcGhEYXRhKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBjdXJyZW50R3JhcGhEYXRhLmRldGFpbHMucHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5Lm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVByb3BlcnR5KHR5cGU6IHN0cmluZyB8IFByb3BlcnR5RGVmaW5lLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHByb3BlcnR5RGVmaW5lOiBQcm9wZXJ0eURlZmluZTtcbiAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcHJvcGVydHlEZWZpbmUgPSBnZXRQcm9wZXJ0eURlZmluZUJ5VHlwZSh0eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3BlcnR5RGVmaW5lID0gdHlwZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9wZXJ0eURhdGE6IFByb3BlcnR5RGF0YSA9IG5ldyBQcm9wZXJ0eURhdGEoKTtcbiAgICAgICAgcHJvcGVydHlEYXRhLm5hbWUgPSBuYW1lO1xuICAgICAgICBwcm9wZXJ0eURhdGEudHlwZSA9IHByb3BlcnR5RGVmaW5lPy50eXBlO1xuICAgICAgICBwcm9wZXJ0eURhdGEuZGVjbGFyZVR5cGUgPSBwcm9wZXJ0eURlZmluZT8uZGVjbGFyZVR5cGU7XG4gICAgICAgIHByb3BlcnR5RGF0YS5vdXRwdXRQaW5zID0gW107XG5cbiAgICAgICAgcHJvcGVydHlEZWZpbmU/Lm91dHB1dHMuZm9yRWFjaCgoc2xvdDogU2xvdERlZmluZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcHJvcGVydHlEYXRhLm91dHB1dFBpbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IHNsb3QudHlwZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogc2xvdC5kZWZhdWx0LFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29ubmVjdFR5cGU6IHNsb3QuY29ubmVjdFR5cGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5RGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUHJvcGVydHkocHJvcGVydHlEZWZpbmU6IFByb3BlcnR5RGVmaW5lKTogUHJvcGVydHlEYXRhIHtcbiAgICAgICAgY29uc3QgY3VycmVudEdyYXBoRGF0YSA9IEdyYXBoRGF0YU1nci5JbnN0YW5jZS5nZXRDdXJyZW50R3JhcGhEYXRhKCk7XG5cbiAgICAgICAgLy8gbmFtZSDmmK/llK/kuIDmoIfor4bvvIzlpoLmnpzlrZjlnKggbmFtZSDlsLHph43lkb3lkI1cbiAgICAgICAgY29uc3QgZXhpc3RpbmdOYW1lcyA9IG5ldyBTZXQoY3VycmVudEdyYXBoRGF0YS5kZXRhaWxzLnByb3BlcnRpZXMubWFwKChpdGVtOiBQcm9wZXJ0eURhdGEpID0+IGl0ZW0ubmFtZSkpO1xuICAgICAgICBsZXQgbmV3TmFtZSA9IHByb3BlcnR5RGVmaW5lLm5hbWU7XG4gICAgICAgIGxldCBjb3VudGVyID0gMTtcbiAgICAgICAgd2hpbGUgKGV4aXN0aW5nTmFtZXMuaGFzKG5ld05hbWUpKSB7XG4gICAgICAgICAgICBuZXdOYW1lID0gYCR7cHJvcGVydHlEZWZpbmUubmFtZX1fJHtjb3VudGVyfWA7XG4gICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvcGVydHlEYXRhOiBQcm9wZXJ0eURhdGEgfCB1bmRlZmluZWQgPSB0aGlzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnR5RGVmaW5lLCBuZXdOYW1lKTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IGN1cnJlbnRHcmFwaERhdGEuZGV0YWlscy5wcm9wZXJ0aWVzIGFzIFByb3BlcnR5RGF0YVtdO1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgICAgY3VycmVudEdyYXBoRGF0YS5kZXRhaWxzLnByb3BlcnRpZXMucHVzaChwcm9wZXJ0eURhdGEpO1xuICAgICAgICAgICAgR3JhcGhEYXRhTWdyLkluc3RhbmNlLnNldERpcnR5KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eURhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVByb3BlcnR5KGluZGV4OiBudW1iZXIpOiBQcm9wZXJ0eURhdGEge1xuICAgICAgICBjb25zdCBjdXJyZW50R3JhcGhEYXRhID0gR3JhcGhEYXRhTWdyLkluc3RhbmNlLmdldEN1cnJlbnRHcmFwaERhdGEoKTtcblxuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGN1cnJlbnRHcmFwaERhdGEuZGV0YWlscy5wcm9wZXJ0aWVzLnNwbGljZShpbmRleCwgMSlbMF07XG5cbiAgICAgICAgR3JhcGhEYXRhTWdyLkluc3RhbmNlLnJlZHVjZVRvQmFzZU5vZGUocHJvcGVydHkpO1xuXG4gICAgICAgIGNvbnN0IHJvb3RHcmFwaERhdGEgPSBHcmFwaERhdGFNZ3IuSW5zdGFuY2UuZ2V0Um9vdEdyYXBoRGF0YSgpO1xuICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5UGluSW5TdWJHcmFwaE5vZGUocm9vdEdyYXBoRGF0YSwgcHJvcGVydHkuaWQpO1xuICAgICAgICBmb3IgKGNvbnN0IGdyYXBoSUQgaW4gcm9vdEdyYXBoRGF0YS5ncmFwaHMpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHlQaW5JblN1YkdyYXBoTm9kZShyb290R3JhcGhEYXRhLmdyYXBoc1tncmFwaElEXSwgcHJvcGVydHkuaWQpO1xuICAgICAgICB9XG4gICAgICAgIEdyYXBoRGF0YU1nci5JbnN0YW5jZS5zZXREaXJ0eSh0cnVlKTtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlUHJvcGVydHlQaW5JblN1YkdyYXBoTm9kZShncmFwaERhdGE6IEdyYXBoRGF0YSwgcHJvcGVydHlJRDogc3RyaW5nKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlEIGluIGdyYXBoRGF0YS5ub2Rlcykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZTogQmxvY2tEYXRhID0gZ3JhcGhEYXRhLm5vZGVzW25vZGVJRF07XG4gICAgICAgICAgICBpZiAobm9kZS50eXBlID09PSAnU3ViR3JhcGhOb2RlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbm9kZS5kZXRhaWxzLmlucHV0UGlucz8uZmluZEluZGV4KChwaW4pID0+IHBpbi5kZXRhaWxzLnByb3BlcnR5SUQgPT09IHByb3BlcnR5SUQpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmRldGFpbHMuaW5wdXRQaW5zPy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLmRldGFpbHMuaW5wdXREZXNjcmlwdGlvbj8uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrAgUHJvcGVydHlOb2RlIOaVsOaNru+8iHRpdGxl44CBb3V0cHV077yJXG4gICAgICogQHBhcmFtIHByb3BlcnR5XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVByb3BlcnR5VG9HcmFwaE5vZGUocHJvcGVydHk6IFByb3BlcnR5RGF0YSkge1xuICAgICAgICBpZiAoIUdyYXBoRGF0YU1nci5JbnN0YW5jZS5ncmFwaERhdGEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ3VwZGF0ZVByb3BlcnR5VG9HcmFwaE5vZGUgZmFpbGVkLCB0aGUgZ3JhcGggZGF0YSBpcyBudWxsJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG5vZGVJRCBpbiBHcmFwaERhdGFNZ3IuSW5zdGFuY2UuZ3JhcGhEYXRhLm5vZGVzKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gR3JhcGhEYXRhTWdyLkluc3RhbmNlLmdyYXBoRGF0YS5ub2Rlc1tub2RlSURdO1xuICAgICAgICAgICAgY29uc3QgZGV0YWlscyA9IG5vZGUgJiYgbm9kZS5kZXRhaWxzIGFzIElOb2RlRGV0YWlscztcbiAgICAgICAgICAgIGlmIChkZXRhaWxzICYmIGRldGFpbHMucHJvcGVydHlJRCA9PT0gcHJvcGVydHkuaWQpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzLnRpdGxlID0gcHJvcGVydHkubmFtZTtcbiAgICAgICAgICAgICAgICBkZXRhaWxzLm91dHB1dFBpbnMgPSBwcm9wZXJ0eS5vdXRwdXRQaW5zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgR3JhcGhEYXRhTWdyLkluc3RhbmNlLnJlbG9hZCgpO1xuICAgIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/index.js b/extensions/shader-graph/dist/shader-graph/base/index.js new file mode 100644 index 0000000..5c1a0b9 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/index.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphConfigMgr = exports.GraphAssetMgr = exports.MessageMgr = exports.MaskMgr = exports.ForgeMgr = exports.GraphPropertyMgr = exports.GraphDataMgr = exports.GraphEditorMgr = exports.BaseMgr = void 0; +const tslib_1 = require("tslib"); +var base_mgr_1 = require("./base-mgr"); +Object.defineProperty(exports, "BaseMgr", { enumerable: true, get: function () { return base_mgr_1.BaseMgr; } }); +var graph_editor_mgr_1 = require("./graph-editor-mgr"); +Object.defineProperty(exports, "GraphEditorMgr", { enumerable: true, get: function () { return graph_editor_mgr_1.GraphEditorMgr; } }); +var graph_data_mgr_1 = require("./graph-data-mgr"); +Object.defineProperty(exports, "GraphDataMgr", { enumerable: true, get: function () { return graph_data_mgr_1.GraphDataMgr; } }); +var graph_property_mgr_1 = require("./graph-property-mgr"); +Object.defineProperty(exports, "GraphPropertyMgr", { enumerable: true, get: function () { return graph_property_mgr_1.GraphPropertyMgr; } }); +var forge_mgr_1 = require("./forge-mgr"); +Object.defineProperty(exports, "ForgeMgr", { enumerable: true, get: function () { return forge_mgr_1.ForgeMgr; } }); +var mask_mgr_1 = require("./mask-mgr"); +Object.defineProperty(exports, "MaskMgr", { enumerable: true, get: function () { return mask_mgr_1.MaskMgr; } }); +var message_mgr_1 = require("./message-mgr"); +Object.defineProperty(exports, "MessageMgr", { enumerable: true, get: function () { return message_mgr_1.MessageMgr; } }); +var graph_asset_mgr_1 = require("./graph-asset-mgr"); +Object.defineProperty(exports, "GraphAssetMgr", { enumerable: true, get: function () { return graph_asset_mgr_1.GraphAssetMgr; } }); +var graph_config_mgr_1 = require("./graph-config-mgr"); +Object.defineProperty(exports, "GraphConfigMgr", { enumerable: true, get: function () { return graph_config_mgr_1.GraphConfigMgr; } }); +tslib_1.__exportStar(require("./internal"), exports); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2Jhc2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHVDQUFxQztBQUE1QixtR0FBQSxPQUFPLE9BQUE7QUFDaEIsdURBQW9EO0FBQTNDLGtIQUFBLGNBQWMsT0FBQTtBQUN2QixtREFBZ0Q7QUFBdkMsOEdBQUEsWUFBWSxPQUFBO0FBQ3JCLDJEQUF3RDtBQUEvQyxzSEFBQSxnQkFBZ0IsT0FBQTtBQUN6Qix5Q0FBdUM7QUFBOUIscUdBQUEsUUFBUSxPQUFBO0FBQ2pCLHVDQUFxQztBQUE1QixtR0FBQSxPQUFPLE9BQUE7QUFDaEIsNkNBQTJDO0FBQWxDLHlHQUFBLFVBQVUsT0FBQTtBQUNuQixxREFBa0Q7QUFBekMsZ0hBQUEsYUFBYSxPQUFBO0FBQ3RCLHVEQUFvRDtBQUEzQyxrSEFBQSxjQUFjLE9BQUE7QUFDdkIscURBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQmFzZU1nciB9IGZyb20gJy4vYmFzZS1tZ3InO1xuZXhwb3J0IHsgR3JhcGhFZGl0b3JNZ3IgfSBmcm9tICcuL2dyYXBoLWVkaXRvci1tZ3InO1xuZXhwb3J0IHsgR3JhcGhEYXRhTWdyIH0gZnJvbSAnLi9ncmFwaC1kYXRhLW1ncic7XG5leHBvcnQgeyBHcmFwaFByb3BlcnR5TWdyIH0gZnJvbSAnLi9ncmFwaC1wcm9wZXJ0eS1tZ3InO1xuZXhwb3J0IHsgRm9yZ2VNZ3IgfSBmcm9tICcuL2ZvcmdlLW1ncic7XG5leHBvcnQgeyBNYXNrTWdyIH0gZnJvbSAnLi9tYXNrLW1ncic7XG5leHBvcnQgeyBNZXNzYWdlTWdyIH0gZnJvbSAnLi9tZXNzYWdlLW1ncic7XG5leHBvcnQgeyBHcmFwaEFzc2V0TWdyIH0gZnJvbSAnLi9ncmFwaC1hc3NldC1tZ3InO1xuZXhwb3J0IHsgR3JhcGhDb25maWdNZ3IgfSBmcm9tICcuL2dyYXBoLWNvbmZpZy1tZ3InO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbCc7XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/internal.js b/extensions/shader-graph/dist/shader-graph/base/internal.js new file mode 100644 index 0000000..c69da90 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/internal.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MessageType = exports.MaskType = void 0; +var MaskType; +(function (MaskType) { + MaskType[MaskType["None"] = 0] = "None"; + /** + * 等待加载 + */ + MaskType[MaskType["WaitLoad"] = 1] = "WaitLoad"; + /** + * 资源发生变化的时候 + */ + MaskType[MaskType["AssetChange"] = 10] = "AssetChange"; + /** + * 资源丢失 + */ + MaskType[MaskType["AssetMissing"] = 30] = "AssetMissing"; + /** + * 没有选择 shader graph 时,需要提示用户去创建 + */ + MaskType[MaskType["NeedCreateNewAsset"] = 50] = "NeedCreateNewAsset"; + /** + * 是否需要保存并重新加载 + */ + MaskType[MaskType["NeedSaveBeReloadByRename"] = 51] = "NeedSaveBeReloadByRename"; + /** + * 等待场景加载完成 + */ + MaskType[MaskType["WaitSceneReady"] = 100] = "WaitSceneReady"; +})(MaskType = exports.MaskType || (exports.MaskType = {})); +var MessageType; +(function (MessageType) { + // --- assets --- + MessageType["AssetLoaded"] = "asset-loaded"; + MessageType["SceneReady"] = "scene-ready"; + MessageType["SceneClose"] = "scene-closed"; + MessageType["EnterGraph"] = "enter-graph"; + MessageType["SetGraphDataToForge"] = "set-graph-data-to-forge"; + MessageType["Restore"] = "restore"; + MessageType["Loaded"] = "load-completed"; + MessageType["Declared"] = "declare-completed"; + MessageType["Dirty"] = "dirty"; + MessageType["DirtyChanged"] = "dirty-changed"; + MessageType["DraggingProperty"] = "dragging-property"; + // mask + MessageType["UpdateMask"] = "update-mask"; + // menu + MessageType["ShowCreateNodeWindow"] = "show-create-node"; + MessageType["CreateMenuChange"] = "create-menu-change"; + // float window + MessageType["FloatWindowConfigChanged"] = "float-window-config-changed"; + // window + MessageType["Resize"] = "resize"; +})(MessageType = exports.MessageType || (exports.MessageType = {})); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2Jhc2UvaW50ZXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsSUFBWSxRQTBCWDtBQTFCRCxXQUFZLFFBQVE7SUFDaEIsdUNBQVEsQ0FBQTtJQUNSOztPQUVHO0lBQ0gsK0NBQVksQ0FBQTtJQUNaOztPQUVHO0lBQ0gsc0RBQWdCLENBQUE7SUFDaEI7O09BRUc7SUFDSCx3REFBaUIsQ0FBQTtJQUNqQjs7T0FFRztJQUNILG9FQUF1QixDQUFBO0lBQ3ZCOztPQUVHO0lBQ0gsZ0ZBQTZCLENBQUE7SUFDN0I7O09BRUc7SUFDSCw2REFBb0IsQ0FBQTtBQUN4QixDQUFDLEVBMUJXLFFBQVEsR0FBUixnQkFBUSxLQUFSLGdCQUFRLFFBMEJuQjtBQXVCRCxJQUFZLFdBOEJYO0FBOUJELFdBQVksV0FBVztJQUVuQixpQkFBaUI7SUFDakIsMkNBQTRCLENBQUE7SUFFNUIseUNBQTBCLENBQUE7SUFDMUIsMENBQTJCLENBQUE7SUFFM0IseUNBQTBCLENBQUE7SUFFMUIsOERBQStDLENBQUE7SUFDL0Msa0NBQW1CLENBQUE7SUFDbkIsd0NBQXlCLENBQUE7SUFDekIsNkNBQThCLENBQUE7SUFDOUIsOEJBQWUsQ0FBQTtJQUNmLDZDQUE4QixDQUFBO0lBQzlCLHFEQUFzQyxDQUFBO0lBRXRDLE9BQU87SUFDUCx5Q0FBMEIsQ0FBQTtJQUUxQixPQUFPO0lBQ1Asd0RBQXlDLENBQUE7SUFDekMsc0RBQXVDLENBQUE7SUFFdkMsZUFBZTtJQUNmLHVFQUF3RCxDQUFBO0lBRXhELFNBQVM7SUFDVCxnQ0FBaUIsQ0FBQTtBQUNyQixDQUFDLEVBOUJXLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBOEJ0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElOb2RlRGV0YWlscyB9IGZyb20gJy4uL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBCbG9ja0RhdGEsIExpbmVEYXRhIH0gZnJvbSAnLi4vLi4vYmxvY2stZm9yZ2UvaW50ZXJmYWNlJztcblxuZXhwb3J0IGVudW0gTWFza1R5cGUge1xuICAgIE5vbmUgPSAwLFxuICAgIC8qKlxuICAgICAqIOetieW+heWKoOi9vVxuICAgICAqL1xuICAgIFdhaXRMb2FkID0gMSxcbiAgICAvKipcbiAgICAgKiDotYTmupDlj5HnlJ/lj5jljJbnmoTml7blgJlcbiAgICAgKi9cbiAgICBBc3NldENoYW5nZSA9IDEwLFxuICAgIC8qKlxuICAgICAqIOi1hOa6kOS4ouWksVxuICAgICAqL1xuICAgIEFzc2V0TWlzc2luZyA9IDMwLFxuICAgIC8qKlxuICAgICAqIOayoeaciemAieaLqSBzaGFkZXIgZ3JhcGgg5pe277yM6ZyA6KaB5o+Q56S655So5oi35Y675Yib5bu6XG4gICAgICovXG4gICAgTmVlZENyZWF0ZU5ld0Fzc2V0ID0gNTAsXG4gICAgLyoqXG4gICAgICog5piv5ZCm6ZyA6KaB5L+d5a2Y5bm26YeN5paw5Yqg6L29XG4gICAgICovXG4gICAgTmVlZFNhdmVCZVJlbG9hZEJ5UmVuYW1lID0gNTEsXG4gICAgLyoqXG4gICAgICog562J5b6F5Zy65pmv5Yqg6L295a6M5oiQXG4gICAgICovXG4gICAgV2FpdFNjZW5lUmVhZHkgPSAxMDAsXG59XG5cbi8qKlxuICog55So5LqO5re75YqgIGJsb2NrIOWxnuaAp1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoRWRpdG9yQWRkT3B0aW9ucyB7XG4gICAgdXVpZD86IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgeD86IG51bWJlcjtcbiAgICB5PzogbnVtYmVyO1xuICAgIGRvbnRDb252ZXJ0UG9zPzogYm9vbGVhbjtcbiAgICBkZXRhaWxzOiBJTm9kZURldGFpbHM7XG59XG5cbi8qKlxuICog5YW25LuW5a2Y5YKo5pWw5o2u5L6L5aaC5ou36LSd77yM57KY6LS0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhFZGl0b3JPdGhlck9wdGlvbnMge1xuICAgIHV1aWQ6IHN0cmluZztcbiAgICBsaW5lRGF0YT86IExpbmVEYXRhO1xuICAgIGJsb2NrRGF0YT86IEJsb2NrRGF0YTtcbn1cblxuZXhwb3J0IGVudW0gTWVzc2FnZVR5cGUge1xuXG4gICAgLy8gLS0tIGFzc2V0cyAtLS1cbiAgICBBc3NldExvYWRlZCA9ICdhc3NldC1sb2FkZWQnLFxuXG4gICAgU2NlbmVSZWFkeSA9ICdzY2VuZS1yZWFkeScsXG4gICAgU2NlbmVDbG9zZSA9ICdzY2VuZS1jbG9zZWQnLFxuXG4gICAgRW50ZXJHcmFwaCA9ICdlbnRlci1ncmFwaCcsXG5cbiAgICBTZXRHcmFwaERhdGFUb0ZvcmdlID0gJ3NldC1ncmFwaC1kYXRhLXRvLWZvcmdlJyxcbiAgICBSZXN0b3JlID0gJ3Jlc3RvcmUnLFxuICAgIExvYWRlZCA9ICdsb2FkLWNvbXBsZXRlZCcsXG4gICAgRGVjbGFyZWQgPSAnZGVjbGFyZS1jb21wbGV0ZWQnLFxuICAgIERpcnR5ID0gJ2RpcnR5JyxcbiAgICBEaXJ0eUNoYW5nZWQgPSAnZGlydHktY2hhbmdlZCcsXG4gICAgRHJhZ2dpbmdQcm9wZXJ0eSA9ICdkcmFnZ2luZy1wcm9wZXJ0eScsXG5cbiAgICAvLyBtYXNrXG4gICAgVXBkYXRlTWFzayA9ICd1cGRhdGUtbWFzaycsXG5cbiAgICAvLyBtZW51XG4gICAgU2hvd0NyZWF0ZU5vZGVXaW5kb3cgPSAnc2hvdy1jcmVhdGUtbm9kZScsXG4gICAgQ3JlYXRlTWVudUNoYW5nZSA9ICdjcmVhdGUtbWVudS1jaGFuZ2UnLFxuXG4gICAgLy8gZmxvYXQgd2luZG93XG4gICAgRmxvYXRXaW5kb3dDb25maWdDaGFuZ2VkID0gJ2Zsb2F0LXdpbmRvdy1jb25maWctY2hhbmdlZCcsXG5cbiAgICAvLyB3aW5kb3dcbiAgICBSZXNpemUgPSAncmVzaXplJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRmxvYXRXaW5kb3dDb25maWcge1xuICAgIHBvc2l0aW9uPzoge1xuICAgICAgICB0b3A/OiBzdHJpbmc7XG4gICAgICAgIGxlZnQ/OiBzdHJpbmc7XG4gICAgICAgIHJpZ2h0Pzogc3RyaW5nO1xuICAgICAgICBib3R0b20/OiBzdHJpbmc7XG4gICAgfVxuXG4gICAgc2hvdz86IGJvb2xlYW47XG4gICAgd2lkdGg/OiBzdHJpbmc7XG4gICAgaGVpZ2h0Pzogc3RyaW5nO1xuXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGbG9hdFdpbmRvd0NvbmZpZ3Mge1xuICAgIFtuYW1lOiBzdHJpbmddOiBJRmxvYXRXaW5kb3dDb25maWcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyYXBoQ29uZmlnIHtcbiAgICBvZmZzZXQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSxcbiAgICBzY2FsZTogbnVtYmVyLFxuICAgIGZsb2F0V2luZG93czogSUZsb2F0V2luZG93Q29uZmlncyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3JhcGhDb25maWdzIHtcbiAgICBbdXVpZDogc3RyaW5nXTogSUdyYXBoQ29uZmlnXG59XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/mask-mgr.js b/extensions/shader-graph/dist/shader-graph/base/mask-mgr.js new file mode 100644 index 0000000..f1aa284 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/mask-mgr.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MaskMgr = void 0; +const tslib_1 = require("tslib"); +const events_1 = tslib_1.__importDefault(require("events")); +const internal_1 = require("./internal"); +const index_1 = require("./index"); +class MaskMgr extends events_1.default { + constructor() { + super(...arguments); + this.maskQueue = []; + this.displayMaskType = internal_1.MaskType.WaitLoad; + } + get ready() { + return this.displayMaskType === internal_1.MaskType.None; + } + static get Instance() { + if (!this._instance) { + this._instance = new MaskMgr(); + } + return this._instance; + } + show(type) { + if (!this.maskQueue.includes(type)) { + this.maskQueue.push(type); + this.maskQueue.sort((a, b) => { + // 根据枚举值大小进行排序,从大到小 + return b - a; + }); + } + this.updateMask(); + } + hide(type) { + const jumpToNextMask = this.displayMaskType === type; + const index = this.maskQueue.indexOf(type); + if (index !== -1) { + this.maskQueue.splice(index, 1); + } + if (jumpToNextMask) { + this.updateMask(); + } + } + hideAll() { + this.maskQueue = []; + this.updateMask(); + } + updateMask() { + const nextMaskType = this.maskQueue.shift(); + this.displayMaskType = nextMaskType ?? internal_1.MaskType.None; + index_1.MessageMgr.Instance.send(index_1.MessageType.UpdateMask, this.displayMaskType); + } +} +exports.MaskMgr = MaskMgr; +MaskMgr._instance = null; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay1tZ3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2Jhc2UvbWFzay1tZ3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDREQUFrQztBQUNsQyx5Q0FBc0M7QUFDdEMsbUNBQWtEO0FBRWxELE1BQWEsT0FBUSxTQUFRLGdCQUFZO0lBQXpDOztRQUlJLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFFM0Isb0JBQWUsR0FBYSxtQkFBUSxDQUFDLFFBQVEsQ0FBQztJQTZDbEQsQ0FBQztJQTNDRyxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssbUJBQVEsQ0FBQyxJQUFJLENBQUM7SUFDbEQsQ0FBQztJQUVNLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztTQUNsQztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxDQUFDLElBQWM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFXLEVBQUUsQ0FBVyxFQUFFLEVBQUU7Z0JBQzdDLG1CQUFtQjtnQkFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFjO1FBQ2YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUM7UUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDckI7SUFDTCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVTtRQUNOLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLElBQUksbUJBQVEsQ0FBQyxJQUFJLENBQUM7UUFDckQsa0JBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzRSxDQUFDOztBQWxETCwwQkFtREM7QUFqRFUsaUJBQVMsR0FBbUIsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgTWFza1R5cGUgfSBmcm9tICcuL2ludGVybmFsJztcbmltcG9ydCB7IE1lc3NhZ2VNZ3IsIE1lc3NhZ2VUeXBlIH0gZnJvbSAnLi9pbmRleCc7XG5cbmV4cG9ydCBjbGFzcyBNYXNrTWdyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcblxuICAgIHN0YXRpYyBfaW5zdGFuY2U6IE1hc2tNZ3IgfCBudWxsID0gbnVsbDtcblxuICAgIG1hc2tRdWV1ZTogTWFza1R5cGVbXSA9IFtdO1xuXG4gICAgZGlzcGxheU1hc2tUeXBlOiBNYXNrVHlwZSA9IE1hc2tUeXBlLldhaXRMb2FkO1xuXG4gICAgZ2V0IHJlYWR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5TWFza1R5cGUgPT09IE1hc2tUeXBlLk5vbmU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogTWFza01nciB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IE1hc2tNZ3IoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgc2hvdyh0eXBlOiBNYXNrVHlwZSkge1xuICAgICAgICBpZiAoIXRoaXMubWFza1F1ZXVlLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tRdWV1ZS5wdXNoKHR5cGUpO1xuICAgICAgICAgICAgdGhpcy5tYXNrUXVldWUuc29ydCgoYTogTWFza1R5cGUsIGI6IE1hc2tUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8g5qC55o2u5p6a5Li+5YC85aSn5bCP6L+b6KGM5o6S5bqP77yM5LuO5aSn5Yiw5bCPXG4gICAgICAgICAgICAgICAgcmV0dXJuIGIgLSBhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVNYXNrKCk7XG4gICAgfVxuXG4gICAgaGlkZSh0eXBlOiBNYXNrVHlwZSkge1xuICAgICAgICBjb25zdCBqdW1wVG9OZXh0TWFzayA9IHRoaXMuZGlzcGxheU1hc2tUeXBlID09PSB0eXBlO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubWFza1F1ZXVlLmluZGV4T2YodHlwZSk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMubWFza1F1ZXVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGp1bXBUb05leHRNYXNrKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hc2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVBbGwoKSB7XG4gICAgICAgIHRoaXMubWFza1F1ZXVlID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlTWFzaygpO1xuICAgIH1cblxuICAgIHVwZGF0ZU1hc2soKSB7XG4gICAgICAgIGNvbnN0IG5leHRNYXNrVHlwZSA9IHRoaXMubWFza1F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIHRoaXMuZGlzcGxheU1hc2tUeXBlID0gbmV4dE1hc2tUeXBlID8/IE1hc2tUeXBlLk5vbmU7XG4gICAgICAgIE1lc3NhZ2VNZ3IuSW5zdGFuY2Uuc2VuZChNZXNzYWdlVHlwZS5VcGRhdGVNYXNrLCB0aGlzLmRpc3BsYXlNYXNrVHlwZSk7XG4gICAgfVxufVxuXG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/base/message-mgr.js b/extensions/shader-graph/dist/shader-graph/base/message-mgr.js new file mode 100644 index 0000000..218c1e5 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/base/message-mgr.js @@ -0,0 +1,122 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MessageMgr = void 0; +/** + * 这里统一处理消息的发送,普通的,场景的,DB 的 + */ +const internal_1 = require("./internal"); +class MessageMgr { + constructor() { + this.eventCallbacks = new Map(); + // --- Scene --- + this.isSceneReady = undefined; + this.sceneMessages = []; + } + static get Instance() { + if (!this._instance) { + this._instance = new MessageMgr(); + } + return this._instance; + } + send(eventNames, ...args) { + // 模拟发送消息的操作 + const events = Array.isArray(eventNames) ? eventNames : [eventNames]; + for (const eventName of events) { + console.debug(`发送消息 (${eventName}) ${args.length > 0 ? ':' + JSON.stringify(args) : ''}`); + // 触发特定事件的注册的回调函数来处理消息 + const callbacks = this.eventCallbacks.get(eventName); + if (callbacks) { + callbacks.forEach((callback) => { + callback(...args); + }); + } + } + } + unregisterAll() { + this.eventCallbacks.clear(); + this.sceneMessages = []; + } + /** + * 注册一个或多个事件的消息回调函数 + * @param eventNames + * @param callback + */ + register(eventNames, callback) { + const events = Array.isArray(eventNames) ? eventNames : [eventNames]; + for (const eventName of events) { + if (!this.eventCallbacks.has(eventName)) { + this.eventCallbacks.set(eventName, []); + } + this.eventCallbacks.get(eventName)?.push(callback); + } + } + /** + * 取消注册一个或多个事件的消息回调函数 + * @param eventNames + * @param callback + */ + unregister(eventNames, callback) { + const events = Array.isArray(eventNames) ? eventNames : [eventNames]; + for (const eventName of events) { + const callbacks = this.eventCallbacks.get(eventName); + if (callbacks) { + const index = callbacks.indexOf(callback); + if (index !== -1) { + callbacks.splice(index, 1); + } + } + } + } + async checkSceneReady() { + if (!this.isSceneReady) { + this.isSceneReady = await Editor.Message.request('scene', 'query-is-ready'); + } + return this.isSceneReady; + } + setSceneReady(ready) { + this.isSceneReady = ready; + for (let i = 0; i < this.sceneMessages.length; i++) { + const options = this.sceneMessages[i]; + Editor.Message.request('scene', 'execute-scene-script', { + name: 'shader-graph', + method: options.method, + args: options.args, + }).then((response) => { + options.callback(null, response); + }); + } + if (ready) { + MessageMgr.Instance.send(internal_1.MessageType.SceneReady); + } + } + async callSceneMethod(method, args) { + return new Promise((resolve, reject) => { + const callback = function (error, data) { + if (error) { + reject(error); + return; + } + resolve(data); + }; + this.checkSceneReady().then(() => { + if (!this.isSceneReady) { + return this.sceneMessages.push({ + method, + args: args || [], + callback, + }); + } + Editor.Message.request('scene', 'execute-scene-script', { + name: 'shader-graph', + method, + args: args || [], + }).then((response) => { + callback(null, response); + }); + }); + }); + } +} +exports.MessageMgr = MessageMgr; +MessageMgr._instance = null; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1tZ3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2Jhc2UvbWVzc2FnZS1tZ3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCx5Q0FBeUM7QUFVekMsTUFBYSxVQUFVO0lBQXZCO1FBV1ksbUJBQWMsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQXdEbkUsZ0JBQWdCO1FBRWhCLGlCQUFZLEdBQXdCLFNBQVMsQ0FBQztRQUU5QyxrQkFBYSxHQUFvQixFQUFFLENBQUM7SUF1RHhDLENBQUM7SUExSFUsTUFBTSxLQUFLLFFBQVE7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFJTSxJQUFJLENBQUMsVUFBNkIsRUFBRSxHQUFHLElBQVc7UUFDckQsWUFBWTtRQUNaLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sRUFBRTtZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsU0FBUyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUUxRixzQkFBc0I7WUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckQsSUFBSSxTQUFTLEVBQUU7Z0JB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VUFBVSxDQUFDLENBQUM7U0FDcEQ7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFjLEVBQUUsSUFBWTtRQUM5QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLE1BQU0sUUFBUSxHQUFHLFVBQVMsS0FBVSxFQUFFLElBQVM7Z0JBQzNDLElBQUksS0FBSyxFQUFFO29CQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDZCxPQUFPO2lCQUNWO2dCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7d0JBQzNCLE1BQU07d0JBQ04sSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO3dCQUNoQixRQUFRO3FCQUNYLENBQUMsQ0FBQztpQkFDTjtnQkFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUU7b0JBQ3BELElBQUksRUFBRSxjQUFjO29CQUNwQixNQUFNO29CQUNOLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtpQkFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO29CQUN0QixRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQTdITCxnQ0E4SEM7QUE1SFUsb0JBQVMsR0FBc0IsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDov5nph4znu5/kuIDlpITnkIbmtojmga/nmoTlj5HpgIHvvIzmma7pgJrnmoTvvIzlnLrmma/nmoTvvIxEQiDnmoRcbiAqL1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tICcuL2ludGVybmFsJztcblxuaW50ZXJmYWNlIElTY2VuZU1lc3NhZ2Uge1xuICAgIG1ldGhvZDogc3RyaW5nO1xuICAgIGFyZ3M6IGFueVtdLFxuICAgIGNhbGxiYWNrOiBGdW5jdGlvbjtcbn1cblxudHlwZSBNZXNzYWdlQ2FsbGJhY2sgPSAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBNZXNzYWdlTWdyIHtcblxuICAgIHN0YXRpYyBfaW5zdGFuY2U6IE1lc3NhZ2VNZ3IgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IE1lc3NhZ2VNZ3Ige1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBNZXNzYWdlTWdyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXZlbnRDYWxsYmFja3M6IE1hcDxzdHJpbmcsIE1lc3NhZ2VDYWxsYmFja1tdPiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBzZW5kKGV2ZW50TmFtZXM6IHN0cmluZyB8IHN0cmluZ1tdLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyDmqKHmi5/lj5HpgIHmtojmga/nmoTmk43kvZxcbiAgICAgICAgY29uc3QgZXZlbnRzID0gQXJyYXkuaXNBcnJheShldmVudE5hbWVzKSA/IGV2ZW50TmFtZXMgOiBbZXZlbnROYW1lc107XG4gICAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIG9mIGV2ZW50cykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1Zyhg5Y+R6YCB5raI5oGvICgke2V2ZW50TmFtZX0pICR7YXJncy5sZW5ndGggPiAwID8gJzonICsgSlNPTi5zdHJpbmdpZnkoYXJncykgOiAnJ31gKTtcblxuICAgICAgICAgICAgLy8g6Kem5Y+R54m55a6a5LqL5Lu255qE5rOo5YaM55qE5Zue6LCD5Ye95pWw5p2l5aSE55CG5raI5oGvXG4gICAgICAgICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzLmV2ZW50Q2FsbGJhY2tzLmdldChldmVudE5hbWUpO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1bnJlZ2lzdGVyQWxsKCkge1xuICAgICAgICB0aGlzLmV2ZW50Q2FsbGJhY2tzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2NlbmVNZXNzYWdlcyA9IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOazqOWGjOS4gOS4quaIluWkmuS4quS6i+S7tueahOa2iOaBr+Wbnuiwg+WHveaVsFxuICAgICAqIEBwYXJhbSBldmVudE5hbWVzXG4gICAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyKGV2ZW50TmFtZXM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWxsYmFjazogTWVzc2FnZUNhbGxiYWNrKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IEFycmF5LmlzQXJyYXkoZXZlbnROYW1lcykgPyBldmVudE5hbWVzIDogW2V2ZW50TmFtZXNdO1xuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50TmFtZSBvZiBldmVudHMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ldmVudENhbGxiYWNrcy5oYXMoZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDYWxsYmFja3Muc2V0KGV2ZW50TmFtZSwgW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ldmVudENhbGxiYWNrcy5nZXQoZXZlbnROYW1lKT8ucHVzaChjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlj5bmtojms6jlhozkuIDkuKrmiJblpJrkuKrkuovku7bnmoTmtojmga/lm57osIPlh73mlbBcbiAgICAgKiBAcGFyYW0gZXZlbnROYW1lc1xuICAgICAqIEBwYXJhbSBjYWxsYmFja1xuICAgICAqL1xuICAgIHB1YmxpYyB1bnJlZ2lzdGVyKGV2ZW50TmFtZXM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWxsYmFjazogTWVzc2FnZUNhbGxiYWNrKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IEFycmF5LmlzQXJyYXkoZXZlbnROYW1lcykgPyBldmVudE5hbWVzIDogW2V2ZW50TmFtZXNdO1xuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50TmFtZSBvZiBldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuZXZlbnRDYWxsYmFja3MuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0gU2NlbmUgLS0tXG5cbiAgICBpc1NjZW5lUmVhZHk6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBzY2VuZU1lc3NhZ2VzOiBJU2NlbmVNZXNzYWdlW10gPSBbXTtcblxuICAgIGFzeW5jIGNoZWNrU2NlbmVSZWFkeSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2NlbmVSZWFkeSkge1xuICAgICAgICAgICAgdGhpcy5pc1NjZW5lUmVhZHkgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdzY2VuZScsICdxdWVyeS1pcy1yZWFkeScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2NlbmVSZWFkeTtcbiAgICB9XG5cbiAgICBzZXRTY2VuZVJlYWR5KHJlYWR5OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNTY2VuZVJlYWR5ID0gcmVhZHk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNjZW5lTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnNjZW5lTWVzc2FnZXNbaV07XG4gICAgICAgICAgICBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdzY2VuZScsICdleGVjdXRlLXNjZW5lLXNjcmlwdCcsIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2hhZGVyLWdyYXBoJyxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kLFxuICAgICAgICAgICAgICAgIGFyZ3M6IG9wdGlvbnMuYXJncyxcbiAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWFkeSkge1xuICAgICAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS5zZW5kKE1lc3NhZ2VUeXBlLlNjZW5lUmVhZHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY2FsbFNjZW5lTWV0aG9kKG1ldGhvZDogc3RyaW5nLCBhcmdzPzogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBmdW5jdGlvbihlcnJvcjogYW55LCBkYXRhOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5jaGVja1NjZW5lUmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNTY2VuZVJlYWR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjZW5lTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzIHx8IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdzY2VuZScsICdleGVjdXRlLXNjZW5lLXNjcmlwdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NoYWRlci1ncmFwaCcsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyB8fCBbXSxcbiAgICAgICAgICAgICAgICB9KS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/declare/block.js b/extensions/shader-graph/dist/shader-graph/declare/block.js new file mode 100644 index 0000000..0432971 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/declare/block.js @@ -0,0 +1,190 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.declareShaderNodeBlock = exports.registerDynamicEnum = exports.createPin = exports.createPinTag = exports.pinMap = exports.normalBlockCacheMap = void 0; +const block_forge_1 = require("../../block-forge"); +const utils_1 = require("../utils"); +exports.normalBlockCacheMap = new Map(); +exports.pinMap = new Map(); +function createPinTag(blockType, slotTag, slot) { + return (0, utils_1.generatePinID)(slotTag, blockType, slot.type, slot.display); +} +exports.createPinTag = createPinTag; +function createPin(blockType, slotTag, slot, details) { + const tag = createPinTag(blockType, slotTag, slot); + const pinDescription = { + tag: tag, + dataType: slot.type, + value: slot.default, + name: slot.display, + hidePin: slotTag === 'prop', + details: {}, + }; + const pinData = { + dataType: pinDescription.dataType, + value: pinDescription.value, + details: details || {}, + }; + if (slot.type === 'enum' && slot.enum) { + // 注册枚举 + const type = slot.enum._name || `${blockType}_${slot.display}`; + (0, block_forge_1.declareEnum)(type, slot.enum); + pinData.value = slot.default; + pinDescription.details.type = type; + } + else if (slot.type === 'dynamicEnum' && slot.registerEnum) { + (0, block_forge_1.declareEnum)(slot.registerEnum.type, {}); + pinData.value = ''; + pinDescription.details.type = slot.registerEnum.type; + pinDescription.details.defaultValue = slot.default; + } + if ('registerEnumType' in slot) { + pinDescription.details.registerEnumType = slot.registerEnumType; + } + // 用于判断连线 + if ('connectType' in slot) { + pinDescription.details.connectType = slot.connectType; + } + return { + tag: tag, + data: pinData, + description: pinDescription, + }; +} +exports.createPin = createPin; +function createBlockByNodeDefine(nodeDefine) { + const description = { + type: nodeDefine.type, + title: nodeDefine.details?.title || '', + inputPins: [], + outputPins: [], + style: { + headerColor: '#227F9B80', + }, + }; + if (nodeDefine.details?.style !== undefined) { + // 合并 style,已 dump 的 style 为主 + description.style = { ...description.style, ...nodeDefine.details?.style }; + } + const blockData = { + type: nodeDefine.type, + position: { x: 0, y: 0 }, + details: { + inputPins: [], + outputPins: [], + }, + }; + return { + isMaster: nodeDefine.details?.master, + details: nodeDefine.details, + type: blockData.type, + data: blockData, + description: description, + }; +} +/** + * 注册到动态枚举中,如果 value 重复就递增 1 + * 例如 test test_1 + * @param pinData + * @param pinDesc + */ +function registerDynamicEnum(pinData, pinDesc) { + let value = pinData.value; + let index = 1; + let done = false; + while (!done) { + done = (0, block_forge_1.declareDynamicEnumToType)({ + type: pinDesc.details.registerEnumType, + name: value, + }); + if (!done) { + value = pinData.value + `_${index}`; + index++; + } + } + return value; +} +exports.registerDynamicEnum = registerDynamicEnum; +function createDynamicInputPins(blockDesc, details) { + if (details.inputPinDescriptions) { + return details.inputPinDescriptions.map((desc, index) => { + const pinData = details.inputPins[index]; + if (desc.details.registerEnumType) { + pinData.details.registerEnumType = desc.details.registerEnumType; + pinData.value = registerDynamicEnum(pinData, desc); + } + return desc; + }); + } + else { + return blockDesc.inputPins.map((desc, index) => { + const newDesc = JSON.parse(JSON.stringify(desc)); + const pinData = details.inputPins[index]; + if (pinData) { + if (newDesc.dataType === 'any') { + newDesc.dataType = pinData.dataType; + newDesc.value = pinData.value; + } + if (desc.details.registerEnumType) { + pinData.details.registerEnumType = desc.details.registerEnumType; + pinData.value = registerDynamicEnum(pinData, desc); + } + } + return newDesc; + }); + } +} +function createDynamicOutputPins(blockDesc, details) { + if (details.outputPinDescriptions) { + return details.outputPinDescriptions; + } + return blockDesc.outputPins.map((desc, index) => { + const newDesc = JSON.parse(JSON.stringify(desc)); + const pinData = details.outputPins[index]; + if (pinData && newDesc.dataType === 'any') { + newDesc.dataType = pinData.dataType; + newDesc.value = pinData.value; + } + return newDesc; + }); +} +function declareShaderNodeBlock(shaderNodeMap) { + // 清空缓存 + exports.normalBlockCacheMap.clear(); + exports.pinMap.clear(); + for (const [blockType, item] of shaderNodeMap) { + const inputPins = []; + const inputPinDescriptions = []; + item.node.inputs?.forEach((slot) => { + const pin = createPin(blockType, 'input', slot); + inputPins.push(pin.data); + inputPinDescriptions.push(pin.description); + exports.pinMap.set(pin.tag, pin); + }); + item.node.props?.forEach((slot) => { + const pin = createPin(blockType, 'prop', slot); + inputPins.push(pin.data); + inputPinDescriptions.push(pin.description); + exports.pinMap.set(pin.tag, pin); + }); + const outputPins = []; + const outputPinDescriptions = []; + item.node.outputs?.forEach((slot) => { + const pin = createPin(blockType, 'out', slot); + outputPins.push(pin.data); + outputPinDescriptions.push(pin.description); + exports.pinMap.set(pin.tag, pin); + }); + const block = createBlockByNodeDefine(item); + block.data.details.inputPins = inputPins; + block.data.details.outputPins = outputPins; + block.description.inputPins = inputPinDescriptions; + block.description.outputPins = outputPinDescriptions; + block.description.createDynamicInputPins = createDynamicInputPins; + block.description.createDynamicOutputPins = createDynamicOutputPins; + exports.normalBlockCacheMap.set(block.type, block); + // 注册 + (0, block_forge_1.declareBlock)(block.description); + } +} +exports.declareShaderNodeBlock = declareShaderNodeBlock; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2RlY2xhcmUvYmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsbURBQXdGO0FBQ3hGLG9DQUF5QztBQUk1QixRQUFBLG1CQUFtQixHQUFtQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBRWhFLFFBQUEsTUFBTSxHQUFpRSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBRTlGLFNBQWdCLFlBQVksQ0FBQyxTQUFpQixFQUFFLE9BQWdCLEVBQUUsSUFBZ0I7SUFDOUUsT0FBTyxJQUFBLHFCQUFhLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRkQsb0NBRUM7QUFDRCxTQUFnQixTQUFTLENBQUMsU0FBaUIsRUFBRSxPQUFnQixFQUFFLElBQWdCLEVBQUUsT0FBZ0M7SUFDN0csTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxjQUFjLEdBQW9CO1FBQ3BDLEdBQUcsRUFBRSxHQUFHO1FBQ1IsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTztRQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU87UUFDbEIsT0FBTyxFQUFFLE9BQU8sS0FBSyxNQUFNO1FBQzNCLE9BQU8sRUFBRSxFQUFFO0tBQ2QsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFZO1FBQ3JCLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtRQUNqQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7UUFDM0IsT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFO0tBQ3pCLENBQUM7SUFFRixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FB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IHR5cGUgeyBCbG9ja1RlbXBsYXRlRGF0YSB9IGZyb20gJy4uL2ludGVybmFsJztcbmltcG9ydCB0eXBlIHsgQmxvY2tEYXRhLCBJQmxvY2tEZXNjcmlwdGlvbiwgSVBpbkRlc2NyaXB0aW9uLCBQaW5EYXRhIH0gZnJvbSAnLi4vLi4vYmxvY2stZm9yZ2UvaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlEZWZpbmUsIE5vZGVEZWZpbmUsIFNsb3REZWZpbmUgfSBmcm9tICcuLi8uLi8uLi9AdHlwZXMvc2hhZGVyLW5vZGUtdHlwZSc7XG5cbmltcG9ydCB7IGRlY2xhcmVCbG9jaywgZGVjbGFyZUVudW0sIGRlY2xhcmVEeW5hbWljRW51bVRvVHlwZSB9IGZyb20gJy4uLy4uL2Jsb2NrLWZvcmdlJztcbmltcG9ydCB7IGdlbmVyYXRlUGluSUQgfSBmcm9tICcuLi91dGlscyc7XG5cbnR5cGUgU2xvdFRhZyA9ICdpbnB1dCcgfCAnb3V0JyB8ICdwcm9wJztcblxuZXhwb3J0IGNvbnN0IG5vcm1hbEJsb2NrQ2FjaGVNYXA6IE1hcDxzdHJpbmcsIEJsb2NrVGVtcGxhdGVEYXRhPiA9IG5ldyBNYXAoKTtcblxuZXhwb3J0IGNvbnN0IHBpbk1hcDogTWFwPHN0cmluZywgeyBkYXRhOiBQaW5EYXRhLCBkZXNjcmlwdGlvbjogSVBpbkRlc2NyaXB0aW9uIH0+ID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGluVGFnKGJsb2NrVHlwZTogc3RyaW5nLCBzbG90VGFnOiBTbG90VGFnLCBzbG90OiBTbG90RGVmaW5lKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlUGluSUQoc2xvdFRhZywgYmxvY2tUeXBlLCBzbG90LnR5cGUsIHNsb3QuZGlzcGxheSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGluKGJsb2NrVHlwZTogc3RyaW5nLCBzbG90VGFnOiBTbG90VGFnLCBzbG90OiBTbG90RGVmaW5lLCBkZXRhaWxzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGNvbnN0IHRhZyA9IGNyZWF0ZVBpblRhZyhibG9ja1R5cGUsIHNsb3RUYWcsIHNsb3QpO1xuICAgIGNvbnN0IHBpbkRlc2NyaXB0aW9uOiBJUGluRGVzY3JpcHRpb24gPSB7XG4gICAgICAgIHRhZzogdGFnLFxuICAgICAgICBkYXRhVHlwZTogc2xvdC50eXBlLFxuICAgICAgICB2YWx1ZTogc2xvdC5kZWZhdWx0LFxuICAgICAgICBuYW1lOiBzbG90LmRpc3BsYXksXG4gICAgICAgIGhpZGVQaW46IHNsb3RUYWcgPT09ICdwcm9wJyxcbiAgICAgICAgZGV0YWlsczoge30sXG4gICAgfTtcbiAgICBjb25zdCBwaW5EYXRhOiBQaW5EYXRhID0ge1xuICAgICAgICBkYXRhVHlwZTogcGluRGVzY3JpcHRpb24uZGF0YVR5cGUsXG4gICAgICAgIHZhbHVlOiBwaW5EZXNjcmlwdGlvbi52YWx1ZSxcbiAgICAgICAgZGV0YWlsczogZGV0YWlscyB8fCB7fSxcbiAgICB9O1xuXG4gICAgaWYgKHNsb3QudHlwZSA9PT0gJ2VudW0nICYmIHNsb3QuZW51bSkge1xuICAgICAgICAvLyDms6jlhozmnprkuL5cbiAgICAgICAgY29uc3QgdHlwZSA9IHNsb3QuZW51bS5fbmFtZSB8fCBgJHtibG9ja1R5cGV9XyR7c2xvdC5kaXNwbGF5fWA7XG4gICAgICAgIGRlY2xhcmVFbnVtKHR5cGUsIHNsb3QuZW51bSk7XG4gICAgICAgIHBpbkRhdGEudmFsdWUgPSBzbG90LmRlZmF1bHQ7XG4gICAgICAgIHBpbkRlc2NyaXB0aW9uLmRldGFpbHMudHlwZSA9IHR5cGU7XG4gICAgfSBlbHNlIGlmIChzbG90LnR5cGUgPT09ICdkeW5hbWljRW51bScgJiYgc2xvdC5yZWdpc3RlckVudW0pIHtcbiAgICAgICAgZGVjbGFyZUVudW0oc2xvdC5yZWdpc3RlckVudW0udHlwZSwge30pO1xuICAgICAgICBwaW5EYXRhLnZhbHVlID0gJyc7XG4gICAgICAgIHBpbkRlc2NyaXB0aW9uLmRldGFpbHMudHlwZSA9IHNsb3QucmVnaXN0ZXJFbnVtLnR5cGU7XG4gICAgICAgIHBpbkRlc2NyaXB0aW9uLmRldGFpbHMuZGVmYXVsdFZhbHVlID0gc2xvdC5kZWZhdWx0O1xuICAgIH1cblxuICAgIGlmICgncmVnaXN0ZXJFbnVtVHlwZScgaW4gc2xvdCkge1xuICAgICAgICBwaW5EZXNjcmlwdGlvbi5kZXRhaWxzLnJlZ2lzdGVyRW51bVR5cGUgPSBzbG90LnJlZ2lzdGVyRW51bVR5cGU7XG4gICAgfVxuXG4gICAgLy8g55So5LqO5Yik5pat6L+e57q/XG4gICAgaWYgKCdjb25uZWN0VHlwZScgaW4gc2xvdCkge1xuICAgICAgICBwaW5EZXNjcmlwdGlvbi5kZXRhaWxzLmNvbm5lY3RUeXBlID0gc2xvdC5jb25uZWN0VHlwZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgZGF0YTogcGluRGF0YSxcbiAgICAgICAgZGVzY3JpcHRpb246IHBpbkRlc2NyaXB0aW9uLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJsb2NrQnlOb2RlRGVmaW5lKG5vZGVEZWZpbmU6IE5vZGVEZWZpbmUpIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbjogSUJsb2NrRGVzY3JpcHRpb24gPSB7XG4gICAgICAgIHR5cGU6IG5vZGVEZWZpbmUudHlwZSxcbiAgICAgICAgdGl0bGU6IG5vZGVEZWZpbmUuZGV0YWlscz8udGl0bGUgfHwgJycsXG4gICAgICAgIGlucHV0UGluczogW10sXG4gICAgICAgIG91dHB1dFBpbnM6IFtdLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgaGVhZGVyQ29sb3I6ICcjMjI3RjlCODAnLFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAobm9kZURlZmluZS5kZXRhaWxzPy5zdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIOWQiOW5tiBzdHlsZe+8jOW3siBkdW1wIOeahCBzdHlsZSDkuLrkuLtcbiAgICAgICAgZGVzY3JpcHRpb24uc3R5bGUgPSB7IC4uLmRlc2NyaXB0aW9uLnN0eWxlLCAuLi5ub2RlRGVmaW5lLmRldGFpbHM/LnN0eWxlIH07XG4gICAgfVxuXG4gICAgY29uc3QgYmxvY2tEYXRhOiBCbG9ja0RhdGEgPSB7XG4gICAgICAgIHR5cGU6IG5vZGVEZWZpbmUudHlwZSxcbiAgICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgICAgICBkZXRhaWxzOiB7XG4gICAgICAgICAgICBpbnB1dFBpbnM6IFtdLFxuICAgICAgICAgICAgb3V0cHV0UGluczogW10sXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpc01hc3Rlcjogbm9kZURlZmluZS5kZXRhaWxzPy5tYXN0ZXIsXG4gICAgICAgIGRldGFpbHM6IG5vZGVEZWZpbmUuZGV0YWlscyxcbiAgICAgICAgdHlwZTogYmxvY2tEYXRhLnR5cGUsXG4gICAgICAgIGRhdGE6IGJsb2NrRGF0YSxcbiAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgIH07XG59XG5cbi8qKlxuICog5rOo5YaM5Yiw5Yqo5oCB5p6a5Li+5Lit77yM5aaC5p6cIHZhbHVlIOmHjeWkjeWwsemAkuWiniAxXG4gKiDkvovlpoIgdGVzdCB0ZXN0XzFcbiAqIEBwYXJhbSBwaW5EYXRhXG4gKiBAcGFyYW0gcGluRGVzY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEeW5hbWljRW51bShwaW5EYXRhOiBQaW5EYXRhLCBwaW5EZXNjOiBJUGluRGVzY3JpcHRpb24pIHtcbiAgICBsZXQgdmFsdWUgPSBwaW5EYXRhLnZhbHVlO1xuICAgIGxldCBpbmRleCA9IDE7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICB3aGlsZSAoIWRvbmUpIHtcbiAgICAgICAgZG9uZSA9IGRlY2xhcmVEeW5hbWljRW51bVRvVHlwZSh7XG4gICAgICAgICAgICB0eXBlOiBwaW5EZXNjLmRldGFpbHMucmVnaXN0ZXJFbnVtVHlwZSxcbiAgICAgICAgICAgIG5hbWU6IHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHBpbkRhdGEudmFsdWUgKyBgXyR7aW5kZXh9YDtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEeW5hbWljSW5wdXRQaW5zKGJsb2NrRGVzYzogSUJsb2NrRGVzY3JpcHRpb24sIGRldGFpbHM6IHtcbiAgICBpbnB1dFBpbnM6IFBpbkRhdGFbXTtcbiAgICBpbnB1dFBpbkRlc2NyaXB0aW9ucz86IElQaW5EZXNjcmlwdGlvbltdO1xuICAgIFtrZXk6IHN0cmluZ106IGFueVxufSk6IElQaW5EZXNjcmlwdGlvbltdIHtcbiAgICBpZiAoZGV0YWlscy5pbnB1dFBpbkRlc2NyaXB0aW9ucykge1xuICAgICAgICByZXR1cm4gZGV0YWlscy5pbnB1dFBpbkRlc2NyaXB0aW9ucy5tYXAoKGRlc2M6IElQaW5EZXNjcmlwdGlvbiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGluRGF0YSA9IGRldGFpbHMuaW5wdXRQaW5zW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChkZXNjLmRldGFpbHMucmVnaXN0ZXJFbnVtVHlwZSkge1xuICAgICAgICAgICAgICAgIHBpbkRhdGEuZGV0YWlscy5yZWdpc3RlckVudW1UeXBlID0gZGVzYy5kZXRhaWxzLnJlZ2lzdGVyRW51bVR5cGU7XG4gICAgICAgICAgICAgICAgcGluRGF0YS52YWx1ZSA9IHJlZ2lzdGVyRHluYW1pY0VudW0ocGluRGF0YSwgZGVzYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzYztcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJsb2NrRGVzYy5pbnB1dFBpbnMubWFwKChkZXNjOiBJUGluRGVzY3JpcHRpb24sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Rlc2MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlc2MpKTtcbiAgICAgICAgICAgIGNvbnN0IHBpbkRhdGEgPSBkZXRhaWxzLmlucHV0UGluc1tpbmRleF07XG4gICAgICAgICAgICBpZiAocGluRGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChuZXdEZXNjLmRhdGFUeXBlID09PSAnYW55Jykge1xuICAgICAgICAgICAgICAgICAgICBuZXdEZXNjLmRhdGFUeXBlID0gcGluRGF0YS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgbmV3RGVzYy52YWx1ZSA9IHBpbkRhdGEudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkZXNjLmRldGFpbHMucmVnaXN0ZXJFbnVtVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBwaW5EYXRhLmRldGFpbHMucmVnaXN0ZXJFbnVtVHlwZSA9IGRlc2MuZGV0YWlscy5yZWdpc3RlckVudW1UeXBlO1xuICAgICAgICAgICAgICAgICAgICBwaW5EYXRhLnZhbHVlID0gcmVnaXN0ZXJEeW5hbWljRW51bShwaW5EYXRhLCBkZXNjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3RGVzYztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEeW5hbWljT3V0cHV0UGlucyhibG9ja0Rlc2M6IElCbG9ja0Rlc2NyaXB0aW9uLCBkZXRhaWxzOiB7XG4gICAgb3V0cHV0UGluczogUGluRGF0YVtdO1xuICAgIG91dHB1dFBpbkRlc2NyaXB0aW9uczogSVBpbkRlc2NyaXB0aW9uW107XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufSk6IElQaW5EZXNjcmlwdGlvbltdIHtcbiAgICBpZiAoZGV0YWlscy5vdXRwdXRQaW5EZXNjcmlwdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRldGFpbHMub3V0cHV0UGluRGVzY3JpcHRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gYmxvY2tEZXNjLm91dHB1dFBpbnMubWFwKChkZXNjOiBJUGluRGVzY3JpcHRpb24sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgbmV3RGVzYyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVzYykpO1xuICAgICAgICBjb25zdCBwaW5EYXRhID0gZGV0YWlscy5vdXRwdXRQaW5zW2luZGV4XTtcbiAgICAgICAgaWYgKHBpbkRhdGEgJiYgbmV3RGVzYy5kYXRhVHlwZSA9PT0gJ2FueScpIHtcbiAgICAgICAgICAgIG5ld0Rlc2MuZGF0YVR5cGUgPSBwaW5EYXRhLmRhdGFUeXBlO1xuICAgICAgICAgICAgbmV3RGVzYy52YWx1ZSA9IHBpbkRhdGEudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0Rlc2M7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJlU2hhZGVyTm9kZUJsb2NrKHNoYWRlck5vZGVNYXA6IE1hcDxzdHJpbmcsIE5vZGVEZWZpbmU+KSB7XG4gICAgLy8g5riF56m657yT5a2YXG4gICAgbm9ybWFsQmxvY2tDYWNoZU1hcC5jbGVhcigpO1xuICAgIHBpbk1hcC5jbGVhcigpO1xuICAgIGZvciAoY29uc3QgW2Jsb2NrVHlwZSwgaXRlbV0gb2Ygc2hhZGVyTm9kZU1hcCkge1xuICAgICAgICBjb25zdCBpbnB1dFBpbnM6IFBpbkRhdGFbXSA9IFtdO1xuICAgICAgICBjb25zdCBpbnB1dFBpbkRlc2NyaXB0aW9uczogSVBpbkRlc2NyaXB0aW9uW10gPSBbXTtcbiAgICAgICAgaXRlbS5ub2RlLmlucHV0cz8uZm9yRWFjaCgoc2xvdDogU2xvdERlZmluZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGluID0gY3JlYXRlUGluKGJsb2NrVHlwZSwgJ2lucHV0Jywgc2xvdCk7XG4gICAgICAgICAgICBpbnB1dFBpbnMucHVzaChwaW4uZGF0YSk7XG4gICAgICAgICAgICBpbnB1dFBpbkRlc2NyaXB0aW9ucy5wdXNoKHBpbi5kZXNjcmlwdGlvbik7XG5cbiAgICAgICAgICAgIHBpbk1hcC5zZXQocGluLnRhZywgcGluKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXRlbS5ub2RlLnByb3BzPy5mb3JFYWNoKChzbG90OiBTbG90RGVmaW5lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwaW4gPSBjcmVhdGVQaW4oYmxvY2tUeXBlLCAncHJvcCcsIHNsb3QpO1xuXG4gICAgICAgICAgICBpbnB1dFBpbnMucHVzaChwaW4uZGF0YSk7XG4gICAgICAgICAgICBpbnB1dFBpbkRlc2NyaXB0aW9ucy5wdXNoKHBpbi5kZXNjcmlwdGlvbik7XG5cbiAgICAgICAgICAgIHBpbk1hcC5zZXQocGluLnRhZywgcGluKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0UGluczogUGluRGF0YVtdID0gW107XG4gICAgICAgIGNvbnN0IG91dHB1dFBpbkRlc2NyaXB0aW9uczogSVBpbkRlc2NyaXB0aW9uW10gPSBbXTtcbiAgICAgICAgaXRlbS5ub2RlLm91dHB1dHM/LmZvckVhY2goKHNsb3Q6IFNsb3REZWZpbmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9IGNyZWF0ZVBpbihibG9ja1R5cGUsICdvdXQnLCBzbG90KTtcbiAgICAgICAgICAgIG91dHB1dFBpbnMucHVzaChwaW4uZGF0YSk7XG4gICAgICAgICAgICBvdXRwdXRQaW5EZXNjcmlwdGlvbnMucHVzaChwaW4uZGVzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICBwaW5NYXAuc2V0KHBpbi50YWcsIHBpbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGJsb2NrID0gY3JlYXRlQmxvY2tCeU5vZGVEZWZpbmUoaXRlbSk7XG4gICAgICAgIGJsb2NrLmRhdGEuZGV0YWlscy5pbnB1dFBpbnMgPSBpbnB1dFBpbnM7XG4gICAgICAgIGJsb2NrLmRhdGEuZGV0YWlscy5vdXRwdXRQaW5zID0gb3V0cHV0UGlucztcbiAgICAgICAgYmxvY2suZGVzY3JpcHRpb24uaW5wdXRQaW5zID0gaW5wdXRQaW5EZXNjcmlwdGlvbnM7XG4gICAgICAgIGJsb2NrLmRlc2NyaXB0aW9uLm91dHB1dFBpbnMgPSBvdXRwdXRQaW5EZXNjcmlwdGlvbnM7XG4gICAgICAgIGJsb2NrLmRlc2NyaXB0aW9uLmNyZWF0ZUR5bmFtaWNJbnB1dFBpbnMgPSBjcmVhdGVEeW5hbWljSW5wdXRQaW5zO1xuICAgICAgICBibG9jay5kZXNjcmlwdGlvbi5jcmVhdGVEeW5hbWljT3V0cHV0UGlucyA9IGNyZWF0ZUR5bmFtaWNPdXRwdXRQaW5zO1xuICAgICAgICBub3JtYWxCbG9ja0NhY2hlTWFwLnNldChibG9jay50eXBlLCBibG9jayk7XG4gICAgICAgIC8vIOazqOWGjFxuICAgICAgICBkZWNsYXJlQmxvY2soYmxvY2suZGVzY3JpcHRpb24pO1xuICAgIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/declare/graph.js b/extensions/shader-graph/dist/shader-graph/declare/graph.js new file mode 100644 index 0000000..5f8e71b --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/declare/graph.js @@ -0,0 +1,118 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createDefaultGraph = void 0; +const menu_1 = require("../menu"); +const base_1 = require("../base"); +function createDefaultGraph() { + return { + type: 'Graph', + style: { + showOriginPoint: true, + originPointColor: 'rgba(68,68,68,0.3)', + gridColor: 'rgba(68,68,68,0.3)', + backgroundColor: '#050505', + }, + validator: { + dataLink(nodes, lines, line, input, output) { + const inputBlock = base_1.ForgeMgr.Instance.getBlockByUuid(line.input.node); + let inputConnectType = '', outputConnectType = ''; + const inputTag = input.name || input.tag; + if (input.direction === 'input') { + const inputPinData = inputBlock.getInputPin(inputTag); + inputConnectType = inputPinData?.desc.details.connectType; + } + else if (input.direction === 'output') { + const inputPinData = inputBlock.getOutputPin(inputTag); + if (inputBlock.block.type === 'PropertyNode') { + inputConnectType = inputPinData?.value.details.connectType; + } + else { + inputConnectType = inputPinData?.desc.details.connectType; + } + } + const outputBlock = base_1.ForgeMgr.Instance.getBlockByUuid(line.output.node); + const outputTag = output.name || output.tag; + if (output.direction === 'input') { + const outputPinData = outputBlock.getInputPin(outputTag); + outputConnectType = outputPinData?.desc.details.connectType; + } + else if (output.direction === 'output') { + const outputPinData = outputBlock.getOutputPin(outputTag); + outputConnectType = outputPinData?.desc.details.connectType; + } + // 删除同一个 output 的线条 + base_1.GraphEditorMgr.Instance.deleteLinesByDuplicateOutput(lines, line); + return (inputConnectType === outputConnectType) || (input.type === output.type); + }, + execLink(nodes, lines, line, input, output) { + return true; + }, + deleteLine(...args) { + return true; + }, + // 节点 + createNode(...args) { + return true; + }, + deleteNode(...args) { + return true; + }, + }, + event: { + // Block 选中事件 + onBlockSelected(event) { + return true; + }, + onBlockUnselected(event) { + return true; + }, + // Line 选中事件 + onLineSelected(event) { + return true; + }, + onLineUnselected(event) { + return true; + }, + // Block 点击事件 + onBlockClick(event) { + return true; + }, + onBlockRightClick(event) { + return menu_1.Menu.Instance.popupMenu(event); + }, + onBlockDblClick(event) { + return true; + }, + // Line 点击事件 + onLineClick(event) { + return true; + }, + onLineRightClick(event) { + return menu_1.Menu.Instance.popupMenu(event); + }, + onLineDblClick(event) { + return true; + }, + // Graph 点击事件 + onGraphRightClick(event) { + return menu_1.Menu.Instance.popupMenu(event); + }, + // 连线 + onLineCreated(event) { + return true; + }, + onLineDeleted(event) { + return true; + }, + // 节点 + onBlockCreated(event) { + return true; + }, + onBlockDeleted(event) { + return true; + }, + }, + }; +} +exports.createDefaultGraph = createDefaultGraph; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2RlY2xhcmUvZ3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0Esa0NBQStCO0FBQy9CLGtDQUFtRDtBQUVuRCxTQUFnQixrQkFBa0I7SUFDOUIsT0FBTztRQUNILElBQUksRUFBRSxPQUFPO1FBQ2IsS0FBSyxFQUFFO1lBQ0gsZUFBZSxFQUFFLElBQUk7WUFDckIsZ0JBQWdCLEVBQUUsb0JBQW9CO1lBQ3RDLFNBQVMsRUFBRSxvQkFBb0I7WUFDL0IsZUFBZSxFQUFFLFNBQVM7U0FDN0I7UUFDRCxTQUFTLEVBQUU7WUFDUCxRQUFRLENBQUMsS0FBbUMsRUFBRSxLQUFrQyxFQUFFLElBQWMsRUFBRSxLQUFVLEVBQUUsTUFBVztnQkFDckgsTUFBTSxVQUFVLEdBQUcsZUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckUsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLEVBQUUsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQ3pDLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxPQUFPLEVBQUU7b0JBQzdCLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3RELGdCQUFnQixHQUFHLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztpQkFDN0Q7cUJBQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRTtvQkFDckMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksS0FB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QUFzQjtnQkFDcEMsT0FBTyxXQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxDQUFDO1lBRUQsS0FBSztZQUNMLGFBQWEsQ0FBQyxLQUFnQjtnQkFDMUIsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUNELGFBQWEsQ0FBQyxLQUFnQjtnQkFDMUIsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUVELEtBQUs7WUFDTCxjQUFjLENBQUMsS0FBaUI7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxjQUFjLENBQUMsS0FBaUI7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7U0FDSjtLQUNKLENBQUM7QUFDTixDQUFDO0FBbkhELGdEQW1IQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmxvY2tEYXRhLCBMaW5lRGF0YSwgUGluRGF0YSB9IGZyb20gJy4uLy4uL2Jsb2NrLWZvcmdlL2ludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IElHcmFwaERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vYmxvY2stZm9yZ2UvaW50ZXJmYWNlJztcblxuaW1wb3J0IHtcbiAgICBCbG9ja0V2ZW50LCBCbG9ja01vdXNlRXZlbnQsIEdyYXBoTW91c2VFdmVudCwgTGluZUV2ZW50LCBMaW5lTW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vYmxvY2stZm9yZ2UvZXZlbnQnO1xuXG5pbXBvcnQgeyBNZW51IH0gZnJvbSAnLi4vbWVudSc7XG5pbXBvcnQgeyBHcmFwaEVkaXRvck1nciwgRm9yZ2VNZ3IgfSBmcm9tICcuLi9iYXNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRHcmFwaCgpOiBJR3JhcGhEZXNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ0dyYXBoJyxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIHNob3dPcmlnaW5Qb2ludDogdHJ1ZSxcbiAgICAgICAgICAgIG9yaWdpblBvaW50Q29sb3I6ICdyZ2JhKDY4LDY4LDY4LDAuMyknLFxuICAgICAgICAgICAgZ3JpZENvbG9yOiAncmdiYSg2OCw2OCw2OCwwLjMpJyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMwNTA1MDUnLFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0b3I6IHtcbiAgICAgICAgICAgIGRhdGFMaW5rKG5vZGVzOiB7IFtrZXk6IHN0cmluZ106IEJsb2NrRGF0YSB9LCBsaW5lczogeyBba2V5OiBzdHJpbmddOiBMaW5lRGF0YSB9LCBsaW5lOiBMaW5lRGF0YSwgaW5wdXQ6IGFueSwgb3V0cHV0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dEJsb2NrID0gRm9yZ2VNZ3IuSW5zdGFuY2UuZ2V0QmxvY2tCeVV1aWQobGluZS5pbnB1dC5ub2RlKTtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRDb25uZWN0VHlwZSA9ICcnLCBvdXRwdXRDb25uZWN0VHlwZSA9ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0VGFnID0gaW5wdXQubmFtZSB8fCBpbnB1dC50YWc7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRpcmVjdGlvbiA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFBpbkRhdGEgPSBpbnB1dEJsb2NrLmdldElucHV0UGluKGlucHV0VGFnKTtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25uZWN0VHlwZSA9IGlucHV0UGluRGF0YT8uZGVzYy5kZXRhaWxzLmNvbm5lY3RUeXBlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZGlyZWN0aW9uID09PSAnb3V0cHV0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFBpbkRhdGEgPSBpbnB1dEJsb2NrLmdldE91dHB1dFBpbihpbnB1dFRhZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dEJsb2NrLmJsb2NrLnR5cGUgPT09ICdQcm9wZXJ0eU5vZGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbm5lY3RUeXBlID0gaW5wdXRQaW5EYXRhPy52YWx1ZS5kZXRhaWxzLmNvbm5lY3RUeXBlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25uZWN0VHlwZSA9IGlucHV0UGluRGF0YT8uZGVzYy5kZXRhaWxzLmNvbm5lY3RUeXBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dEJsb2NrID0gRm9yZ2VNZ3IuSW5zdGFuY2UuZ2V0QmxvY2tCeVV1aWQobGluZS5vdXRwdXQubm9kZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0VGFnID0gb3V0cHV0Lm5hbWUgfHwgb3V0cHV0LnRhZztcbiAgICAgICAgICAgICAgICBpZiAob3V0cHV0LmRpcmVjdGlvbiA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRQaW5EYXRhID0gb3V0cHV0QmxvY2suZ2V0SW5wdXRQaW4ob3V0cHV0VGFnKTtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0Q29ubmVjdFR5cGUgPSBvdXRwdXRQaW5EYXRhPy5kZXNjLmRldGFpbHMuY29ubmVjdFR5cGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRwdXQuZGlyZWN0aW9uID09PSAnb3V0cHV0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRQaW5EYXRhID0gb3V0cHV0QmxvY2suZ2V0T3V0cHV0UGluKG91dHB1dFRhZyk7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dENvbm5lY3RUeXBlID0gb3V0cHV0UGluRGF0YT8uZGVzYy5kZXRhaWxzLmNvbm5lY3RUeXBlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIOWIoOmZpOWQjOS4gOS4qiBvdXRwdXQg55qE57q/5p2hXG4gICAgICAgICAgICAgICAgR3JhcGhFZGl0b3JNZ3IuSW5zdGFuY2UuZGVsZXRlTGluZXNCeUR1cGxpY2F0ZU91dHB1dChsaW5lcywgbGluZSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKGlucHV0Q29ubmVjdFR5cGUgPT09IG91dHB1dENvbm5lY3RUeXBlKSB8fCAoaW5wdXQudHlwZSA9PT0gb3V0cHV0LnR5cGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4ZWNMaW5rKG5vZGVzOiBhbnksIGxpbmVzOiBhbnksIGxpbmU6IGFueSwgaW5wdXQ6IGFueSwgb3V0cHV0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVMaW5lKC4uLmFyZ3M6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8g6IqC54K5XG4gICAgICAgICAgICBjcmVhdGVOb2RlKC4uLmFyZ3M6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVsZXRlTm9kZSguLi5hcmdzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgIC8vIEJsb2NrIOmAieS4reS6i+S7tlxuICAgICAgICAgICAgb25CbG9ja1NlbGVjdGVkKGV2ZW50OiBCbG9ja0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25CbG9ja1Vuc2VsZWN0ZWQoZXZlbnQ6IEJsb2NrRXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIExpbmUg6YCJ5Lit5LqL5Lu2XG4gICAgICAgICAgICBvbkxpbmVTZWxlY3RlZChldmVudDogTGluZUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25MaW5lVW5zZWxlY3RlZChldmVudDogTGluZUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBCbG9jayDngrnlh7vkuovku7ZcbiAgICAgICAgICAgIG9uQmxvY2tDbGljayhldmVudDogQmxvY2tNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25CbG9ja1JpZ2h0Q2xpY2soZXZlbnQ6IEJsb2NrTW91c2VFdmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNZW51Lkluc3RhbmNlLnBvcHVwTWVudShldmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25CbG9ja0RibENsaWNrKGV2ZW50OiBCbG9ja01vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIExpbmUg54K55Ye75LqL5Lu2XG4gICAgICAgICAgICBvbkxpbmVDbGljayhldmVudDogTGluZU1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkxpbmVSaWdodENsaWNrKGV2ZW50OiBMaW5lTW91c2VFdmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNZW51Lkluc3RhbmNlLnBvcHVwTWVudShldmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25MaW5lRGJsQ2xpY2soZXZlbnQ6IExpbmVNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBHcmFwaCDngrnlh7vkuovku7ZcbiAgICAgICAgICAgIG9uR3JhcGhSaWdodENsaWNrKGV2ZW50OiBHcmFwaE1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWVudS5JbnN0YW5jZS5wb3B1cE1lbnUoZXZlbnQpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8g6L+e57q/XG4gICAgICAgICAgICBvbkxpbmVDcmVhdGVkKGV2ZW50OiBMaW5lRXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkxpbmVEZWxldGVkKGV2ZW50OiBMaW5lRXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIOiKgueCuVxuICAgICAgICAgICAgb25CbG9ja0NyZWF0ZWQoZXZlbnQ6IEJsb2NrRXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkJsb2NrRGVsZXRlZChldmVudDogQmxvY2tFdmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/declare/index.js b/extensions/shader-graph/dist/shader-graph/declare/index.js new file mode 100644 index 0000000..83be007 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/declare/index.js @@ -0,0 +1,69 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.applyBlockToMenu = exports.declareGraphBlock = exports.iteratePropertyDefines = exports.getBlockDataByType = exports.getPropertyDefineByType = exports.getBlockTemplateByType = exports.declareShaderNodeBlock = exports.declareShaderGraph = void 0; +const block_1 = require("./block"); +Object.defineProperty(exports, "declareShaderNodeBlock", { enumerable: true, get: function () { return block_1.declareShaderNodeBlock; } }); +const menu_1 = require("../menu"); +const block_forge_1 = require("../../block-forge"); +const graph_1 = require("./graph"); +const base_1 = require("../base"); +let shaderNodeMap = new Map(); +let shaderPropertyMap = new Map(); +function getPropertyDefineByType(type) { + return shaderPropertyMap.get(type); +} +exports.getPropertyDefineByType = getPropertyDefineByType; +async function declareGraphBlock() { + const { shaderNodeList, shaderPropertyList } = await base_1.MessageMgr.Instance.callSceneMethod('queryShaderNode'); + shaderNodeMap = new Map(shaderNodeList); + shaderPropertyMap = new Map(shaderPropertyList); + declareShaderGraph(); + (0, block_1.declareShaderNodeBlock)(shaderNodeMap); + applyBlockToMenu(); + base_1.MessageMgr.Instance.send(base_1.MessageType.Declared); +} +exports.declareGraphBlock = declareGraphBlock; +function iteratePropertyDefines(handle) { + shaderPropertyMap.forEach((define) => handle(define)); +} +exports.iteratePropertyDefines = iteratePropertyDefines; +async function getBlockDataByType(type) { + let block = getBlockTemplateByType(type); + if (!block) { + await declareGraphBlock(); + } + block = getBlockTemplateByType(type); + if (!block) { + console.log(`create default shader graph failed, MasterNode: ${type}`); + return; + } + return JSON.parse(JSON.stringify(block.data)); +} +exports.getBlockDataByType = getBlockDataByType; +function declareShaderGraph() { + const defaultGraph = (0, graph_1.createDefaultGraph)(); + if ((0, block_forge_1.hasDeclareGraph)(defaultGraph.type)) + return; + (0, block_forge_1.declareGraph)(defaultGraph); +} +exports.declareShaderGraph = declareShaderGraph; +function applyBlockToMenu() { + block_1.normalBlockCacheMap.forEach((block) => { + if (block.details?.menu) { + menu_1.Menu.Instance.addItemPath(block.details.menu, { + type: block.data.type, + details: {}, + }); + } + }); +} +exports.applyBlockToMenu = applyBlockToMenu; +function getBlockTemplateByType(type) { + const blockTemplate = block_1.normalBlockCacheMap.get(type); + if (blockTemplate) { + return JSON.parse(JSON.stringify(blockTemplate)); + } + console.debug(`get block templates not available by type: ${type}`); +} +exports.getBlockTemplateByType = getBlockTemplateByType; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2RlY2xhcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsbUNBR2lCO0FBd0ViLHVHQXpFQSw4QkFBc0IsT0F5RUE7QUF2RTFCLGtDQUErQjtBQUMvQixtREFBa0U7QUFDbEUsbUNBQTZDO0FBQzdDLGtDQUFrRDtBQUlsRCxJQUFJLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzlCLElBQUksaUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUVsQyxTQUFTLHVCQUF1QixDQUFDLElBQVk7SUFDekMsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQTZERywwREFBdUI7QUEzRDNCLEtBQUssVUFBVSxpQkFBaUI7SUFDNUIsTUFBTSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLE1BQU0saUJBQVUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDNUcsYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFaEQsa0JBQWtCLEVBQUUsQ0FBQztJQUNyQixJQUFBLDhCQUFzQixFQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RDLGdCQUFnQixFQUFFLENBQUM7SUFFbkIsaUJBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQW9ERyw4Q0FBaUI7QUFsRHJCLFNBQVMsc0JBQXNCLENBQUMsTUFBd0M7SUFDcEUsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBc0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQStDRyx3REFBc0I7QUE3QzFCLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxJQUFZO0lBQzFDLElBQUksS0FBSyxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDUixNQUFNLGlCQUFpQixFQUFFLENBQUM7S0FDN0I7SUFDRCxLQUFLLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsbURBQW1ELElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTztLQUNWO0lBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQWlDRyxnREFBa0I7QUEvQnRCLFNBQVMsa0JBQWtCO0lBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUEsMEJBQWtCLEdBQUUsQ0FBQztJQUMxQyxJQUFJLElBQUEsNkJBQWUsRUFBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTztJQUUvQyxJQUFBLDBCQUFZLEVBQUMsWUFBWSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQXNCRyxnREFBa0I7QUFwQnRCLFNBQVMsZ0JBQWdCO0lBQ3JCLDJCQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtRQUNyRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ3JCLFdBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUMxQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUNyQixPQUFPLEVBQUUsRUFBRTthQUNkLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBa0JHLDRDQUFnQjtBQWhCcEIsU0FBUyxzQkFBc0IsQ0FBQyxJQUFZO0lBQ3hDLE1BQU0sYUFBYSxHQUFHLDJCQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRCxJQUFJLGFBQWEsRUFBRTtRQUNmLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDcEQ7SUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFLRyx3REFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJsb2NrVGVtcGxhdGVEYXRhIH0gZnJvbSAnLi4vaW50ZXJuYWwnO1xuXG5pbXBvcnQge1xuICAgIG5vcm1hbEJsb2NrQ2FjaGVNYXAsXG4gICAgZGVjbGFyZVNoYWRlck5vZGVCbG9jayxcbn0gZnJvbSAnLi9ibG9jayc7XG5pbXBvcnQgeyBNZW51IH0gZnJvbSAnLi4vbWVudSc7XG5pbXBvcnQgeyBkZWNsYXJlR3JhcGgsIGhhc0RlY2xhcmVHcmFwaCB9IGZyb20gJy4uLy4uL2Jsb2NrLWZvcmdlJztcbmltcG9ydCB7IGNyZWF0ZURlZmF1bHRHcmFwaCB9IGZyb20gJy4vZ3JhcGgnO1xuaW1wb3J0IHsgTWVzc2FnZU1nciwgTWVzc2FnZVR5cGUgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCB7IFByb3BlcnR5RGVmaW5lIH0gZnJvbSAnLi4vLi4vLi4vQHR5cGVzL3NoYWRlci1ub2RlLXR5cGUnO1xuaW1wb3J0IHsgQmxvY2tEYXRhIH0gZnJvbSAnLi4vLi4vYmxvY2stZm9yZ2UvaW50ZXJmYWNlJztcblxubGV0IHNoYWRlck5vZGVNYXAgPSBuZXcgTWFwKCk7XG5sZXQgc2hhZGVyUHJvcGVydHlNYXAgPSBuZXcgTWFwKCk7XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5RGVmaW5lQnlUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiBzaGFkZXJQcm9wZXJ0eU1hcC5nZXQodHlwZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlY2xhcmVHcmFwaEJsb2NrKCkge1xuICAgIGNvbnN0IHsgc2hhZGVyTm9kZUxpc3QsIHNoYWRlclByb3BlcnR5TGlzdCB9ID0gYXdhaXQgTWVzc2FnZU1nci5JbnN0YW5jZS5jYWxsU2NlbmVNZXRob2QoJ3F1ZXJ5U2hhZGVyTm9kZScpO1xuICAgIHNoYWRlck5vZGVNYXAgPSBuZXcgTWFwKHNoYWRlck5vZGVMaXN0KTtcbiAgICBzaGFkZXJQcm9wZXJ0eU1hcCA9IG5ldyBNYXAoc2hhZGVyUHJvcGVydHlMaXN0KTtcblxuICAgIGRlY2xhcmVTaGFkZXJHcmFwaCgpO1xuICAgIGRlY2xhcmVTaGFkZXJOb2RlQmxvY2soc2hhZGVyTm9kZU1hcCk7XG4gICAgYXBwbHlCbG9ja1RvTWVudSgpO1xuXG4gICAgTWVzc2FnZU1nci5JbnN0YW5jZS5zZW5kKE1lc3NhZ2VUeXBlLkRlY2xhcmVkKTtcbn1cblxuZnVuY3Rpb24gaXRlcmF0ZVByb3BlcnR5RGVmaW5lcyhoYW5kbGU6IChkZWZpbmU6IFByb3BlcnR5RGVmaW5lKSA9PiB2b2lkKSB7XG4gICAgc2hhZGVyUHJvcGVydHlNYXAuZm9yRWFjaCgoZGVmaW5lOiBQcm9wZXJ0eURlZmluZSkgPT4gaGFuZGxlKGRlZmluZSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRCbG9ja0RhdGFCeVR5cGUodHlwZTogc3RyaW5nKTogUHJvbWlzZTxCbG9ja0RhdGEgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgYmxvY2sgPSBnZXRCbG9ja1RlbXBsYXRlQnlUeXBlKHR5cGUpO1xuICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgYXdhaXQgZGVjbGFyZUdyYXBoQmxvY2soKTtcbiAgICB9XG4gICAgYmxvY2sgPSBnZXRCbG9ja1RlbXBsYXRlQnlUeXBlKHR5cGUpO1xuICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgY29uc29sZS5sb2coYGNyZWF0ZSBkZWZhdWx0IHNoYWRlciBncmFwaCBmYWlsZWQsIE1hc3Rlck5vZGU6ICR7dHlwZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShibG9jay5kYXRhKSk7XG59XG5cbmZ1bmN0aW9uIGRlY2xhcmVTaGFkZXJHcmFwaCgpIHtcbiAgICBjb25zdCBkZWZhdWx0R3JhcGggPSBjcmVhdGVEZWZhdWx0R3JhcGgoKTtcbiAgICBpZiAoaGFzRGVjbGFyZUdyYXBoKGRlZmF1bHRHcmFwaC50eXBlKSkgcmV0dXJuO1xuXG4gICAgZGVjbGFyZUdyYXBoKGRlZmF1bHRHcmFwaCk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5QmxvY2tUb01lbnUoKSB7XG4gICAgbm9ybWFsQmxvY2tDYWNoZU1hcC5mb3JFYWNoKChibG9jazogQmxvY2tUZW1wbGF0ZURhdGEpID0+IHtcbiAgICAgICAgaWYgKGJsb2NrLmRldGFpbHM/Lm1lbnUpIHtcbiAgICAgICAgICAgIE1lbnUuSW5zdGFuY2UuYWRkSXRlbVBhdGgoYmxvY2suZGV0YWlscy5tZW51LCB7XG4gICAgICAgICAgICAgICAgdHlwZTogYmxvY2suZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHt9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QmxvY2tUZW1wbGF0ZUJ5VHlwZSh0eXBlOiBzdHJpbmcpOiBCbG9ja1RlbXBsYXRlRGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYmxvY2tUZW1wbGF0ZSA9IG5vcm1hbEJsb2NrQ2FjaGVNYXAuZ2V0KHR5cGUpO1xuICAgIGlmIChibG9ja1RlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJsb2NrVGVtcGxhdGUpKTtcbiAgICB9XG4gICAgY29uc29sZS5kZWJ1ZyhgZ2V0IGJsb2NrIHRlbXBsYXRlcyBub3QgYXZhaWxhYmxlIGJ5IHR5cGU6ICR7dHlwZX1gKTtcbn1cblxuZXhwb3J0IHtcbiAgICBkZWNsYXJlU2hhZGVyR3JhcGgsXG4gICAgZGVjbGFyZVNoYWRlck5vZGVCbG9jayxcbiAgICBnZXRCbG9ja1RlbXBsYXRlQnlUeXBlLFxuICAgIGdldFByb3BlcnR5RGVmaW5lQnlUeXBlLFxuICAgIGdldEJsb2NrRGF0YUJ5VHlwZSxcbiAgICBpdGVyYXRlUHJvcGVydHlEZWZpbmVzLFxuICAgIGRlY2xhcmVHcmFwaEJsb2NrLFxuICAgIGFwcGx5QmxvY2tUb01lbnUsXG59O1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/global-exports.js b/extensions/shader-graph/dist/shader-graph/global-exports.js new file mode 100644 index 0000000..f05dd7e --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/global-exports.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PACKAGE_NAME = exports.PANEL_NAME = exports.SUB_GRAPH_NODE_TYPE = exports.DEFAULT_ASSET_NAME = exports.DEFAULT_NAME = exports.PROJECT_PATH = exports.PACKAGE_JSON = void 0; +const tslib_1 = require("tslib"); +const path_1 = require("path"); +// @ts-ignore +const package_json_1 = tslib_1.__importDefault(require("../../package.json")); +exports.PACKAGE_JSON = package_json_1.default; +const PROJECT_PATH = (0, path_1.join)(Editor.Project.path, 'assets'); +exports.PROJECT_PATH = PROJECT_PATH; +const PACKAGE_NAME = package_json_1.default.name; +exports.PACKAGE_NAME = PACKAGE_NAME; +const PANEL_NAME = `${PACKAGE_NAME}.shader-graph`; +exports.PANEL_NAME = PANEL_NAME; +const DEFAULT_NAME = 'New Shader Graph'; +exports.DEFAULT_NAME = DEFAULT_NAME; +const DEFAULT_ASSET_NAME = `${DEFAULT_NAME}.shadergraph`; +exports.DEFAULT_ASSET_NAME = DEFAULT_ASSET_NAME; +const SUB_GRAPH_NODE_TYPE = 'SubGraphNode'; +exports.SUB_GRAPH_NODE_TYPE = SUB_GRAPH_NODE_TYPE; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWV4cG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2dsb2JhbC1leHBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwrQkFBNEI7QUFDNUIsYUFBYTtBQUNiLDhFQUE4QztBQWUxQyx1QkFmRyxzQkFBWSxDQWVIO0FBYmhCLE1BQU0sWUFBWSxHQUFHLElBQUEsV0FBSSxFQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBY3JELG9DQUFZO0FBWmhCLE1BQU0sWUFBWSxHQUFHLHNCQUFZLENBQUMsSUFBSSxDQUFDO0FBaUJuQyxvQ0FBWTtBQWZoQixNQUFNLFVBQVUsR0FBRyxHQUFHLFlBQVksZUFBZSxDQUFDO0FBYzlDLGdDQUFVO0FBWmQsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7QUFTcEMsb0NBQVk7QUFQaEIsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLFlBQVksY0FBYyxDQUFDO0FBUXJELGdEQUFrQjtBQU50QixNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQU92QyxrREFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgUEFDS0FHRV9KU09OIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG5cbmNvbnN0IFBST0pFQ1RfUEFUSCA9IGpvaW4oRWRpdG9yLlByb2plY3QucGF0aCwgJ2Fzc2V0cycpO1xuXG5jb25zdCBQQUNLQUdFX05BTUUgPSBQQUNLQUdFX0pTT04ubmFtZTtcblxuY29uc3QgUEFORUxfTkFNRSA9IGAke1BBQ0tBR0VfTkFNRX0uc2hhZGVyLWdyYXBoYDtcblxuY29uc3QgREVGQVVMVF9OQU1FID0gJ05ldyBTaGFkZXIgR3JhcGgnO1xuXG5jb25zdCBERUZBVUxUX0FTU0VUX05BTUUgPSBgJHtERUZBVUxUX05BTUV9LnNoYWRlcmdyYXBoYDtcblxuY29uc3QgU1VCX0dSQVBIX05PREVfVFlQRSA9ICdTdWJHcmFwaE5vZGUnO1xuXG5leHBvcnQge1xuICAgIFBBQ0tBR0VfSlNPTixcbiAgICBQUk9KRUNUX1BBVEgsXG4gICAgREVGQVVMVF9OQU1FLFxuICAgIERFRkFVTFRfQVNTRVRfTkFNRSxcbiAgICBTVUJfR1JBUEhfTk9ERV9UWVBFLFxuICAgIFBBTkVMX05BTUUsXG4gICAgUEFDS0FHRV9OQU1FLFxufTtcblxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/index.js b/extensions/shader-graph/dist/shader-graph/index.js new file mode 100644 index 0000000..8718dc1 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/index.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Menu = void 0; +const tslib_1 = require("tslib"); +var menu_1 = require("./menu"); +Object.defineProperty(exports, "Menu", { enumerable: true, get: function () { return menu_1.Menu; } }); +tslib_1.__exportStar(require("./declare"), exports); +tslib_1.__exportStar(require("./base"), exports); +tslib_1.__exportStar(require("./internal"), exports); +tslib_1.__exportStar(require("./interface"), exports); +tslib_1.__exportStar(require("./global-exports"), exports); +tslib_1.__exportStar(require("./utils"), exports); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwrQkFBZ0Q7QUFBdkMsNEZBQUEsSUFBSSxPQUFBO0FBQ2Isb0RBQTBCO0FBQzFCLGlEQUF1QjtBQUN2QixxREFBMkI7QUFDM0Isc0RBQTRCO0FBQzVCLDJEQUFpQztBQUNqQyxrREFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBNZW51LCBNZW51VGVtcGxhdGVJdGVtIH0gZnJvbSAnLi9tZW51JztcbmV4cG9ydCAqIGZyb20gJy4vZGVjbGFyZSc7XG5leHBvcnQgKiBmcm9tICcuL2Jhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2dsb2JhbC1leHBvcnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/interface.js b/extensions/shader-graph/dist/shader-graph/interface.js new file mode 100644 index 0000000..ba02fa5 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/interface.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PropertyData = void 0; +const utils_1 = require("./utils"); +/** + * 用存储 Graph Property 数据 + */ +class PropertyData { + constructor() { + this.id = (0, utils_1.generateUUID)(); + this.type = ''; + this.name = ''; + /** + * 声明的类型,目前是 PropertyNode + */ + this.declareType = 'PropertyNode'; + this.outputPins = []; + } +} +exports.PropertyData = PropertyData; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NoYWRlci1ncmFwaC9pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQXVDO0FBRXZDOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBQXpCO1FBQ0ksT0FBRSxHQUFXLElBQUEsb0JBQVksR0FBRSxDQUFDO1FBQzVCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1Y7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLGNBQWMsQ0FBQztRQUM3QixlQUFVLEdBQWMsRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FBQTtBQVRELG9DQVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQaW5EYXRhIH0gZnJvbSAnLi4vYmxvY2stZm9yZ2UvaW50ZXJmYWNlJztcbmltcG9ydCB7IGdlbmVyYXRlVVVJRCB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIOeUqOWtmOWCqCBHcmFwaCBQcm9wZXJ0eSDmlbDmja5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb3BlcnR5RGF0YSB7XG4gICAgaWQ6IHN0cmluZyA9IGdlbmVyYXRlVVVJRCgpO1xuICAgIHR5cGUgPSAnJztcbiAgICBuYW1lID0gJyc7XG4gICAgLyoqXG4gICAgICog5aOw5piO55qE57G75Z6L77yM55uu5YmN5pivIFByb3BlcnR5Tm9kZVxuICAgICAqL1xuICAgIGRlY2xhcmVUeXBlID0gJ1Byb3BlcnR5Tm9kZSc7XG4gICAgb3V0cHV0UGluczogUGluRGF0YVtdID0gW107XG59XG5cbi8qKlxuICog6IqC54K555qE5LiA5Lqb6ZmE5bim5L+h5oGvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVEZXRhaWxzIHtcbiAgICBwcm9wZXJ0eUlEPzogc3RyaW5nO1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIHN1YkdyYXBoPzogc3RyaW5nO1xuICAgIGlucHV0UGlucz86IFBpbkRhdGFbXSxcbiAgICBvdXRwdXRQaW5zPzogUGluRGF0YVtdLFxuXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/internal.js b/extensions/shader-graph/dist/shader-graph/internal.js new file mode 100644 index 0000000..3cc9174 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/internal.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2hhZGVyLWdyYXBoL2ludGVybmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJsb2NrRGF0YSwgSUJsb2NrRGVzY3JpcHRpb24gfSBmcm9tICcuLi9ibG9jay1mb3JnZS9pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBOb2RlRGVmaW5lLCBQcm9wZXJ0eURlZmluZSB9IGZyb20gJy4uLy4uL0B0eXBlcy9zaGFkZXItbm9kZS10eXBlJztcblxuLyoqXG4gKiBCbG9jayDmqKHniYjmlbDmja5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCbG9ja1RlbXBsYXRlRGF0YSB7XG4gICAgLy8g5piv5ZCm5Li76IqC54K577yM6K+l6IqC54K55LiN5Y+v6KKr5Yig6Zmk77yM5LiN5Y+v6KKr5aSN5Yi277yM5ZSv5LiA5LiA5Lu9XG4gICAgaXNNYXN0ZXI/OiBib29sZWFuO1xuICAgIGRlc2NyaXB0aW9uOiBJQmxvY2tEZXNjcmlwdGlvbjtcbiAgICBkYXRhOiBCbG9ja0RhdGE7XG4gICAgZGV0YWlscz86IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55XG4gICAgfTtcbn1cblxuLyoqXG4gKiDlrZjlgqggU2hhZGVyIE5vZGUg5LiOIFNoYWRlciBQcm9wZXJ0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNb2R1bGVPcHRpb25zIHtcbiAgICBzaGFkZXJOb2RlTWFwOiBNYXA8c3RyaW5nLCBOb2RlRGVmaW5lPjtcbiAgICBzaGFkZXJQcm9wZXJ0eU1hcDogTWFwPHN0cmluZywgUHJvcGVydHlEZWZpbmU+O1xuICAgIHNoYWRlck5vZGVDbGFzc01hcDogTWFwPHN0cmluZywgYW55PjsvLyBjbGFzc1xufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/menu/index.js b/extensions/shader-graph/dist/shader-graph/menu/index.js new file mode 100644 index 0000000..16c0d87 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/menu/index.js @@ -0,0 +1,103 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Menu = void 0; +const tslib_1 = require("tslib"); +const events_1 = tslib_1.__importDefault(require("events")); +const remote_1 = require("@electron/remote"); +const utils_1 = require("../utils"); +const base_menu_1 = require("./template/base-menu"); +const base_1 = require("../base"); +class Menu extends events_1.default { + constructor() { + super(...arguments); + this.setTimeoutId = null; + this.nodeMenuItems = []; + this.nodeMenuItemDataMap = new Map(); + this.popupCreateMenu = () => { + // 如果在面板内才弹菜单 + const window = (0, remote_1.getCurrentWindow)(); + const point = remote_1.screen.getCursorScreenPoint(); + if (!(0, utils_1.contains)(point, window.getBounds())) + return; + base_1.MessageMgr.Instance.send(base_1.MessageType.ShowCreateNodeWindow); + }; + } + static get Instance() { + if (!this._instance) { + this._instance = new Menu(); + } + return this._instance; + } + emitMenuItemChange() { + this.setTimeoutId && clearTimeout(this.setTimeoutId); + this.setTimeoutId = setTimeout(() => { + base_1.MessageMgr.Instance.send(base_1.MessageType.CreateMenuChange); + }, 50); + } + addItemPath(path, data) { + if (!this.nodeMenuItems.includes(path)) { + this.nodeMenuItems.push(path); + } + this.nodeMenuItemDataMap.set(path, data); + this.emitMenuItemChange(); + } + removeItemPath(path) { + const index = this.nodeMenuItems.indexOf(path); + if (index !== -1) { + this.nodeMenuItems.splice(index, 1); + this.nodeMenuItemDataMap.delete(path); + this.emitMenuItemChange(); + } + } + getShaderNodeMenu(onClick) { + const menuItems = []; + const menu = (menuPath) => { + // 解析菜单路径字符串为菜单项数组 + function parseMenuPath(menuPath) { + return menuPath.split('/').map((label) => ({ label })); + } + // 循环迭代方式构建菜单项 + const buildMenuIteratively = (paths, currentMenuItems, baseMenuPath, fullMenuPath) => { + const label = paths.shift(); + if (!label) + return; + if (!fullMenuPath) { + fullMenuPath = label; + } + else { + fullMenuPath += '/' + label; + } + let menuItem = currentMenuItems.find(item => item.label === label); + if (!menuItem) { + menuItem = { label, submenu: [] }; + currentMenuItems.push(menuItem); + } + if (paths.length === 0) { + const addOptions = this.nodeMenuItemDataMap.get(baseMenuPath); + menuItem.addOptions = addOptions; + if (onClick) { + delete menuItem.submenu; + menuItem.click = () => { + onClick(addOptions); + }; + } + } + buildMenuIteratively(paths, menuItem.submenu, baseMenuPath, fullMenuPath); + }; + // 传入菜单路径字符串,构建相应的菜单项 + const menuPathItems = parseMenuPath(menuPath); + // 使用循环迭代方式构建菜单项 + buildMenuIteratively(menuPath.split('/'), menuItems, menuPath, ''); + }; + this.nodeMenuItems.forEach((menuPath) => menu(menuPath)); + return menuItems; + } + popupMenu(event) { + const menu = (0, base_menu_1.getBaseMenuItem)(event, this.popupCreateMenu); + Editor.Menu.popup({ menu }); + return true; + } +} +exports.Menu = Menu; +Menu._instance = null; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhZGVyLWdyYXBoL21lbnUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDREQUFrQztBQUNsQyw2Q0FBNEQ7QUFJNUQsb0NBQW9DO0FBQ3BDLG9EQUF1RDtBQUN2RCxrQ0FBeUU7QUFNekUsTUFBYSxJQUFLLFNBQVEsZ0JBQVk7SUFBdEM7O1FBV1ksaUJBQVksR0FBMEIsSUFBSSxDQUFDO1FBRTNDLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBQzdCLHdCQUFtQixHQUF1QyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBMkU1RSxvQkFBZSxHQUFHLEdBQUcsRUFBRTtZQUNuQixhQUFhO1lBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBQSx5QkFBZ0IsR0FBRSxDQUFDO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLGVBQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxJQUFBLGdCQUFRLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFBRSxPQUFPO1lBRWpELGlCQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQTdGVSxNQUFNLEtBQUssUUFBUTtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7U0FDL0I7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQU9ELGtCQUFrQjtRQUNkLElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsaUJBQVUsQ0FB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QjtZQUNyQixNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsZ0JBQWdCO1lBQ2hCLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDekQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUF5RDtRQUMvRCxNQUFNLElBQUksR0FBRyxJQUFBLDJCQUFlLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7QUF2Rkwsb0JBaUdDO0FBL0ZVLGNBQVMsR0FBZ0IsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFdpbmRvdywgc2NyZWVuIH0gZnJvbSAnQGVsZWN0cm9uL3JlbW90ZSc7XG5cbmltcG9ydCB0eXBlIHsgQmxvY2tNb3VzZUV2ZW50LCBHcmFwaE1vdXNlRXZlbnQsIExpbmVNb3VzZUV2ZW50IH0gZnJvbSAnLi4vLi4vYmxvY2stZm9yZ2UvZXZlbnQnO1xuXG5pbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGdldEJhc2VNZW51SXRlbSB9IGZyb20gJy4vdGVtcGxhdGUvYmFzZS1tZW51JztcbmltcG9ydCB7IE1lc3NhZ2VNZ3IsIE1lc3NhZ2VUeXBlLCBHcmFwaEVkaXRvckFkZE9wdGlvbnMgfSBmcm9tICcuLi9iYXNlJztcblxuZXhwb3J0IGludGVyZmFjZSBNZW51VGVtcGxhdGVJdGVtIGV4dGVuZHMgRWRpdG9yLk1lbnUuTWVudVRlbXBsYXRlSXRlbSB7XG4gICAgYWRkT3B0aW9ucz86IEdyYXBoRWRpdG9yQWRkT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE1lbnUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuXG4gICAgc3RhdGljIF9pbnN0YW5jZTogTWVudSB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogTWVudSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IE1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUaW1lb3V0SWQ6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIG5vZGVNZW51SXRlbXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBub2RlTWVudUl0ZW1EYXRhTWFwOiBNYXA8c3RyaW5nLCBHcmFwaEVkaXRvckFkZE9wdGlvbnM+ID0gbmV3IE1hcCgpO1xuXG4gICAgZW1pdE1lbnVJdGVtQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnNldFRpbWVvdXRJZCAmJiBjbGVhclRpbWVvdXQodGhpcy5zZXRUaW1lb3V0SWQpO1xuICAgICAgICB0aGlzLnNldFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgTWVzc2FnZU1nci5JbnN0YW5jZS5zZW5kKE1lc3NhZ2VUeXBlLkNyZWF0ZU1lbnVDaGFuZ2UpO1xuICAgICAgICB9LCA1MCk7XG4gICAgfVxuXG4gICAgYWRkSXRlbVBhdGgocGF0aDogc3RyaW5nLCBkYXRhOiBHcmFwaEVkaXRvckFkZE9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGVNZW51SXRlbXMuaW5jbHVkZXMocGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZU1lbnVJdGVtcy5wdXNoKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9kZU1lbnVJdGVtRGF0YU1hcC5zZXQocGF0aCwgZGF0YSk7XG4gICAgICAgIHRoaXMuZW1pdE1lbnVJdGVtQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlSXRlbVBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5ub2RlTWVudUl0ZW1zLmluZGV4T2YocGF0aCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZU1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5ub2RlTWVudUl0ZW1EYXRhTWFwLmRlbGV0ZShwYXRoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdE1lbnVJdGVtQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTaGFkZXJOb2RlTWVudShvbkNsaWNrPzogKG9wdGlvbnM6IEdyYXBoRWRpdG9yQWRkT3B0aW9ucykgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBtZW51SXRlbXM6IE1lbnVUZW1wbGF0ZUl0ZW1bXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IG1lbnUgPSAobWVudVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8g6Kej5p6Q6I+c5Y2V6Lev5b6E5a2X56ym5Liy5Li66I+c5Y2V6aG55pWw57uEXG4gICAgICAgICAgICBmdW5jdGlvbiBwYXJzZU1lbnVQYXRoKG1lbnVQYXRoOiBzdHJpbmcpOiBNZW51VGVtcGxhdGVJdGVtW10ge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZW51UGF0aC5zcGxpdCgnLycpLm1hcCgobGFiZWwpID0+ICh7IGxhYmVsIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOW+queOr+i/reS7o+aWueW8j+aehOW7uuiPnOWNlemhuVxuICAgICAgICAgICAgY29uc3QgYnVpbGRNZW51SXRlcmF0aXZlbHkgPSAocGF0aHM6IHN0cmluZ1tdLCBjdXJyZW50TWVudUl0ZW1zOiBNZW51VGVtcGxhdGVJdGVtW10sIGJhc2VNZW51UGF0aDogc3RyaW5nLCBmdWxsTWVudVBhdGg6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gcGF0aHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWxhYmVsKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKCFmdWxsTWVudVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVsbE1lbnVQYXRoID0gbGFiZWw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZnVsbE1lbnVQYXRoICs9ICcvJyArIGxhYmVsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgbWVudUl0ZW06IE1lbnVUZW1wbGF0ZUl0ZW0gfCB1bmRlZmluZWQgPSBjdXJyZW50TWVudUl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmxhYmVsID09PSBsYWJlbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFtZW51SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBtZW51SXRlbSA9IHsgbGFiZWwsIHN1Ym1lbnU6IFtdIH07XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNZW51SXRlbXMucHVzaChtZW51SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkT3B0aW9ucyA9IHRoaXMubm9kZU1lbnVJdGVtRGF0YU1hcC5nZXQoYmFzZU1lbnVQYXRoKSE7XG4gICAgICAgICAgICAgICAgICAgIG1lbnVJdGVtLmFkZE9wdGlvbnMgPSBhZGRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICBpZiAob25DbGljaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1lbnVJdGVtLnN1Ym1lbnU7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZW51SXRlbS5jbGljayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrKGFkZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidWlsZE1lbnVJdGVyYXRpdmVseShwYXRocywgbWVudUl0ZW0uc3VibWVudSEsIGJhc2VNZW51UGF0aCwgZnVsbE1lbnVQYXRoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyDkvKDlhaXoj5zljZXot6/lvoTlrZfnrKbkuLLvvIzmnoTlu7rnm7jlupTnmoToj5zljZXpoblcbiAgICAgICAgICAgIGNvbnN0IG1lbnVQYXRoSXRlbXMgPSBwYXJzZU1lbnVQYXRoKG1lbnVQYXRoKTtcbiAgICAgICAgICAgIC8vIOS9v+eUqOW+queOr+i/reS7o+aWueW8j+aehOW7uuiPnOWNlemhuVxuICAgICAgICAgICAgYnVpbGRNZW51SXRlcmF0aXZlbHkobWVudVBhdGguc3BsaXQoJy8nKSwgbWVudUl0ZW1zLCBtZW51UGF0aCwgJycpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5vZGVNZW51SXRlbXMuZm9yRWFjaCgobWVudVBhdGgpID0+IG1lbnUobWVudVBhdGgpKTtcbiAgICAgICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgICB9XG5cbiAgICBwb3B1cE1lbnUoZXZlbnQ6IEJsb2NrTW91c2VFdmVudCB8IEdyYXBoTW91c2VFdmVudCB8IExpbmVNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG1lbnUgPSBnZXRCYXNlTWVudUl0ZW0oZXZlbnQsIHRoaXMucG9wdXBDcmVhdGVNZW51KTtcbiAgICAgICAgRWRpdG9yLk1lbnUucG9wdXAoeyBtZW51IH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwb3B1cENyZWF0ZU1lbnUgPSAoKSA9PiB7XG4gICAgICAgIC8vIOWmguaenOWcqOmdouadv+WGheaJjeW8ueiPnOWNlVxuICAgICAgICBjb25zdCB3aW5kb3cgPSBnZXRDdXJyZW50V2luZG93KCk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gc2NyZWVuLmdldEN1cnNvclNjcmVlblBvaW50KCk7XG4gICAgICAgIGlmICghY29udGFpbnMocG9pbnQsIHdpbmRvdy5nZXRCb3VuZHMoKSkpIHJldHVybjtcblxuICAgICAgICBNZXNzYWdlTWdyLkluc3RhbmNlLnNlbmQoTWVzc2FnZVR5cGUuU2hvd0NyZWF0ZU5vZGVXaW5kb3cpO1xuICAgIH07XG59XG4iXX0= \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/menu/template/base-menu.js b/extensions/shader-graph/dist/shader-graph/menu/template/base-menu.js new file mode 100644 index 0000000..14aa199 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/menu/template/base-menu.js @@ -0,0 +1,96 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getBaseMenuItem = void 0; +const event_1 = require("../../../block-forge/event"); +const base_1 = require("../../base"); +const global_exports_1 = require("../../global-exports"); +function getBaseMenuItem(event, popupCreateMenu) { + let uuid = ''; + let data; + let isLine = false; + const isMulti = false; + let isGroup = false; + const options = []; + if (event instanceof event_1.BlockMouseEvent) { + isGroup = event.block.type === global_exports_1.SUB_GRAPH_NODE_TYPE; + uuid = event.target.getAttribute('node-uuid') || ''; + options.push({ + uuid: uuid, + blockData: event.block, + }); + } + else if (event instanceof event_1.LineMouseEvent) { + uuid = event.target.parentElement?.getAttribute('line-uuid') || ''; + options.push({ + uuid: uuid, + lineData: event.line, + }); + isLine = true; + } + return [ + { + label: Editor.I18n.t('shader-graph.right_menu.create_node'), + enabled: !uuid, + visible: !isLine, + accelerator: 'Space', + click: () => { + popupCreateMenu(); + }, + }, + { type: 'separator' }, + { + label: Editor.I18n.t('shader-graph.right_menu.paste'), + enabled: !base_1.GraphEditorMgr.Instance.clipboardIsNull && uuid === '' && !isLine, + accelerator: 'CmdOrCtrl+V', + visible: !isLine, + click: () => { + base_1.GraphEditorMgr.Instance.paste(); + }, + }, + { + label: Editor.I18n.t('shader-graph.right_menu.delete'), + accelerator: 'Delete', + enabled: uuid !== '', + click: () => { + base_1.GraphEditorMgr.Instance.delete(options); + }, + }, + { + label: Editor.I18n.t('shader-graph.right_menu.copy'), + accelerator: 'CmdOrCtrl+C', + enabled: uuid !== '' && !isLine, + visible: !isLine, + click: () => { + base_1.GraphEditorMgr.Instance.copy(options); + }, + }, + { + label: Editor.I18n.t('shader-graph.right_menu.duplicate'), + accelerator: 'CmdOrCtrl+D', + enabled: uuid !== '' && !isLine, + visible: !isLine, + click: () => { + base_1.GraphEditorMgr.Instance.duplicate(options); + }, + }, + { type: 'separator' }, + { + label: Editor.I18n.t('shader-graph.right_menu.zoom_to_fit'), + enabled: uuid === '', + visible: !isLine, + click: () => { + base_1.GraphEditorMgr.Instance.zoomToFit(); + }, + }, + { + label: Editor.I18n.t('shader-graph.right_menu.reset'), + enabled: uuid === '', + visible: !isLine, + click: () => { + base_1.GraphEditorMgr.Instance.reset(); + }, + }, + ]; +} +exports.getBaseMenuItem = getBaseMenuItem; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tZW51LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NoYWRlci1ncmFwaC9tZW51L3RlbXBsYXRlL2Jhc2UtbWVudS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxzREFBOEY7QUFDOUYscUNBQXFFO0FBQ3JFLHlEQUEyRDtBQUUzRCxTQUFnQixlQUFlLENBQUMsS0FBeUQsRUFBRSxlQUEyQjtJQUNsSCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDZCxJQUFJLElBQWUsQ0FBQztJQUNwQixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDbkIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVwQixNQUFNLE9BQU8sR0FBOEIsRUFBRSxDQUFDO0lBQzlDLElBQUksS0FBSyxZQUFZLHVCQUFlLEVBQUU7UUFDbEMsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLG9DQUFtQixDQUFDO1FBQ25ELElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNULElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQ3pCLENBQUMsQ0FBQztLQUNOO1NBQU0sSUFBSSxLQUFLLFlBQVksc0JBQWMsRUFBRTtRQUN4QyxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuRSxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ1QsSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQztLQUNqQjtJQUVELE9BQU87UUFDSDtZQUNJLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQztZQUMzRCxPQUFPLEVBQUUsQ0FBQyxJQUFJO1lBQ2QsT0FBTyxFQUFFLENBQUMsTUFBTTtZQUNoQixXQUFXLEVBQUUsT0FBTztZQUNwQixLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLGVBQWUsRUFBRSxDQUFDO1lBQ3RCLENBQUM7U0FDSjtRQUNELEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtRQUNyQjtZQUNJLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQztZQUNyRCxPQUFPLEVBQUUsQ0FBQyxxQkFBYyxDQUFDLFFBQVEsQ0FBQyxlQUFlLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDM0UsV0FBVyxFQUFFLGFBQWE7WUFDMUIsT0FBTyxFQUFFLENBQUMsTUFBTTtZQUNoQixLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLHFCQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BDLENBQUM7U0FDSjtRQUNEO1lBQ0ksS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDO1lBQ3RELFdBQVcsRUFBRSxRQUFRO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLEtBQUssRUFBRTtZQUNwQixLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLHFCQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBRSxPQUFPLENBQUMsQ0FBQztZQUM3QyxDQUFDO1NBQ0o7UUFDRDtZQUNJLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQztZQUNwRCxXQUFXLEVBQUUsYUFBYTtZQUMxQixPQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDL0IsT0FBTyxFQUFFLENBQUMsTUFBTTtZQUNoQixLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLHFCQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxDQUFDO1NBQ0o7UUFDRDtZQUNJLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQztZQUN6RCxXQUFXLEVBQUUsYUFBYTtZQUMxQixPQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDL0IsT0FBTyxFQUFFLENBQUMsTUFBTTtZQUNoQixLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLHFCQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxDQUFDO1NBQ0o7UUFDRCxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7UUFDckI7WUFDSSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMscUNBQXFDLENBQUM7WUFDM0QsT0FBTyxFQUFFLElBQUksS0FBSyxFQUFFO1lBQ3BCLE9BQU8sRUFBRSxDQUFDLE1BQU07WUFDaEIsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDUixxQkFBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxDQUFDO1NBQ0o7UUFDRDtZQUNJLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQztZQUNyRCxPQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUU7WUFDcEIsT0FBTyxFQUFFLENBQUMsTUFBTTtZQUNoQixLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLHFCQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BDLENBQUM7U0FDSjtLQUNKLENBQUM7QUFDTixDQUFDO0FBeEZELDBDQXdGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmxvY2tEYXRhIH0gZnJvbSAnLi4vLi4vLi4vYmxvY2stZm9yZ2UvaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgQmxvY2tNb3VzZUV2ZW50LCBHcmFwaE1vdXNlRXZlbnQsIExpbmVNb3VzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vYmxvY2stZm9yZ2UvZXZlbnQnO1xuaW1wb3J0IHsgR3JhcGhFZGl0b3JNZ3IsIEdyYXBoRWRpdG9yT3RoZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vYmFzZSc7XG5pbXBvcnQgeyBTVUJfR1JBUEhfTk9ERV9UWVBFIH0gZnJvbSAnLi4vLi4vZ2xvYmFsLWV4cG9ydHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZU1lbnVJdGVtKGV2ZW50OiBCbG9ja01vdXNlRXZlbnQgfCBHcmFwaE1vdXNlRXZlbnQgfCBMaW5lTW91c2VFdmVudCwgcG9wdXBDcmVhdGVNZW51OiAoKSA9PiB2b2lkKTogRWRpdG9yLk1lbnUuQ29udGV4dE1lbnVJdGVtW10ge1xuICAgIGxldCB1dWlkID0gJyc7XG4gICAgbGV0IGRhdGE6IEJsb2NrRGF0YTtcbiAgICBsZXQgaXNMaW5lID0gZmFsc2U7XG4gICAgY29uc3QgaXNNdWx0aSA9IGZhbHNlO1xuICAgIGxldCBpc0dyb3VwID0gZmFsc2U7XG5cbiAgICBjb25zdCBvcHRpb25zOiBHcmFwaEVkaXRvck90aGVyT3B0aW9uc1tdID0gW107XG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgQmxvY2tNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlzR3JvdXAgPSBldmVudC5ibG9jay50eXBlID09PSBTVUJfR1JBUEhfTk9ERV9UWVBFO1xuICAgICAgICB1dWlkID0gZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnbm9kZS11dWlkJykgfHwgJyc7XG4gICAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICB1dWlkOiB1dWlkLFxuICAgICAgICAgICAgYmxvY2tEYXRhOiBldmVudC5ibG9jayxcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIExpbmVNb3VzZUV2ZW50KSB7XG4gICAgICAgIHV1aWQgPSBldmVudC50YXJnZXQucGFyZW50RWxlbWVudD8uZ2V0QXR0cmlidXRlKCdsaW5lLXV1aWQnKSB8fCAnJztcbiAgICAgICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHV1aWQ6IHV1aWQsXG4gICAgICAgICAgICBsaW5lRGF0YTogZXZlbnQubGluZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlzTGluZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IEVkaXRvci5JMThuLnQoJ3NoYWRlci1ncmFwaC5yaWdodF9tZW51LmNyZWF0ZV9ub2RlJyksXG4gICAgICAgICAgICBlbmFibGVkOiAhdXVpZCxcbiAgICAgICAgICAgIHZpc2libGU6ICFpc0xpbmUsXG4gICAgICAgICAgICBhY2NlbGVyYXRvcjogJ1NwYWNlJyxcbiAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcG9wdXBDcmVhdGVNZW51KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IHR5cGU6ICdzZXBhcmF0b3InIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBFZGl0b3IuSTE4bi50KCdzaGFkZXItZ3JhcGgucmlnaHRfbWVudS5wYXN0ZScpLFxuICAgICAgICAgICAgZW5hYmxlZDogIUdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLmNsaXBib2FyZElzTnVsbCAmJiB1dWlkID09PSAnJyAmJiAhaXNMaW5lLFxuICAgICAgICAgICAgYWNjZWxlcmF0b3I6ICdDbWRPckN0cmwrVicsXG4gICAgICAgICAgICB2aXNpYmxlOiAhaXNMaW5lLFxuICAgICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBHcmFwaEVkaXRvck1nci5JbnN0YW5jZS5wYXN0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IEVkaXRvci5JMThuLnQoJ3NoYWRlci1ncmFwaC5yaWdodF9tZW51LmRlbGV0ZScpLFxuICAgICAgICAgICAgYWNjZWxlcmF0b3I6ICdEZWxldGUnLFxuICAgICAgICAgICAgZW5hYmxlZDogdXVpZCAhPT0gJycsXG4gICAgICAgICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLmRlbGV0ZSggb3B0aW9ucyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogRWRpdG9yLkkxOG4udCgnc2hhZGVyLWdyYXBoLnJpZ2h0X21lbnUuY29weScpLFxuICAgICAgICAgICAgYWNjZWxlcmF0b3I6ICdDbWRPckN0cmwrQycsXG4gICAgICAgICAgICBlbmFibGVkOiB1dWlkICE9PSAnJyAmJiAhaXNMaW5lLFxuICAgICAgICAgICAgdmlzaWJsZTogIWlzTGluZSxcbiAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgR3JhcGhFZGl0b3JNZ3IuSW5zdGFuY2UuY29weShvcHRpb25zKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBFZGl0b3IuSTE4bi50KCdzaGFkZXItZ3JhcGgucmlnaHRfbWVudS5kdXBsaWNhdGUnKSxcbiAgICAgICAgICAgIGFjY2VsZXJhdG9yOiAnQ21kT3JDdHJsK0QnLFxuICAgICAgICAgICAgZW5hYmxlZDogdXVpZCAhPT0gJycgJiYgIWlzTGluZSxcbiAgICAgICAgICAgIHZpc2libGU6ICFpc0xpbmUsXG4gICAgICAgICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLmR1cGxpY2F0ZShvcHRpb25zKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgdHlwZTogJ3NlcGFyYXRvcicgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IEVkaXRvci5JMThuLnQoJ3NoYWRlci1ncmFwaC5yaWdodF9tZW51Lnpvb21fdG9fZml0JyksXG4gICAgICAgICAgICBlbmFibGVkOiB1dWlkID09PSAnJyxcbiAgICAgICAgICAgIHZpc2libGU6ICFpc0xpbmUsXG4gICAgICAgICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLnpvb21Ub0ZpdCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IEVkaXRvci5JMThuLnQoJ3NoYWRlci1ncmFwaC5yaWdodF9tZW51LnJlc2V0JyksXG4gICAgICAgICAgICBlbmFibGVkOiB1dWlkID09PSAnJyxcbiAgICAgICAgICAgIHZpc2libGU6ICFpc0xpbmUsXG4gICAgICAgICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIEdyYXBoRWRpdG9yTWdyLkluc3RhbmNlLnJlc2V0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF07XG59XG5cbiJdfQ== \ No newline at end of file diff --git a/extensions/shader-graph/dist/shader-graph/utils.js b/extensions/shader-graph/dist/shader-graph/utils.js new file mode 100644 index 0000000..60a2a91 --- /dev/null +++ b/extensions/shader-graph/dist/shader-graph/utils.js @@ -0,0 +1,80 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getName = exports.mergeGraphEditorOtherOptions = exports.getOffsetPointByMousePoint = exports.getAssetUuidByPath = exports.convertToProjectDbUrl = exports.generatePinID = exports.contains = exports.generateUUID = void 0; +const path_1 = require("path"); +const global_exports_1 = require("./global-exports"); +function generateUUID() { + return 'p_' + Date.now() + (Math.random() + '').substring(10); +} +exports.generateUUID = generateUUID; +/** + * 是否坐标包含在里面 + * @param point + * @param bounds + */ +function contains(point, bounds) { + return point.x >= bounds.x && point.x <= bounds.x + bounds.width && point.y >= bounds.y && point.y <= bounds.y + bounds.height; +} +exports.contains = contains; +function generatePinID(tag, blockType, slotType, slotDisplayName) { + return `${tag}_${blockType}_${slotType}_${slotDisplayName}`; +} +exports.generatePinID = generatePinID; +/** + * 转成在项目 assets 目录下 + * @param path + */ +function convertToProjectDbUrl(path) { + if (!path) + return ''; + return `db://assets/${(0, path_1.relative)(global_exports_1.PROJECT_PATH, path)}`; +} +exports.convertToProjectDbUrl = convertToProjectDbUrl; +async function getAssetUuidByPath(path) { + if (!path) + return ''; + const url = convertToProjectDbUrl(path); + const uuid = await Editor.Message.request('asset-db', 'query-uuid', url); + if (!uuid) { + console.error(`loadByUrl failed, can't get uuid by ${url}`); + return ''; + } + return uuid; +} +exports.getAssetUuidByPath = getAssetUuidByPath; +function getOffsetPointByMousePoint(list, mousePoint) { + let sumX = 0; + let sumY = 0; + list.forEach((item) => { + if (item.blockData) { + sumX += item.blockData.position.x; + sumY += item.blockData.position.y; + } + }); + return { + x: mousePoint.x - sumX / list.length, + y: mousePoint.y - sumY / list.length, + }; +} +exports.getOffsetPointByMousePoint = getOffsetPointByMousePoint; +function mergeGraphEditorOtherOptions(arr1, arr2) { + const mergedSet = new Set(); + const array = []; + for (const obj of arr1) { + mergedSet.add(obj.uuid); + array.push(obj); + } + for (const obj of arr2) { + if (!mergedSet.has(obj.uuid)) { + mergedSet.add(obj.uuid); + array.push(obj); + } + } + return array; +} +exports.mergeGraphEditorOtherOptions = mergeGraphEditorOtherOptions; +function getName(path) { + return (0, path_1.basename)(path, (0, path_1.extname)(path)); +} +exports.getName = getName; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2hhZGVyLWdyYXBoL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFtRDtBQUVuRCxxREFBZ0Q7QUFHaEQsU0FBZ0IsWUFBWTtJQUN4QixPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFGRCxvQ0FFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixRQUFRLENBQUMsS0FBK0IsRUFBRSxNQUErRDtJQUNySCxPQUFPLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbkksQ0FBQztBQUZELDRCQUVDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLEdBQVcsRUFBRSxTQUFpQixFQUFFLFFBQWdCLEVBQUUsZUFBdUI7SUFDbkcsT0FBTyxHQUFHLEdBQUcsSUFBSSxTQUFTLElBQUksUUFBUSxJQUFJLGVBQWUsRUFBRSxDQUFDO0FBQ2hFLENBQUM7QUFGRCxzQ0FFQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLElBQXlCO0lBQzNELElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFckIsT0FBTyxlQUFlLElBQUEsZUFBUSxFQUFDLDZCQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN6RCxDQUFDO0FBSkQsc0RBSUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsSUFBeUI7SUFDOUQsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUVyQixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekUsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNQLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsT0FBTyxFQUFFLENBQUM7S0FDYjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFWRCxnREFVQztBQUVELFNBQWdCLDBCQUEwQixDQUFDLElBQStCLEVBQUUsVUFBb0M7SUFDNUcsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQTZCLEVBQUUsRUFBRTtRQUMzQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0gsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNO1FBQ3BDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTTtLQUN2QyxDQUFDO0FBQ04sQ0FBQztBQWRELGdFQWNDO0FBRUQsU0FBZ0IsNEJBQTRCLENBQUMsSUFBK0IsRUFBRSxJQUErQjtJQUN6RyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUE4QixFQUFFLENBQUM7SUFFNUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDcEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNuQjtJQUVELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25CO0tBQ0o7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBakJELG9FQWlCQztBQUVELFNBQWdCLE9BQU8sQ0FBQyxJQUFZO0lBQ2hDLE9BQU8sSUFBQSxlQUFRLEVBQUMsSUFBSSxFQUFFLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUZELDBCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmFzZW5hbWUsIGV4dG5hbWUsIHJlbGF0aXZlIH0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IFBST0pFQ1RfUEFUSCB9IGZyb20gJy4vZ2xvYmFsLWV4cG9ydHMnO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEVkaXRvck90aGVyT3B0aW9ucyB9IGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVVVSUQoKSB7XG4gICAgcmV0dXJuICdwXycgKyBEYXRlLm5vdygpICsgKE1hdGgucmFuZG9tKCkgKyAnJykuc3Vic3RyaW5nKDEwKTtcbn1cblxuLyoqXG4gKiDmmK/lkKblnZDmoIfljIXlkKvlnKjph4zpnaJcbiAqIEBwYXJhbSBwb2ludFxuICogQHBhcmFtIGJvdW5kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnMocG9pbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSwgYm91bmRzOiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBvaW50LnggPj0gYm91bmRzLnggJiYgcG9pbnQueCA8PSBib3VuZHMueCArIGJvdW5kcy53aWR0aCAmJiBwb2ludC55ID49IGJvdW5kcy55ICYmIHBvaW50LnkgPD0gYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQaW5JRCh0YWc6IHN0cmluZywgYmxvY2tUeXBlOiBzdHJpbmcsIHNsb3RUeXBlOiBzdHJpbmcsIHNsb3REaXNwbGF5TmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAke3RhZ31fJHtibG9ja1R5cGV9XyR7c2xvdFR5cGV9XyR7c2xvdERpc3BsYXlOYW1lfWA7XG59XG5cbi8qKlxuICog6L2s5oiQ5Zyo6aG555uuIGFzc2V0cyDnm67lvZXkuItcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9Qcm9qZWN0RGJVcmwocGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gJyc7XG5cbiAgICByZXR1cm4gYGRiOi8vYXNzZXRzLyR7cmVsYXRpdmUoUFJPSkVDVF9QQVRILCBwYXRoKX1gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXNzZXRVdWlkQnlQYXRoKHBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghcGF0aCkgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgdXJsID0gY29udmVydFRvUHJvamVjdERiVXJsKHBhdGgpO1xuICAgIGNvbnN0IHV1aWQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS11dWlkJywgdXJsKTtcbiAgICBpZiAoIXV1aWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgbG9hZEJ5VXJsIGZhaWxlZCwgY2FuJ3QgZ2V0IHV1aWQgYnkgJHt1cmx9YCk7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRQb2ludEJ5TW91c2VQb2ludChsaXN0OiBHcmFwaEVkaXRvck90aGVyT3B0aW9uc1tdLCBtb3VzZVBvaW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0pIHtcbiAgICBsZXQgc3VtWCA9IDA7XG4gICAgbGV0IHN1bVkgPSAwO1xuICAgIGxpc3QuZm9yRWFjaCgoaXRlbTogR3JhcGhFZGl0b3JPdGhlck9wdGlvbnMpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uYmxvY2tEYXRhKSB7XG4gICAgICAgICAgICBzdW1YICs9IGl0ZW0uYmxvY2tEYXRhLnBvc2l0aW9uLng7XG4gICAgICAgICAgICBzdW1ZICs9IGl0ZW0uYmxvY2tEYXRhLnBvc2l0aW9uLnk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IG1vdXNlUG9pbnQueCAtIHN1bVggLyBsaXN0Lmxlbmd0aCxcbiAgICAgICAgeTogbW91c2VQb2ludC55IC0gc3VtWSAvIGxpc3QubGVuZ3RoLFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUdyYXBoRWRpdG9yT3RoZXJPcHRpb25zKGFycjE6IEdyYXBoRWRpdG9yT3RoZXJPcHRpb25zW10sIGFycjI6IEdyYXBoRWRpdG9yT3RoZXJPcHRpb25zW10pOiBHcmFwaEVkaXRvck90aGVyT3B0aW9uc1tdIHtcbiAgICBjb25zdCBtZXJnZWRTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBhcnJheTogR3JhcGhFZGl0b3JPdGhlck9wdGlvbnNbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBvYmogb2YgYXJyMSkge1xuICAgICAgICBtZXJnZWRTZXQuYWRkKG9iai51dWlkKTtcbiAgICAgICAgYXJyYXkucHVzaChvYmopO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb2JqIG9mIGFycjIpIHtcbiAgICAgICAgaWYgKCFtZXJnZWRTZXQuaGFzKG9iai51dWlkKSkge1xuICAgICAgICAgICAgbWVyZ2VkU2V0LmFkZChvYmoudXVpZCk7XG4gICAgICAgICAgICBhcnJheS5wdXNoKG9iaik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJhc2VuYW1lKHBhdGgsIGV4dG5hbWUocGF0aCkpO1xufVxuIl19 \ No newline at end of file diff --git a/extensions/shader-graph/i18n/en.js b/extensions/shader-graph/i18n/en.js new file mode 100644 index 0000000..c1577ee --- /dev/null +++ b/extensions/shader-graph/i18n/en.js @@ -0,0 +1,112 @@ +'use strict'; + +module.exports = { + description: 'shader graph', + + title: 'Shader Graph', + + buttons: { + open: 'Open', + new: 'New', + save: 'Save', + save_as: 'Save as', + unsaved: 'Do not Save', + cancel: 'Cancel', + reset: 'Reset', + ok: 'Ok', + load: 'Load', + override: 'Override', + saveAndReload: 'Save & Load', + }, + + messages: { + titles: { + normal: 'Information', + warning: 'Warning', + open: 'Open Shader Graph', + }, + reset: { + detail: 'Are you sure to ignore all unsaved changes, revert to previous saved version?', + }, + save: { + title: 'Save Shader Graph Asset', + detail: 'Are you sure to save current updates?', + }, + scene_ready: { + mask_tips: 'Waiting for scene loading...', + }, + wait_load: { + mask_tips: 'Waiting for loading...', + }, + // The source file has changed for the current Shader Graph editing. It might result unexpected conflicts. Do you want to Load or Override + assets_change: { + mask_tips: 'The source file has changed for the current Shader Graph editing. It might result unexpected conflicts. Do you want to ', + }, + // There is no Shader Graph to Edit. Do you want to Create and Open or Open + need_create_new_asset: { + mask_tips: 'There is no Shader Graph to Edit. Do you want to ', + }, + // The original Shader Graph asset source file has lost. Do you want to Create and Open or Save as and Open + missing_assets: { + detail: 'The original Shader Graph asset source file has lost. Do you want to save again?', + mask_tips: 'The original Shader Graph asset file has lost. Do you want to ', + }, + save_and_reload_by_rename: { + mask_tips: 'Shader Graph asset name has been changed, you need to save the current operation and reload it ', + }, + }, + + menu: { + import: 'Shader Graph', + name: 'Shader Graph', + open: 'Open', + }, + + right_menu: { + create_node: 'Create Node', + paste: 'Paste', + delete: 'Delete', + copy: 'Copy', + cut: 'Cut', + duplicate: 'Duplicate', + convert_to_variable: 'Convert to Variable', + expand_group_node: 'Expand Group Node', + create_subgraph_from_selection: 'Create Subgraph from Selection', + create_group_from_selection: 'Create Group from Selection', + create_annotation_for_selection: 'Create Annotation for Selection', + zoom_to_fit: 'Zoom to Fit', + reset: 'Reset', + }, + + graph_property: { + menu_name: 'Variables', + title: 'Graph Variables', + add: 'Add Variables', + delete: 'Delete Variable', + }, + + create_node: { + title: 'Create Node', + menu_name: 'Create Node', + close: { + tooltip: 'Close Create Node Window', + }, + search_input: { + placeholder: 'Search Node Names', + }, + }, + + preview: { + title: 'Preview', + menu_name: 'Preview', + mesh: 'Mesh', + close: { + tooltip: 'Close Preview Window', + }, + }, + + custom_nodes: { + menu_name: 'Custom Nodes', + title: 'Custom Nodes', + }, +}; diff --git a/extensions/shader-graph/i18n/zh.js b/extensions/shader-graph/i18n/zh.js new file mode 100644 index 0000000..895f645 --- /dev/null +++ b/extensions/shader-graph/i18n/zh.js @@ -0,0 +1,112 @@ +'use strict'; + +module.exports = { + description: '材质编辑器', + + title: 'Shader Graph', + + buttons: { + open: '打开', + new: '新建', + save: '保存', + save_as: '另存为', + unsaved: '不保存', + cancel: '取消', + reset: '重置', + ok: '确定', + load: '加载', + override: '覆盖', + saveAndReload: '保存并加载', + }, + + messages: { + titles: { + normal: '温馨提示', + warning: '警告', + open: '打开 Shader Graph', + }, + reset: { + detail: '是否撤回当前所有操作,还原到上一次修改?', + }, + save: { + title: '保存 Shader Graph 资源', + detail: '是否保存当前所有操作?', + }, + scene_ready: { + mask_tips: '等待场景加载完成...', + }, + wait_load: { + mask_tips: '等待加载完成...', + }, + // 当前编辑的 Shader Graph 源文件发生变化,可能会发生冲突,需要重新 加载 或者 覆盖 + assets_change: { + mask_tips: '当前编辑的 Shader Graph 源文件发生变化,可能会发生冲突,请处理是否需要重新 ', + }, + // 目前没有 Shader Graph 可编辑,是否 新建并打开 或 打开 + need_create_new_asset: { + mask_tips: '目前没有 Shader Graph 可编辑,是否 ', + }, + // 检查到当前 Shader Graph 的原始资源文件丢失,需要重新 新建并打开 或 另存为并打开 + missing_assets: { + detail: '原始 Shader Graph 资源文件已经丢失,是否重新保存?', + mask_tips: '检查到当前 Shader Graph 的原始资源文件丢失,需要 ', + }, + save_and_reload_by_rename: { + mask_tips: '资源名已变更,需要保存当前操作并重新加载 ', + }, + }, + + menu: { + import: 'Shader Graph', + name: 'Shader Graph', + open: '打开', + }, + + right_menu: { + create_node: '创建节点', + paste: '粘贴', + delete: '删除', + copy: '拷贝', + cut: '剪切', + duplicate: '生成副本', + convert_to_variable: '转换为变量', + expand_group_node: '展开组节点', + create_subgraph_from_selection: '为选中创建子图', + create_group_from_selection: '为选中创建组节点', + create_annotation_for_selection: '为选中创建标注', + zoom_to_fit: '缩放至合适位置', + reset: '复位', + }, + + graph_property: { + menu_name: '变量', + title: '变量', + add: '添加变量', + delete: '删除变量', + }, + + create_node: { + title: '创建节点', + menu_name: '创建节点', + close: { + tooltip: '关闭创建节点窗口', + }, + search_input: { + placeholder: '搜索名称', + }, + }, + + preview: { + title: '预览', + menu_name: '预览', + mesh: '网格', + close: { + tooltip: '关闭预览窗口', + }, + }, + + custom_nodes: { + menu_name: 'Custom Nodes', + title: 'Custom Nodes', + }, +}; diff --git a/extensions/shader-graph/package.json b/extensions/shader-graph/package.json new file mode 100644 index 0000000..586c4a0 --- /dev/null +++ b/extensions/shader-graph/package.json @@ -0,0 +1,271 @@ +{ + "author": "Cocos Creator", + "package_version": 2, + "version": "1.0.0", + "editor": ">=3.8.2", + "name": "shader-graph", + "description": "i18n:shader-graph.description", + "main": "./dist/main.js", + "scripts": { + "build": "npm run build-less && tsc", + "watch": "tsc -w", + "build-less": "lessc ./static/shader-graph/style.less > ./static/shader-graph/style.css", + "pack": "npx ts-node ./build/pack.ts", + "test": "node --test ./tests" + }, + "dependencies": { + "@cocos/creator-types": "^3.8.1", + "@electron/remote": "^2.0.11", + "@itharbors/structures": "^0.0.6", + "@itharbors/ui-graph": "^0.3.2", + "@types/js-yaml": "^4.0.5", + "@types/lodash": "^4.14.200", + "@types/semver": "^7.5.4", + "fs-extra": "^10.0.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "semver": "^7.5.4", + "vue": "2.7.14" + }, + "devDependencies": { + "@types/adm-zip": "^0.5.4", + "@types/fs-extra": "^9.0.5", + "@types/node": "^16.0.1", + "adm-zip": "^0.5.10", + "ts-node": "^10.9.1", + "tslib": "^2.5.3", + "typescript": "^4.3.4" + }, + "panels": { + "shader-graph": { + "title": "i18n:shader-graph.title", + "type": "dockable", + "main": "dist/panels/shader-graph/index.js", + "icon": "./static/icon.png", + "size": { + "min-width": 400, + "min-height": 300, + "width": 1024, + "height": 600 + } + } + }, + "creator": { + "hookScript": "./dist/hooks.js" + }, + "contributions": { + "assets": { + "menu": { + "methods": "./dist/contributions/assets-menu.js", + "createMenu": "createMenu" + } + }, + "asset-db": { + "mount": { + "path": "./shader-node/assets", + "readonly": true, + "visible": "visibleshaderNode", + "enable": "enableShaderNode" + }, + "importer": { + "script": "./dist/importer/index.js", + "priority": [], + "list": [ + "registerShaderGraphImporter380" + ] + }, + "script": "./dist/importer/index.js", + "asset-handler": [ + { + "handler": "registerShaderGraphImporter", + "name": "shader-graph", + "extnames": [ + ".shadergraph" + ] + } + ] + }, + "scene": { + "script": "./dist/contributions/scene.js" + }, + "menu": [ + { + "path": "i18n:menu.panel/i18n:shader-graph.menu.name", + "label": "i18n:shader-graph.menu.open", + "message": "open" + } + ], + "shortcuts": [ + { + "message": "popup-create-menu", + "mac": "space", + "win": "space" + }, + { + "message": "save", + "mac": "cmd+s", + "win": "ctrl+s" + }, + { + "message": "delete", + "win": "backspace", + "mac": "backspace" + }, + { + "message": "delete", + "win": "delete", + "mac": "delete" + }, + { + "message": "copy", + "win": "ctrl+c", + "mac": "cmd+c" + }, + { + "message": "cut", + "win": "ctrl+x", + "mac": "cmd+x" + }, + { + "message": "paste", + "win": "ctrl+v", + "mac": "cmd+v" + }, + { + "message": "duplicate", + "win": "ctrl+d", + "mac": "cmd+d" + }, + { + "message": "undo", + "mac": "cmd+z", + "win": "ctrl+z" + }, + { + "message": "redo", + "mac": "cmd+shift+z", + "win": "ctrl+shift+z" + }, + { + "message": "create-group-node", + "mac": "cmd+g", + "win": "ctrl+g" + }, + { + "message": "restore-group-node", + "mac": "cmd+shift+g", + "win": "ctrl+shift+g" + } + ], + "messages": { + "open-panel": { + "methods": [ + "openPanel" + ] + }, + "open": { + "methods": [ + "openShaderGraph" + ] + }, + "open-asset": { + "methods": [ + "shader-graph.openAsset" + ] + }, + "popup-create-menu": { + "methods": [ + "shader-graph.onPopupCreateMenu" + ] + }, + "scene:ready": { + "methods": [ + "shader-graph.onSceneReady" + ] + }, + "scene:close": { + "methods": [ + "shader-graph.onSceneClose" + ] + }, + "asset-db:asset-add": { + "methods": [ + "shader-graph.onAssetAdd" + ] + }, + "asset-db:asset-delete": { + "methods": [ + "shader-graph.onAssetDelete" + ] + }, + "asset-db:asset-change": { + "methods": [ + "shader-graph.onAssetChange" + ] + }, + "save": { + "methods": [ + "shader-graph.onSave" + ] + }, + "delete": { + "methods": [ + "shader-graph.onDelete" + ] + }, + "copy": { + "methods": [ + "shader-graph.onCopy" + ] + }, + "cut": { + "methods": [ + "shader-graph.onCut" + ] + }, + "paste": { + "methods": [ + "shader-graph.onPaste" + ] + }, + "duplicate": { + "methods": [ + "shader-graph.onDuplicate" + ] + }, + "undo": { + "methods": [ + "shader-graph.onUndo" + ] + }, + "redo": { + "methods": [ + "shader-graph.onRedo" + ] + }, + "create-group-node": { + "methods": [ + "shader-graph.onCreateGroupNode" + ] + }, + "restore-group-node": { + "methods": [ + "shader-graph.onRestoreGroupNode" + ] + } + }, + "profile": { + "project": { + "readOnlyShaderNode": { + "default": false + }, + "enableShaderNode": { + "default": true + }, + "visibleshaderNode": { + "default": true + } + } + } + } +} diff --git a/extensions/shader-graph/readme/使用属性节点.png b/extensions/shader-graph/readme/使用属性节点.png new file mode 100644 index 0000000..75e6101 Binary files /dev/null and b/extensions/shader-graph/readme/使用属性节点.png differ diff --git a/extensions/shader-graph/readme/使用普通节点.png b/extensions/shader-graph/readme/使用普通节点.png new file mode 100644 index 0000000..c151346 Binary files /dev/null and b/extensions/shader-graph/readme/使用普通节点.png differ diff --git a/extensions/shader-graph/readme/右键创建资源.png b/extensions/shader-graph/readme/右键创建资源.png new file mode 100644 index 0000000..512bbaa Binary files /dev/null and b/extensions/shader-graph/readme/右键创建资源.png differ diff --git a/extensions/shader-graph/readme/导入扩展文件.png b/extensions/shader-graph/readme/导入扩展文件.png new file mode 100644 index 0000000..496c8dc Binary files /dev/null and b/extensions/shader-graph/readme/导入扩展文件.png differ diff --git a/extensions/shader-graph/readme/导入扩展文件夹.png b/extensions/shader-graph/readme/导入扩展文件夹.png new file mode 100644 index 0000000..c0ed0be Binary files /dev/null and b/extensions/shader-graph/readme/导入扩展文件夹.png differ diff --git a/extensions/shader-graph/readme/属性检查器选择effect.png b/extensions/shader-graph/readme/属性检查器选择effect.png new file mode 100644 index 0000000..b28b015 Binary files /dev/null and b/extensions/shader-graph/readme/属性检查器选择effect.png differ diff --git a/extensions/shader-graph/readme/属性类型节点.png b/extensions/shader-graph/readme/属性类型节点.png new file mode 100644 index 0000000..ffe0308 Binary files /dev/null and b/extensions/shader-graph/readme/属性类型节点.png differ diff --git a/extensions/shader-graph/readme/初始面板.png b/extensions/shader-graph/readme/初始面板.png new file mode 100644 index 0000000..66e4513 Binary files /dev/null and b/extensions/shader-graph/readme/初始面板.png differ diff --git a/extensions/shader-graph/readme/创建后的资源.png b/extensions/shader-graph/readme/创建后的资源.png new file mode 100644 index 0000000..b66c9ff Binary files /dev/null and b/extensions/shader-graph/readme/创建后的资源.png differ diff --git a/extensions/shader-graph/readme/创建属性窗口.png b/extensions/shader-graph/readme/创建属性窗口.png new file mode 100644 index 0000000..0e66968 Binary files /dev/null and b/extensions/shader-graph/readme/创建属性窗口.png differ diff --git a/extensions/shader-graph/readme/创建节点菜单.png b/extensions/shader-graph/readme/创建节点菜单.png new file mode 100644 index 0000000..66afb39 Binary files /dev/null and b/extensions/shader-graph/readme/创建节点菜单.png differ diff --git a/extensions/shader-graph/readme/整体结构-EN.png b/extensions/shader-graph/readme/整体结构-EN.png new file mode 100644 index 0000000..4984634 Binary files /dev/null and b/extensions/shader-graph/readme/整体结构-EN.png differ diff --git a/extensions/shader-graph/readme/整体结构.png b/extensions/shader-graph/readme/整体结构.png new file mode 100644 index 0000000..09f1eff Binary files /dev/null and b/extensions/shader-graph/readme/整体结构.png differ diff --git a/extensions/shader-graph/readme/效果图.png b/extensions/shader-graph/readme/效果图.png new file mode 100644 index 0000000..4fec3f5 Binary files /dev/null and b/extensions/shader-graph/readme/效果图.png differ diff --git a/extensions/shader-graph/readme/普通类型节点.png b/extensions/shader-graph/readme/普通类型节点.png new file mode 100644 index 0000000..26b7293 Binary files /dev/null and b/extensions/shader-graph/readme/普通类型节点.png differ diff --git a/extensions/shader-graph/readme/自定义节点.png b/extensions/shader-graph/readme/自定义节点.png new file mode 100644 index 0000000..70d6528 Binary files /dev/null and b/extensions/shader-graph/readme/自定义节点.png differ diff --git a/extensions/shader-graph/readme/自定义节点菜单.png b/extensions/shader-graph/readme/自定义节点菜单.png new file mode 100644 index 0000000..0929736 Binary files /dev/null and b/extensions/shader-graph/readme/自定义节点菜单.png differ diff --git a/extensions/shader-graph/readme/预览窗口.png b/extensions/shader-graph/readme/预览窗口.png new file mode 100644 index 0000000..73b867b Binary files /dev/null and b/extensions/shader-graph/readme/预览窗口.png differ diff --git a/extensions/shader-graph/shader-node/README.md b/extensions/shader-graph/shader-node/README.md new file mode 100644 index 0000000..79ab622 --- /dev/null +++ b/extensions/shader-graph/shader-node/README.md @@ -0,0 +1,216 @@ +## Shader Node + +Used for creating and parsing shader nodes. + +--- + +### Automatic Node Library Generation + +The code for the node library is parsed by executing **.scripts/generate.js** on the **chunks and masters** defined within +shader-templates, dynamically creating code in the **assets/operation** directory. + +**Template** +- chunk + - common + - input_basic + - math + - noise + - range + - shape + - uv +- master + - SurfaceMasterNode + - UnlitMasterNode + +--- + +**Generated Nodes** +- Input + - Basic + - Float + - Boolean + - Slider + - Vector2 + - Vector3 + - Vector4 + - Color + - Time + - Geometry + - NormalVector + - Position + - UV + - VertexColor + - ViewDirection + - Texture + - SimpleTexture2D + - Variable + - GetLocalVar + - RegisterLocalVar +- Math + - Advanced + - Absolute + - Exponential + - Length + - Log + - Module + - Negate + - Normalize + - Posterize + - ReciprocalSquare + - Reciprocal + - Basic + - Add + - Divide + - Multiply + - Power + - Square + - Substract + - Derivative + - DDX + - DDXY + - DDY + - Interpolation + - InverseLerp + - Lerp + - Smoothstep + - Range + - Clamp + - Fraction + - Max + - Min + - OneMinus + - RandomRange + - Remap + - Saturate + - Round + - Ceil + - Floor + - Round + - Sign + - Step + - Truncate + - Trigonometry + - Arccosine + - Arcsine + - Arctangent + - Arctangent2 + - Cosine + - DegressToRadians + - HyperbolicCosine + - HyperbolicSine + - Hyperbolic + - RadiansToDegrees + - Sine + - Tangent + - Vector + - CrossProduct + - Distance + - DotProduct + - Fresnel + - Projection + - Reflection + - SphereMask + - Wave + - NoiseSineWave + - SawtoothWave + - SquareWave + - TriangleWave +- Procedural + - Noise + - GradientNoise + - SimpleNoise + - Shape + - Ellipse + - Rectangle + - RoundRectangle +- Uv + - PolarCoordinates + - RotateCoordinates + - TillingAndOffset +- Channel + - Combine + - Split +- Logic + - AI + - And + - Any + - Branch + - Comparison + - IsNan + - Not + - Or + +--- + +## How to define the node class + +```typescript +// This path needs to be modified according to the path where you are storing it +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { slot } from '../../../utils'; + +@register({ + // Menu for creating a node + menu: 'Custom/Foo', + // The name of the node + title: 'Foo', + // The style of the node + style: { + headerColor: '#ff1e00' + }, + // Whether the node is a master node (master nodes are not deleted, there is only one master node) + master: false, +}) +export class Foo extends ShaderNode { + // Define properties on the node + // slot is similar to prop in that it defines information about the properties on the node. + // Parameter one [string]: name + // parameter two [any]: default value + // Parameter three [string]: type + // Parameter four [string]: type of connection + // Parameter five [Object]: custom object + data = { + // Input property list + inputs: [ + slot('In', 0, 'float', 'vector'), + ], + // Output property list + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + // List of attributes + props: [ + prop('Prop', 99, 'float'), + ], + }; + + /** + * Generating an effect + */ + generateCode() { + const input0 = this.getInputValue(0); + const output0 = this.getOutputVarDefine(0); + + return ` + ${output0} = ${input0}; + `; + } +} +``` + +### Preview image + +Menu: + + + +Node: + + + +--- + +### Known issues + +- Boolean variables are not currently supported diff --git a/extensions/shader-graph/shader-node/README.zh-CN.md b/extensions/shader-graph/shader-node/README.zh-CN.md new file mode 100644 index 0000000..0ac214f --- /dev/null +++ b/extensions/shader-graph/shader-node/README.zh-CN.md @@ -0,0 +1,216 @@ +## Shader Node + +用于创建与解析 shader node + +--- + +### 自动创建节点库 + +节点库的代码是通过执行 **.scripts/generate.js** 对 **shader-templates** 内部定义的 **chunk 与 master** 进行解析,动态 +创建代码到 **assets/operation** 目录下。 + +**模版** +- chunk + - common + - input_basic + - math + - noise + - range + - shape + - uv +- master + - SurfaceMasterNode + - UnlitMasterNode + +--- + +**生成后的节点** +- Input + - Basic + - Float + - Boolean + - Slider + - Vector2 + - Vector3 + - Vector4 + - Color + - Time + - Geometry + - NormalVector + - Position + - UV + - VertexColor + - ViewDirection + - Texture + - SimpleTexture2D + - Variable + - GetLocalVar + - RegisterLocalVar +- Math + - Advanced + - Absolute + - Exponential + - Length + - Log + - Module + - Negate + - Normalize + - Posterize + - ReciprocalSquare + - Reciprocal + - Basic + - Add + - Divide + - Multiply + - Power + - Square + - Substract + - Derivative + - DDX + - DDXY + - DDY + - Interpolation + - InverseLerp + - Lerp + - Smoothstep + - Range + - Clamp + - Fraction + - Max + - Min + - OneMinus + - RandomRange + - Remap + - Saturate + - Round + - Ceil + - Floor + - Round + - Sign + - Step + - Truncate + - Trigonometry + - Arccosine + - Arcsine + - Arctangent + - Arctangent2 + - Cosine + - DegressToRadians + - HyperbolicCosine + - HyperbolicSine + - Hyperbolic + - RadiansToDegrees + - Sine + - Tangent + - Vector + - CrossProduct + - Distance + - DotProduct + - Fresnel + - Projection + - Reflection + - SphereMask + - Wave + - NoiseSineWave + - SawtoothWave + - SquareWave + - TriangleWave +- Procedural + - Noise + - GradientNoise + - SimpleNoise + - Shape + - Ellipse + - Rectangle + - RoundRectangle +- Uv + - PolarCoordinates + - RotateCoordinates + - TillingAndOffset +- Channel + - Combine + - Split +- Logic + - AI + - And + - Any + - Branch + - Comparison + - IsNan + - Not + - Or + +--- + +## 如何定义节点类 + +```typescript +// 这路径需要根据你存放的路径进行修改 +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { slot } from '../../../utils'; + +@register({ + // 创建节点的菜单 + menu: 'Custom/Foo', + // 节点的名字 + title: 'Foo', + // 节点的样式 + style: { + headerColor: '#ff1e00' + }, + // 是否是主节点(主节点不会被删除,只有一个主节点) + master: false, +}) +export class Foo extends ShaderNode { + // 定义节点上的属性 + // slot 与 prop 相近,都是定义节点上属性的信息 + // 参数一[string]:名字 + // 参数二[any]:默认值 + // 参数三[string]:类型 + // 参数四[string]:连接的类型 + // 参数五[Object]:自定义对象 + data = { + // 输入属性列表 + inputs: [ + slot('In', 0, 'float', 'vector'), + ], + // 输出属性列表 + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + // 属性列表 + props: [ + prop('Prop', 99, 'float'), + ], + }; + + /** + * 生成 effect + */ + generateCode() { + const input0 = this.getInputValue(0); + const output0 = this.getOutputVarDefine(0); + + return ` + ${output0} = ${input0}; + `; + } +} +``` + +### 效果图: + +菜单: + + + +节点: + + + +--- + +### 已知问题 + +- Boolean 变量目前暂不支持 diff --git a/extensions/shader-graph/shader-node/assets/graph.meta b/extensions/shader-graph/shader-node/assets/graph.meta new file mode 100644 index 0000000..e963448 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/graph.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "821bb093-72ff-445b-be14-5567cc18294b", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/graph/index.ts b/extensions/shader-graph/shader-node/assets/graph/index.ts new file mode 100644 index 0000000..412f070 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/graph/index.ts @@ -0,0 +1 @@ +export * from './register'; diff --git a/extensions/shader-graph/shader-node/assets/graph/index.ts.meta b/extensions/shader-graph/shader-node/assets/graph/index.ts.meta new file mode 100644 index 0000000..72d0ca9 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/graph/index.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "ca80820d-3bb1-4b1a-b242-34a454f928e7", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/graph/register.ts b/extensions/shader-graph/shader-node/assets/graph/register.ts new file mode 100644 index 0000000..3008b06 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/graph/register.ts @@ -0,0 +1,61 @@ +import type { ShaderNode } from '../operation/base'; +import type { IRegisterOptions, NodeDefine, PropertyDefine } from '../operation/type'; + +import { ShaderPropertyType, ShaderProperty } from '../operation/property'; + +declare const cce: any; + +export const shaderNodeMap: Map = new Map(); +export const shaderPropertyMap: Map = new Map(); +export const shaderNodeClassMap: Map = new Map(); + +/** + * 转换成 dump 数据 + * @param options + */ + +export function register(options: IRegisterOptions) { + return function(sclass: typeof ShaderNode) { + const nodeCls = new sclass(); + const extend = Object.getPrototypeOf(nodeCls.constructor).name; + const nodeDefine = { + type: nodeCls.type, + extend: extend, + details: options, + node: nodeCls.data, + }; + + const node = nodeDefine.node; + if (nodeCls.type === 'PropertyNode') { + collectShaderProperty(nodeCls.type); + } + + shaderNodeClassMap.set(nodeCls.type, sclass); + shaderNodeMap.set(nodeCls.type, nodeDefine); + }; +} + +/** + * 收集 ShaderProperty 类型 + * @param declareType - 实际需要创建的 Block 类型 + */ +function collectShaderProperty(declareType: string) { + // 收集 property + shaderPropertyMap.clear(); + for (const key in ShaderPropertyType) { + const type = ShaderPropertyType[key as ShaderPropertyType]; + if (typeof type === 'string') { + const shaderProperty = new ShaderProperty(type); + shaderProperty.type = type; + shaderPropertyMap.set(type, { + type: type, + declareType: declareType, + name: shaderProperty.name, + outputs: shaderProperty.outputs, + default: shaderProperty.value, + details: shaderProperty.details, + }); + } + } +} + diff --git a/extensions/shader-graph/shader-node/assets/graph/register.ts.meta b/extensions/shader-graph/shader-node/assets/graph/register.ts.meta new file mode 100644 index 0000000..7a67776 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/graph/register.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "663ba445-e906-458b-ace1-73c42deba345", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation.meta b/extensions/shader-graph/shader-node/assets/operation.meta new file mode 100644 index 0000000..89577df --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "53001bff-e1cf-41fb-8ed5-4e29cd9e05a6", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/base.ts b/extensions/shader-graph/shader-node/assets/operation/base.ts new file mode 100644 index 0000000..374dcb9 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/base.ts @@ -0,0 +1,200 @@ +import { getJsonObject, getFloatString, getValueElement, getValueElementStr, getValueConcretePrecision, getPrecisionName } from './utils'; +// import { relative } from "path"; +import { ConcretePrecisionType, INodeDataDefine, PropDefine, SlotDefine, TextureConcretePrecision } from './type'; +import { Vec2, Vec3, Vec4 } from 'cc'; +import { ValueType } from 'cc'; +import { ShaderSlot } from './slot'; + +export class ShaderNodeProp { + value: Vec4 | Vec3 | Vec2 | Number | String; + data: PropDefine; + + constructor(defValue: Vec4 | Vec3 | Vec2 | Number | String, data: PropDefine) { + if (defValue instanceof ValueType) { + this.value = defValue.clone(); + } + else { + this.value = defValue; + } + + this.data = data; + } +} + +export class ShaderNode { + priority = 0; + uuid = ''; + slots: ShaderSlot[] = []; + + depChunks: string[] = []; + defines: any[] = []; + + isMasterNode = false; + isPropertyNode = false; + concretePrecisionType = ConcretePrecisionType.Min; + fixedConcretePrecision = 0; + + // subgraphNode: SubGraphNode | null = null; + + inputs: ShaderSlot[] = []; + outputs: ShaderSlot[] = []; + props: Map = new Map; + + data: INodeDataDefine = { }; + + get type() { + return this.constructor.name; + } + + init() { + this.slots.length = 0; + this.inputs.length = 0; + this.outputs.length = 0; + + if (this.data.inputs) { + this.data.inputs.forEach(s => { + const slot = new ShaderSlot(s, this); + this.inputs.push(slot); + this.slots.push(slot); + }); + } + + if (this.data.outputs) { + this.data.outputs.forEach(s => { + const slot = new ShaderSlot(s, this); + this.outputs.push(slot); + this.slots.push(slot); + }); + } + + if (this.data.props) { + this.data.props.forEach(prop => { + const p = new ShaderNodeProp(prop.default, prop); + this.props.set(prop.display, p); + }); + } + } + + get deps() { + const deps: ShaderNode[] = []; + this.inputs.forEach(i => { + if (i.connectSlot) { + deps.push(i.connectSlot.node); + } + }); + return deps; + } + + beforeGenreateCode() { + } + + addDependency(dep: ShaderNode) { + if (dep === this) { + return; + } + if (!this.deps.includes(dep)) { + this.deps.push(dep); + } + } + + calcConcretePrecision() { + if (this.fixedConcretePrecision > 0) { + this.slots.forEach(slot => { + slot._concretePrecision = this.fixedConcretePrecision; + }); + } + if (this.concretePrecisionType !== ConcretePrecisionType.Fixed) { + let finalPrecision = 1; + if (this.concretePrecisionType === ConcretePrecisionType.Min) { + finalPrecision = 999; + this.inputs.forEach(slot => { + let concretePrecision = slot.concretePrecision; + if (slot.connectSlot) { + concretePrecision = slot.connectSlot.concretePrecision; + } + finalPrecision = Math.min(finalPrecision, concretePrecision); + }); + } + else if (this.concretePrecisionType === ConcretePrecisionType.Max) { + finalPrecision = -999; + this.inputs.forEach(slot => { + let concretePrecision = slot.concretePrecision; + if (slot.connectSlot) { + concretePrecision = slot.connectSlot.concretePrecision; + } + finalPrecision = Math.max(finalPrecision, concretePrecision); + }); + } + else if (this.concretePrecisionType === ConcretePrecisionType.Texture) { + finalPrecision = TextureConcretePrecision.Texture2D; + } + else { + console.error('Not supported ConcretePrecisionType : ' + this.concretePrecisionType); + } + + this.slots.forEach(slot => { + slot._concretePrecision = finalPrecision; + }); + } + } + + setPriority(priority: number) { + this.priority = Math.max(priority, this.priority); + for (let i = 0; i < this.deps.length; i++) { + this.deps[i].setPriority(this.priority + 1); + } + } + + getPropWithName(name: string) { + let p; + if (this.props) { + p = this.props.get(name); + } + return p || new ShaderNodeProp(null, null); + } + getSlotWithSlotName(name: string) { + return this.slots.find(s => s.displayName === name); + } + getOutputSlotWithSlotName(name: string) { + return this.outputs.find(s => s.displayName === name); + } + getOutputVarName(idx: number) { + return this.outputs[idx].varName; + } + getOutputVarDefine(idx: number) { + return this.outputs[idx].varDefine; + } + getInputValue(idx: number): any { + return this.inputs[idx].slotValue; + } + + generateCode() { + return ''; + } +} + +// export class ShaderEdgeSlot { +// id = 0; +// nodeUuid = ''; + +// set (data: any) { +// this.id = data.m_SlotId; +// this.nodeUuid = data.m_NodeGUIDSerialized; +// } +// } + +// export class ShaderEdge { +// type = {}; +// data: any = {} + +// input: ShaderEdgeSlot = new ShaderEdgeSlot; +// output: ShaderEdgeSlot = new ShaderEdgeSlot; + +// constructor (data: any) { +// this.type = data.typeInfo; +// this.data = getJsonObject(data.JSONnodeData); + +// this.input.set(this.data.m_InputSlot); +// this.output.set(this.data.m_OutputSlot); +// } +// } diff --git a/extensions/shader-graph/shader-node/assets/operation/base.ts.meta b/extensions/shader-graph/shader-node/assets/operation/base.ts.meta new file mode 100644 index 0000000..4354fbd --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/base.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "d07516ab-6735-4c76-bbe7-42be2b00c242", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/context.ts b/extensions/shader-graph/shader-node/assets/operation/context.ts new file mode 100644 index 0000000..6b9e139 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/context.ts @@ -0,0 +1,21 @@ +import { ShaderNode } from './base'; +import { ShaderProperty } from './property'; + +export class ShaderContext { + shaderTemplatesDir: ''; + allNodes: ShaderNode[] = []; + properties: ShaderProperty[] = []; + + localVars: any[] = []; + getLocalVars: any[] = []; + + reset() { + this.allNodes.length = 0; + this.properties.length = 0; + + this.localVars.length = 0; + this.getLocalVars.length = 0; + } +} + +export const shaderContext = new ShaderContext(); diff --git a/extensions/shader-graph/shader-node/assets/operation/context.ts.meta b/extensions/shader-graph/shader-node/assets/operation/context.ts.meta new file mode 100644 index 0000000..5e59efd --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/context.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "130e02eb-46f3-4eab-b18e-15fe7fe48195", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated.meta b/extensions/shader-graph/shader-node/assets/operation/generated.meta new file mode 100644 index 0000000..cbbf4dd --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "81cb0745-02de-4f7f-95d1-4bed08b32051", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input.meta b/extensions/shader-graph/shader-node/assets/operation/generated/input.meta new file mode 100644 index 0000000..b5fabef --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "f5125ddf-a5de-4ee3-a3b7-e558d914689a", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic.meta b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic.meta new file mode 100644 index 0000000..fe34285 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "369858dc-a91f-488b-8ece-c45680b354b6", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/boolean.ts b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/boolean.ts new file mode 100644 index 0000000..33e90d3 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/boolean.ts @@ -0,0 +1,38 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Input/Basic/Boolean', + title: 'Boolean', +}) +export default class Boolean extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('In', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input0}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/boolean.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/boolean.ts.meta new file mode 100644 index 0000000..7f82a30 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/boolean.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "21fbeb3d-6cc2-4dea-805b-dd3455319677", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/float.ts b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/float.ts new file mode 100644 index 0000000..c0b7651 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/float.ts @@ -0,0 +1,38 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Input/Basic/Float', + title: 'Float', +}) +export default class Float extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('In', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input0}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/float.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/float.ts.meta new file mode 100644 index 0000000..bee731c --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/float.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "68e4b515-5124-472a-8e41-ddb98c6ec315", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/slider.ts b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/slider.ts new file mode 100644 index 0000000..4230ab7 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/slider.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Input/Basic/Slider', + title: 'Slider', +}) +export default class Slider extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + get type() { return 'Slider'; } + + data = { + inputs: [ + slot('In', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input0}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/slider.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/slider.ts.meta new file mode 100644 index 0000000..08c1e54 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/slider.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "263a8562-9525-42a7-8132-a3c62d2c99d7", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector2.ts b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector2.ts new file mode 100644 index 0000000..f991593 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector2.ts @@ -0,0 +1,40 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Input/Basic/Vector2', + title: 'Vector2', +}) +export default class Vector2 extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('X', 0, 'float', 'vector'), + slot('Y', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', Vec2.ZERO, 'vec2', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = vec2(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector2.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector2.ts.meta new file mode 100644 index 0000000..34467bd --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector2.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "7f0589e6-a7e6-4843-a14f-2322c9df0a4a", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector3.ts b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector3.ts new file mode 100644 index 0000000..6f5d579 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector3.ts @@ -0,0 +1,42 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Input/Basic/Vector3', + title: 'Vector3', +}) +export default class Vector3 extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('X', 0, 'float', 'vector'), + slot('Y', 0, 'float', 'vector'), + slot('Z', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', Vec3.ZERO, 'vec3', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = vec3(${input0}, ${input1}, ${input2}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector3.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector3.ts.meta new file mode 100644 index 0000000..63236ce --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector3.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "994865a9-980a-483e-850b-6465caf5d092", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector4.ts b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector4.ts new file mode 100644 index 0000000..db0ac4d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector4.ts @@ -0,0 +1,44 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Input/Basic/Vector4', + title: 'Vector4', +}) +export default class Vector4 extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('X', 0, 'float', 'vector'), + slot('Y', 0, 'float', 'vector'), + slot('Z', 0, 'float', 'vector'), + slot('W', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + const input3 = this.getInputValue(3); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = vec4(${input0}, ${input1}, ${input2}, ${input3}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector4.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector4.ts.meta new file mode 100644 index 0000000..36d6042 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/input/basic/vector4.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "4e4e9560-8527-4c02-8871-4b80090c5d26", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math.meta new file mode 100644 index 0000000..c5109b6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "07f4c502-d376-4702-ac51-7ce71a189f8f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced.meta new file mode 100644 index 0000000..7cd7179 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "b3ac6e02-3e8c-4f1a-98f6-33a0505f9687", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/absolute.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/absolute.ts new file mode 100644 index 0000000..d970b10 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/absolute.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Advanced/Absolute', + title: 'Absolute', +}) +export default class Absolute extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = abs(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/absolute.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/absolute.ts.meta new file mode 100644 index 0000000..8416906 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/absolute.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "bf087fce-808f-4721-a20a-3fe656a7fb54", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/exponential.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/exponential.ts new file mode 100644 index 0000000..47f9829 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/exponential.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Advanced/Exponential', + title: 'Exponential', +}) +export default class Exponential extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = exp(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/exponential.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/exponential.ts.meta new file mode 100644 index 0000000..c1f99af --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/exponential.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "5c491dca-4c22-468e-a6dc-4f1702fd4990", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/length.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/length.ts new file mode 100644 index 0000000..6cb3f68 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/length.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Advanced/Length', + title: 'Length', +}) +export default class Length extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = length(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/length.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/length.ts.meta new file mode 100644 index 0000000..8787ac9 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/length.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "d1665f0e-0eee-4d3c-a514-ef8694e5b039", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/log.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/log.ts new file mode 100644 index 0000000..22bfaf6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/log.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Advanced/Log', + title: 'Log', +}) +export default class Log extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = log(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/log.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/log.ts.meta new file mode 100644 index 0000000..7734012 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/log.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "40ca6c8e-8da2-44f0-9faa-45dbbadbf25d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/modulo.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/modulo.ts new file mode 100644 index 0000000..e1b67b5 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/modulo.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Advanced/Modulo', + title: 'Modulo', +}) +export default class Modulo extends ShaderNode { + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = mod(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/modulo.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/modulo.ts.meta new file mode 100644 index 0000000..4b2cf5f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/modulo.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "208071b5-6e2a-4646-b885-386c862716d6", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/negate.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/negate.ts new file mode 100644 index 0000000..191df6a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/negate.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Advanced/Negate', + title: 'Negate', +}) +export default class Negate extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = -${input0}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/negate.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/negate.ts.meta new file mode 100644 index 0000000..1397a47 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/negate.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "1b741c8f-1109-4454-bf75-d71498d2a1a2", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/normalize.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/normalize.ts new file mode 100644 index 0000000..db6d38f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/normalize.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Advanced/Normalize', + title: 'Normalize', +}) +export default class Normalize extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = normalize(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/normalize.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/normalize.ts.meta new file mode 100644 index 0000000..0d23500 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/normalize.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "007751f2-0424-4a62-a8ed-81314c12d228", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/posterize.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/posterize.ts new file mode 100644 index 0000000..0ee6fae --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/posterize.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Advanced/Posterize', + title: 'Posterize', +}) +export default class Posterize extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + slot('Steps', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = floor(${input0} / (1. / ${input1})) * (1. / ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/posterize.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/posterize.ts.meta new file mode 100644 index 0000000..4b8eb75 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/posterize.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "83ac43a3-fc83-4763-bb42-09fc2e69ae9d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal-square.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal-square.ts new file mode 100644 index 0000000..fb36c36 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal-square.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Advanced/ReciprocalSquare', + title: 'ReciprocalSquare', +}) +export default class ReciprocalSquare extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = 1. / (${input0} * ${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal-square.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal-square.ts.meta new file mode 100644 index 0000000..ca3eb46 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal-square.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "eae1ead7-8abc-445e-ae3a-b25d05a71574", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal.ts new file mode 100644 index 0000000..f109451 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Advanced/Reciprocal', + title: 'Reciprocal', +}) +export default class Reciprocal extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = 1. / ${input0}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal.ts.meta new file mode 100644 index 0000000..989fe61 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/advanced/reciprocal.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "5e330af6-c060-407e-8b8b-2f48e9b2aba5", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic.meta new file mode 100644 index 0000000..51b04a2 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "0acf5b0d-9a32-4758-98bf-c18cc51fad38", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/add.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/add.ts new file mode 100644 index 0000000..2a67f49 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/add.ts @@ -0,0 +1,40 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Basic/Add', + title: 'Add', +}) +export default class Add extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Max; + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input0} + ${input1}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/add.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/add.ts.meta new file mode 100644 index 0000000..befb04b --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/add.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "377629de-bfb0-4b80-8461-f54eeb25790f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/divide.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/divide.ts new file mode 100644 index 0000000..2f1e62d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/divide.ts @@ -0,0 +1,40 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Basic/Divide', + title: 'Divide', +}) +export default class Divide extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Max; + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input0} / ${input1}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/divide.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/divide.ts.meta new file mode 100644 index 0000000..c2f9a0b --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/divide.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "02792e9d-ebc3-41ee-bc76-6114db874c2e", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/multiply.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/multiply.ts new file mode 100644 index 0000000..0bcb63a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/multiply.ts @@ -0,0 +1,40 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Basic/Multiply', + title: 'Multiply', +}) +export default class Multiply extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Max; + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input0} * ${input1}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/multiply.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/multiply.ts.meta new file mode 100644 index 0000000..efacc9b --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/multiply.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "eb609477-de09-437e-92f6-2b2b661d441e", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/power.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/power.ts new file mode 100644 index 0000000..5ea03ad --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/power.ts @@ -0,0 +1,40 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Basic/Power', + title: 'Power', +}) +export default class Power extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = pow(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/power.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/power.ts.meta new file mode 100644 index 0000000..d8eeb7b --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/power.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "94eaa0b8-a267-4771-a4c7-ac35fad3eb6a", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/square.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/square.ts new file mode 100644 index 0000000..17d294c --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/square.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Basic/Square', + title: 'Square', +}) +export default class Square extends ShaderNode { + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = sqrt(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/square.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/square.ts.meta new file mode 100644 index 0000000..1bf7096 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/square.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "861ee8c0-c44f-4a93-9307-9336ce757948", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/substract.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/substract.ts new file mode 100644 index 0000000..778b8bb --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/substract.ts @@ -0,0 +1,40 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Basic/Substract', + title: 'Substract', +}) +export default class Substract extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Max; + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input0} - ${input1}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/substract.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/substract.ts.meta new file mode 100644 index 0000000..7dedfd9 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/basic/substract.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "5fbb90cd-1632-4e0d-9147-75b0def9cb2f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative.meta new file mode 100644 index 0000000..99b04f0 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "b218c091-a9db-4031-a11a-07b7d92154b1", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddx.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddx.ts new file mode 100644 index 0000000..5a60faf --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddx.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Derivative/DDX', + title: 'DDX', +}) +export default class DDX extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = dFdx(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddx.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddx.ts.meta new file mode 100644 index 0000000..8e2df86 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddx.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "a9e8cbbf-f00c-4982-a2fa-327e8663bb20", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddxy.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddxy.ts new file mode 100644 index 0000000..289756c --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddxy.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Derivative/DDXY', + title: 'DDXY', +}) +export default class DDXY extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = abs(dFdx(${input0})) + abs(dFdy(${input0})); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddxy.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddxy.ts.meta new file mode 100644 index 0000000..fa50d52 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddxy.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "ec1af9fb-f70a-448b-94fb-39814df8e228", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddy.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddy.ts new file mode 100644 index 0000000..933ccf3 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddy.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Derivative/DDY', + title: 'DDY', +}) +export default class DDY extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = dFdy(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddy.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddy.ts.meta new file mode 100644 index 0000000..b776fb0 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/derivative/ddy.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "8231c7ad-b08e-4900-a97f-938e78ff8f63", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation.meta new file mode 100644 index 0000000..800a45d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "2a30962a-d33d-4344-a979-b1b9c622a245", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/inverse-lerp.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/inverse-lerp.ts new file mode 100644 index 0000000..f14e0eb --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/inverse-lerp.ts @@ -0,0 +1,41 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Interpolation/InverseLerp', + title: 'InverseLerp', +}) +export default class InverseLerp extends ShaderNode { + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + slot('T', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = (${input2} - ${input0}) / (${input1} - ${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/inverse-lerp.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/inverse-lerp.ts.meta new file mode 100644 index 0000000..6e2b458 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/inverse-lerp.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "c589f46c-8f09-4e6f-9173-c741bae3297f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/lerp.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/lerp.ts new file mode 100644 index 0000000..e88bef4 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/lerp.ts @@ -0,0 +1,42 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Interpolation/Lerp', + title: 'Lerp', +}) +export default class Lerp extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Max; + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + slot('T', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = mix(${input0}, ${input1}, ${input2}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/lerp.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/lerp.ts.meta new file mode 100644 index 0000000..e8b4ba6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/lerp.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "0583a685-71f1-437e-bdd2-ba0acb2d7e2d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/smoothstep.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/smoothstep.ts new file mode 100644 index 0000000..25ce6fc --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/smoothstep.ts @@ -0,0 +1,41 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Interpolation/Smoothstep', + title: 'Smoothstep', +}) +export default class Smoothstep extends ShaderNode { + + data = { + inputs: [ + slot('Edge1', Vec4.ZERO, 'vec4', 'vector'), + slot('Edge2', Vec4.ZERO, 'vec4', 'vector'), + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = smoothstep(${input0}, ${input1}, ${input2}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/smoothstep.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/smoothstep.ts.meta new file mode 100644 index 0000000..a7f6bef --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/interpolation/smoothstep.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "d4d9c32e-3690-4728-8095-2555d3c9744e", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/range.meta new file mode 100644 index 0000000..a71e78a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "8949b5a7-071c-4c5d-bbfd-f680961b51da", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/clamp.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/clamp.ts new file mode 100644 index 0000000..13d07e2 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/clamp.ts @@ -0,0 +1,41 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Range/Clamp', + title: 'Clamp', +}) +export default class Clamp extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + slot('Min', Vec4.ZERO, 'vec4', 'vector'), + slot('Max', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = clamp(${input0}, ${input1}, ${input2}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/clamp.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/clamp.ts.meta new file mode 100644 index 0000000..c926609 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/clamp.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "4637ab9d-8ec1-4f10-a681-26f9d4b0ee6d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/fraction.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/fraction.ts new file mode 100644 index 0000000..152fa46 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/fraction.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Range/Fraction', + title: 'Fraction', +}) +export default class Fraction extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = fract(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/fraction.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/fraction.ts.meta new file mode 100644 index 0000000..ade6c14 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/fraction.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "1be9ae52-5b7f-4faf-b629-baaeb3b82f43", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/max.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/max.ts new file mode 100644 index 0000000..54c1325 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/max.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Range/Max', + title: 'Max', +}) +export default class Max extends ShaderNode { + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = max(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/max.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/max.ts.meta new file mode 100644 index 0000000..4fe4f04 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/max.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "6e8a0bc9-3096-472d-a4e4-3b7cc80717e5", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/min.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/min.ts new file mode 100644 index 0000000..b913573 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/min.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Range/Min', + title: 'Min', +}) +export default class Min extends ShaderNode { + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = min(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/min.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/min.ts.meta new file mode 100644 index 0000000..cf6efb6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/min.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "65629c20-5fb6-4596-8b1a-ad77cf32e7f0", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/one-minus.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/one-minus.ts new file mode 100644 index 0000000..8f0ad84 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/one-minus.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Range/OneMinus', + title: 'OneMinus', +}) +export default class OneMinus extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = 1. - ${input0}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/one-minus.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/one-minus.ts.meta new file mode 100644 index 0000000..5c57334 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/one-minus.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "cd61f55d-ed42-4107-a9e0-5cefb7d27552", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/random-range.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/random-range.ts new file mode 100644 index 0000000..2d9d72d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/random-range.ts @@ -0,0 +1,41 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Range/RandomRange', + title: 'RandomRange', +}) +export default class RandomRange extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + depChunks = ['range']; + + data = { + inputs: [ + slot('seed', Vec2.ZERO, 'vec2', 'vector'), + slot('minv', 0, 'float', 'vector'), + slot('maxv', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return `${output0} = RandomRange(${input0}, ${input1}, ${input2});`; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/random-range.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/random-range.ts.meta new file mode 100644 index 0000000..51744bf --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/random-range.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "33710454-4d3d-495d-90f3-ab2860451c52", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/remap.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/remap.ts new file mode 100644 index 0000000..c1ad4fc --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/remap.ts @@ -0,0 +1,42 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Range/Remap', + title: 'Remap', +}) +export default class Remap extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Max; + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + slot('InMinMax', Vec2.ZERO, 'vec2', 'vector'), + slot('OutMinMax', Vec2.ZERO, 'vec2', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input2}.x + (${input0} - ${input1}.x) * (${input2}.y - ${input2}.x) / (${input1}.y - ${input1}.x); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/remap.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/remap.ts.meta new file mode 100644 index 0000000..3688f89 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/remap.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "c8987537-cd49-425d-99fc-396fa64f3f23", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/saturate.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/saturate.ts new file mode 100644 index 0000000..423e91a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/saturate.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Range/Saturate', + title: 'Saturate', +}) +export default class Saturate extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = saturate(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/range/saturate.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/saturate.ts.meta new file mode 100644 index 0000000..f92be0d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/range/saturate.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "28c0b6b0-f43d-43c2-b0de-cdf9f0b8628d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/round.meta new file mode 100644 index 0000000..550b0bd --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "57b4e659-8d45-4b82-b772-0722e9eb0158", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/ceil.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/ceil.ts new file mode 100644 index 0000000..a9e52e0 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/ceil.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Round/Ceil', + title: 'Ceil', +}) +export default class Ceil extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ceil(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/ceil.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/ceil.ts.meta new file mode 100644 index 0000000..40753b1 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/ceil.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "9c519823-a62b-45e9-86c4-6904cb384bde", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/floor.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/floor.ts new file mode 100644 index 0000000..d8c12e5 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/floor.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Round/Floor', + title: 'Floor', +}) +export default class Floor extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = floor(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/floor.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/floor.ts.meta new file mode 100644 index 0000000..766244b --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/floor.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "ee049883-fd94-4c02-a620-717b303e5d17", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/round.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/round.ts new file mode 100644 index 0000000..2113be2 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/round.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Round/Round', + title: 'Round', +}) +export default class Round extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = floor(${input0} + 0.5); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/round.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/round.ts.meta new file mode 100644 index 0000000..13beba8 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/round.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "62b43fb3-25d4-42a9-a084-c8a49814ab45", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/sign.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/sign.ts new file mode 100644 index 0000000..2c71128 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/sign.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Round/Sign', + title: 'Sign', +}) +export default class Sign extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = sign(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/sign.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/sign.ts.meta new file mode 100644 index 0000000..12de5ec --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/sign.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "48af62b1-8e02-43ac-b1be-875e7becca02", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/step.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/step.ts new file mode 100644 index 0000000..7e5315d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/step.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Round/Step', + title: 'Step', +}) +export default class Step extends ShaderNode { + + data = { + inputs: [ + slot('Edge', Vec4.ZERO, 'vec4', 'vector'), + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = step(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/step.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/step.ts.meta new file mode 100644 index 0000000..62847a6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/step.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "2b4cbf65-0510-4caa-b413-3ea7357be5cd", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/truncate.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/truncate.ts new file mode 100644 index 0000000..71e4ac6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/truncate.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Round/Truncate', + title: 'Truncate', +}) +export default class Truncate extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = trunc(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/round/truncate.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/truncate.ts.meta new file mode 100644 index 0000000..1585a6a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/round/truncate.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "96ddf63e-3704-4d29-af85-d3f9c7257230", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry.meta new file mode 100644 index 0000000..9fa5cc7 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "f8e1ea91-8bf0-4deb-9b93-805f20294004", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arccosine.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arccosine.ts new file mode 100644 index 0000000..4a9ae7a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arccosine.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/Arccosine', + title: 'Arccosine', +}) +export default class Arccosine extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = acos(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arccosine.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arccosine.ts.meta new file mode 100644 index 0000000..5faa7b3 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arccosine.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "d296ea3c-7a38-40cf-8489-f807e1dc27a8", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arcsine.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arcsine.ts new file mode 100644 index 0000000..f29bc5f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arcsine.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/Arcsine', + title: 'Arcsine', +}) +export default class Arcsine extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = asin(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arcsine.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arcsine.ts.meta new file mode 100644 index 0000000..07cf741 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arcsine.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "63135766-8b34-49e0-97fc-06954a17e5a6", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent.ts new file mode 100644 index 0000000..0464ee8 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/Arctangent', + title: 'Arctangent', +}) +export default class Arctangent extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = atan(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent.ts.meta new file mode 100644 index 0000000..839a0f3 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "29869f7d-3799-4e1b-8df7-332605de5058", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent2.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent2.ts new file mode 100644 index 0000000..22ad5cf --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent2.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/Arctangent2', + title: 'Arctangent2', +}) +export default class Arctangent2 extends ShaderNode { + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = atan2(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent2.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent2.ts.meta new file mode 100644 index 0000000..7776d17 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/arctangent2.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "2a9c8ae7-e3e5-4759-ae01-5e9b1405fd51", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/cosine.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/cosine.ts new file mode 100644 index 0000000..b3795e2 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/cosine.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/Cosine', + title: 'Cosine', +}) +export default class Cosine extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = cos(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/cosine.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/cosine.ts.meta new file mode 100644 index 0000000..11627c3 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/cosine.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "2e9b7994-8a4e-428f-bfc7-b701b91a33a0", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/degrees-to-radians.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/degrees-to-radians.ts new file mode 100644 index 0000000..967f2d6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/degrees-to-radians.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/DegreesToRadians', + title: 'DegreesToRadians', +}) +export default class DegreesToRadians extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = radians(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/degrees-to-radians.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/degrees-to-radians.ts.meta new file mode 100644 index 0000000..01942e8 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/degrees-to-radians.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "54ccc2e7-c9a9-4dfa-b194-f5155d7f439b", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-cosine.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-cosine.ts new file mode 100644 index 0000000..72cb245 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-cosine.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/HyperbolicCosine', + title: 'HyperbolicCosine', +}) +export default class HyperbolicCosine extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = cosh(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-cosine.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-cosine.ts.meta new file mode 100644 index 0000000..11e7ab8 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-cosine.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "d1158cd4-c65e-4aec-a4af-94bd85efec12", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-sine.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-sine.ts new file mode 100644 index 0000000..f311b37 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-sine.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/HyperbolicSine', + title: 'HyperbolicSine', +}) +export default class HyperbolicSine extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = sinh(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-sine.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-sine.ts.meta new file mode 100644 index 0000000..850849b --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic-sine.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "d0e30c9c-1317-4097-8a0b-23beb925f4d2", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic.ts new file mode 100644 index 0000000..bb871f1 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/Hyperbolic', + title: 'Hyperbolic', +}) +export default class Hyperbolic extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = tanh(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic.ts.meta new file mode 100644 index 0000000..043c3fd --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/hyperbolic.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "b180bb2b-53a7-4238-a771-e6c953879a7d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/radians-to-degrees.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/radians-to-degrees.ts new file mode 100644 index 0000000..8f46b6f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/radians-to-degrees.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/RadiansToDegrees', + title: 'RadiansToDegrees', +}) +export default class RadiansToDegrees extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = degrees(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/radians-to-degrees.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/radians-to-degrees.ts.meta new file mode 100644 index 0000000..8342709 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/radians-to-degrees.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "12229d2c-2f96-41a2-90b2-00fd9ba60f13", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/sine.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/sine.ts new file mode 100644 index 0000000..70e7b6f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/sine.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/Sine', + title: 'Sine', +}) +export default class Sine extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = sin(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/sine.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/sine.ts.meta new file mode 100644 index 0000000..4f15aec --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/sine.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "203eade2-3249-4050-af45-cc979abd6245", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/tangent.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/tangent.ts new file mode 100644 index 0000000..894d740 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/tangent.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Trigonometry/Tangent', + title: 'Tangent', +}) +export default class Tangent extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = tan(${input0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/tangent.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/tangent.ts.meta new file mode 100644 index 0000000..5a84f7f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/trigonometry/tangent.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "adcb4b6b-7ffd-42eb-adbb-cb3ed87935e7", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector.meta new file mode 100644 index 0000000..9edcc9a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "ed404d59-a2fa-47f2-a2a4-08f8042ad5c7", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/cross-product.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/cross-product.ts new file mode 100644 index 0000000..72333a4 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/cross-product.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Vector/CrossProduct', + title: 'CrossProduct', +}) +export default class CrossProduct extends ShaderNode { + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = cross(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/cross-product.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/cross-product.ts.meta new file mode 100644 index 0000000..9301d91 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/cross-product.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "13009a40-e2f9-4a23-98d2-ba157db80255", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/distance.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/distance.ts new file mode 100644 index 0000000..488d7f3 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/distance.ts @@ -0,0 +1,40 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Vector/Distance', + title: 'Distance', +}) +export default class Distance extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = distance(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/distance.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/distance.ts.meta new file mode 100644 index 0000000..254f3ad --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/distance.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "1d67f823-16de-4f60-8228-48813bb8fd37", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/dot-product.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/dot-product.ts new file mode 100644 index 0000000..979af30 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/dot-product.ts @@ -0,0 +1,40 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Vector/DotProduct', + title: 'DotProduct', +}) +export default class DotProduct extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = dot(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/dot-product.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/dot-product.ts.meta new file mode 100644 index 0000000..9316f8a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/dot-product.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "fe81faec-eb9b-4baa-aa76-40f7c5d6d089", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/fresnel.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/fresnel.ts new file mode 100644 index 0000000..90c2f98 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/fresnel.ts @@ -0,0 +1,42 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Vector/Fresnel', + title: 'Fresnel', +}) +export default class Fresnel extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('Normal', Vec3.ZERO, 'vec3', 'vector'), + slot('ViewDir', Vec3.ZERO, 'vec3', 'vector'), + slot('Power', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = pow((1.0 - saturate(dot(normalize(${input0}), normalize(${input1})))), ${input2}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/fresnel.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/fresnel.ts.meta new file mode 100644 index 0000000..2f8c9ed --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/fresnel.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "861c8258-c5a9-4a07-aea9-b5b9c3e9674c", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/projection.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/projection.ts new file mode 100644 index 0000000..0ccb879 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/projection.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Vector/Projection', + title: 'Projection', +}) +export default class Projection extends ShaderNode { + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input1} * dot(${input0}, ${input1}) / dot(${input1}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/projection.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/projection.ts.meta new file mode 100644 index 0000000..15fdec1 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/projection.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "76ce87de-4880-4c2f-bc7a-531299fe20c9", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/reflection.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/reflection.ts new file mode 100644 index 0000000..bdf770b --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/reflection.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Vector/Reflection', + title: 'Reflection', +}) +export default class Reflection extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + slot('Normal', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = reflect(${input0}, ${input1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/reflection.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/reflection.ts.meta new file mode 100644 index 0000000..4f48aa4 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/reflection.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "83264b3c-1f60-4a95-bf35-3c8b3a7db2e6", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/rejection.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/rejection.ts new file mode 100644 index 0000000..0399d64 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/rejection.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Vector/Rejection', + title: 'Rejection', +}) +export default class Rejection extends ShaderNode { + + data = { + inputs: [ + slot('A', Vec4.ZERO, 'vec4', 'vector'), + slot('B', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input0} - (${input1} * dot(${input0}, ${input1}) / dot(${input1}, ${input1})) + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/rejection.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/rejection.ts.meta new file mode 100644 index 0000000..b2a789b --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/rejection.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "3617675c-4218-489b-bb60-f298a11a19b4", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/sphere-mask.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/sphere-mask.ts new file mode 100644 index 0000000..b04187f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/sphere-mask.ts @@ -0,0 +1,43 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Vector/SphereMask', + title: 'SphereMask', +}) +export default class SphereMask extends ShaderNode { + + data = { + inputs: [ + slot('Coords', Vec4.ZERO, 'vec4', 'vector'), + slot('Center', Vec4.ZERO, 'vec4', 'vector'), + slot('Radius', 0, 'float', 'vector'), + slot('Hardness', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + const input3 = this.getInputValue(3); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = 1 - saturate((distance(${input0}, ${input1}) - ${input2}) / (1 - ${input3})); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/sphere-mask.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/sphere-mask.ts.meta new file mode 100644 index 0000000..d4d1649 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/vector/sphere-mask.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "2fd4c014-d224-4815-b0f8-a7c99e5878f1", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/wave.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave.meta new file mode 100644 index 0000000..a278051 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "f4cc74c5-a0f1-4b20-9fd8-46f99626e9d2", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/noise-sine-wave.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/noise-sine-wave.ts new file mode 100644 index 0000000..59d9b4f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/noise-sine-wave.ts @@ -0,0 +1,43 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Wave/NoiseSineWave', + title: 'NoiseSineWave', +}) +export default class NoiseSineWave extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + slot('MinMax', Vec2.ZERO, 'vec2', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return ` + float sinIn = sin(${input0}); + float sinInOffset = sin(${input0} + 1.0); + float randomno = frac(sin((sinIn - sinInOffset) * (12.9898 + 78.233))*43758.5453); + float noise = lerp(${input1}.x, ${input1}.y, randomno); + ${output0} = sinIn + noise; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/noise-sine-wave.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/noise-sine-wave.ts.meta new file mode 100644 index 0000000..0b728bf --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/noise-sine-wave.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "fdd3a7c6-8eca-4a21-beed-d38143a58565", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/sawtooth-wave.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/sawtooth-wave.ts new file mode 100644 index 0000000..91f0660 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/sawtooth-wave.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Wave/SawtoothWave', + title: 'SawtoothWave', +}) +export default class SawtoothWave extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = 2 * (${input0} - floor(0.5 + ${input0})); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/sawtooth-wave.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/sawtooth-wave.ts.meta new file mode 100644 index 0000000..47987ea --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/sawtooth-wave.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "00c7bc00-69ff-4765-8a60-7fd5b385b65a", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/square-wave.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/square-wave.ts new file mode 100644 index 0000000..6bbcac5 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/square-wave.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Wave/SquareWave', + title: 'SquareWave', +}) +export default class SquareWave extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = 1.0 - 2.0 * round(frac(${input0})); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/square-wave.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/square-wave.ts.meta new file mode 100644 index 0000000..7a3c399 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/square-wave.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "d9905844-bdf5-4887-a230-a3efffad97d5", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/triangle-wave.ts b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/triangle-wave.ts new file mode 100644 index 0000000..e7b7fa3 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/triangle-wave.ts @@ -0,0 +1,37 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Math/Wave/TriangleWave', + title: 'TriangleWave', +}) +export default class TriangleWave extends ShaderNode { + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + const input0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = 2.0 * abs( 2 * (${input0} - floor(0.5 + ${input0})) ) - 1.0; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/triangle-wave.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/triangle-wave.ts.meta new file mode 100644 index 0000000..3797451 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/math/wave/triangle-wave.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "92a3e64f-1a16-466e-9c60-5813442801ac", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural.meta b/extensions/shader-graph/shader-node/assets/operation/generated/procedural.meta new file mode 100644 index 0000000..8a9e12e --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "d5c15a8e-de77-477c-af71-5c7636cb23e9", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise.meta b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise.meta new file mode 100644 index 0000000..b866736 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "0a45c81e-d549-4c8b-9fe4-f5e766e3f83c", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/gradient-noise.ts b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/gradient-noise.ts new file mode 100644 index 0000000..3de6537 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/gradient-noise.ts @@ -0,0 +1,43 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Procedural/Noise/GradientNoise', + title: 'GradientNoise', +}) +export default class GradientNoise extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + depChunks = ['noise']; + + data = { + inputs: [ + slot('uv', Vec2.ZERO, 'vec2', 'vector'), + slot('scale', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + let input0 = this.getInputValue(0); + if (!this.inputs[0].connectSlot) { + input0 = 'v_uv.xy'; + } + + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return `${output0} = GradientNoise(${input0}, ${input1});`; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/gradient-noise.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/gradient-noise.ts.meta new file mode 100644 index 0000000..c7d4cd9 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/gradient-noise.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "5ccd4955-9f62-4bb0-a37e-d4358da48173", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/simple-noise.ts b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/simple-noise.ts new file mode 100644 index 0000000..97afbb8 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/simple-noise.ts @@ -0,0 +1,43 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Procedural/Noise/SimpleNoise', + title: 'SimpleNoise', +}) +export default class SimpleNoise extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + depChunks = ['noise']; + + data = { + inputs: [ + slot('uv', Vec2.ZERO, 'vec2', 'vector'), + slot('scale', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + let input0 = this.getInputValue(0); + if (!this.inputs[0].connectSlot) { + input0 = 'v_uv.xy'; + } + + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return `${output0} = SimpleNoise(${input0}, ${input1});`; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/simple-noise.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/simple-noise.ts.meta new file mode 100644 index 0000000..867ae49 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/noise/simple-noise.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "35746bee-b451-44fd-8d35-092f0044c1ea", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape.meta b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape.meta new file mode 100644 index 0000000..1b3d062 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "d16b7f04-4727-49b5-9740-51c535f82d07", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/ellipse.ts b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/ellipse.ts new file mode 100644 index 0000000..d65f480 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/ellipse.ts @@ -0,0 +1,45 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Procedural/Shape/Ellipse', + title: 'Ellipse', +}) +export default class Ellipse extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + depChunks = ['shape']; + + data = { + inputs: [ + slot('uv', Vec2.ZERO, 'vec2', 'vector'), + slot('width', 0.5, 'float', 'vector'), + slot('height', 0.5, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + let input0 = this.getInputValue(0); + if (!this.inputs[0].connectSlot) { + input0 = 'v_uv.xy'; + } + + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return `${output0} = Ellipse(${input0}, ${input1}, ${input2});`; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/ellipse.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/ellipse.ts.meta new file mode 100644 index 0000000..e60ddde --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/ellipse.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "71cb8a34-bfbc-44bc-90c4-681d4f08784c", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/rectangle.ts b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/rectangle.ts new file mode 100644 index 0000000..84d7cfc --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/rectangle.ts @@ -0,0 +1,43 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Procedural/Shape/Rectangle', + title: 'Rectangle', +}) +export default class Rectangle extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + depChunks = ['shape']; + + data = { + inputs: [ + slot('uv', Vec2.ZERO, 'vec2', 'vector'), + slot('width', 0.5, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + let input0 = this.getInputValue(0); + if (!this.inputs[0].connectSlot) { + input0 = 'v_uv.xy'; + } + + const input1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + return `${output0} = Rectangle(${input0}, ${input1});`; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/rectangle.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/rectangle.ts.meta new file mode 100644 index 0000000..be3af82 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/rectangle.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "c5bfec72-1f7f-45c3-8ce8-0be6b68aa544", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/round-rectangle.ts b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/round-rectangle.ts new file mode 100644 index 0000000..3aee18f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/round-rectangle.ts @@ -0,0 +1,45 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../../graph/register'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { slot } from '../../../utils'; + +@register({ + menu: 'Procedural/Shape/RoundRectangle', + title: 'RoundRectangle', +}) +export default class RoundRectangle extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + depChunks = ['shape']; + + data = { + inputs: [ + slot('uv', Vec2.ZERO, 'vec2', 'vector'), + slot('width', 0.5, 'float', 'vector'), + slot('radius', 0.1, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'float', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + let input0 = this.getInputValue(0); + if (!this.inputs[0].connectSlot) { + input0 = 'v_uv.xy'; + } + + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return `${output0} = RoundRectangle(${input0}, ${input1}, ${input2});`; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/round-rectangle.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/round-rectangle.ts.meta new file mode 100644 index 0000000..e235bb0 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/procedural/shape/round-rectangle.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "ce89be7b-2c0e-424e-9108-6b7095ee29a2", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/uv.meta b/extensions/shader-graph/shader-node/assets/operation/generated/uv.meta new file mode 100644 index 0000000..7cc9b50 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/uv.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "12090d26-979b-42a3-92d1-f3da021aaa16", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/uv/polar-coordinates.ts b/extensions/shader-graph/shader-node/assets/operation/generated/uv/polar-coordinates.ts new file mode 100644 index 0000000..03069eb --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/uv/polar-coordinates.ts @@ -0,0 +1,47 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { slot } from '../../utils'; + +@register({ + menu: 'Uv/PolarCoordinates', + title: 'PolarCoordinates', +}) +export default class PolarCoordinates extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + depChunks = ['uv']; + + data = { + inputs: [ + slot('uv', Vec2.ZERO, 'vec2', 'vector'), + slot('center', Vec2.ZERO, 'vec2', 'vector'), + slot('radialScale', 0, 'float', 'vector'), + slot('lengthScale', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', Vec2.ZERO, 'vec2', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + let input0 = this.getInputValue(0); + if (!this.inputs[0].connectSlot) { + input0 = 'v_uv.xy'; + } + + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + const input3 = this.getInputValue(3); + + const output0 = this.getOutputVarDefine(0); + return `${output0} = PolarCoordinates(${input0}, ${input1}, ${input2}, ${input3});`; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/uv/polar-coordinates.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/uv/polar-coordinates.ts.meta new file mode 100644 index 0000000..4977bc3 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/uv/polar-coordinates.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "db4275ec-d2ae-4231-b440-4acf2ab87a98", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/uv/rotate-coordinates.ts b/extensions/shader-graph/shader-node/assets/operation/generated/uv/rotate-coordinates.ts new file mode 100644 index 0000000..58a3b05 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/uv/rotate-coordinates.ts @@ -0,0 +1,45 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { slot } from '../../utils'; + +@register({ + menu: 'Uv/RotateCoordinates', + title: 'RotateCoordinates', +}) +export default class RotateCoordinates extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + depChunks = ['uv']; + + data = { + inputs: [ + slot('uv', Vec2.ZERO, 'vec2', 'vector'), + slot('center', Vec2.ZERO, 'vec2', 'vector'), + slot('rotation', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', Vec2.ZERO, 'vec2', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + let input0 = this.getInputValue(0); + if (!this.inputs[0].connectSlot) { + input0 = 'v_uv.xy'; + } + + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return `${output0} = RotateCoordinates(${input0}, ${input1}, ${input2});`; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/uv/rotate-coordinates.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/uv/rotate-coordinates.ts.meta new file mode 100644 index 0000000..826b47f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/uv/rotate-coordinates.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "d691278b-7075-418e-bab8-53f6f5aa9a64", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/uv/tilling-and-offset.ts b/extensions/shader-graph/shader-node/assets/operation/generated/uv/tilling-and-offset.ts new file mode 100644 index 0000000..53d97f5 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/uv/tilling-and-offset.ts @@ -0,0 +1,47 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { slot } from '../../utils'; + +@register({ + menu: 'Uv/TillingAndOffset', + title: 'TillingAndOffset', +}) +export default class TillingAndOffset extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + depChunks = ['uv']; + + data = { + inputs: [ + slot('uv', Vec2.ZERO, 'vec2', 'vector'), + slot('tilling', Vec2.ZERO, 'vec2', 'vector'), + slot('offset', Vec2.ZERO, 'vec2', 'vector'), + ], + outputs: [ + slot('Out', Vec2.ZERO, 'vec2', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + + let input0 = this.getInputValue(0); + if (!this.inputs[0].connectSlot) { + input0 = 'v_uv.xy'; + } + + const input1 = this.getInputValue(1); + const input2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + return ` + ${output0} = ${input0} * ${input1} + ${input2}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/generated/uv/tilling-and-offset.ts.meta b/extensions/shader-graph/shader-node/assets/operation/generated/uv/tilling-and-offset.ts.meta new file mode 100644 index 0000000..88aaf3d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/generated/uv/tilling-and-offset.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "5f40ef91-59af-4e41-826c-fe4020774793", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/index.ts b/extensions/shader-graph/shader-node/assets/operation/index.ts new file mode 100644 index 0000000..8e25e26 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/index.ts @@ -0,0 +1,107 @@ +import './generated/uv/polar-coordinates.ts'; +import './generated/uv/rotate-coordinates.ts'; +import './generated/uv/tilling-and-offset.ts'; +import './generated/input/basic/boolean.ts'; +import './generated/input/basic/float.ts'; +import './generated/input/basic/slider.ts'; +import './generated/input/basic/vector2.ts'; +import './generated/input/basic/vector3.ts'; +import './generated/input/basic/vector4.ts'; +import './generated/math/advanced/absolute.ts'; +import './generated/math/advanced/exponential.ts'; +import './generated/math/advanced/length.ts'; +import './generated/math/advanced/log.ts'; +import './generated/math/advanced/modulo.ts'; +import './generated/math/advanced/negate.ts'; +import './generated/math/advanced/normalize.ts'; +import './generated/math/advanced/posterize.ts'; +import './generated/math/advanced/reciprocal-square.ts'; +import './generated/math/advanced/reciprocal.ts'; +import './generated/math/basic/add.ts'; +import './generated/math/basic/divide.ts'; +import './generated/math/basic/multiply.ts'; +import './generated/math/basic/power.ts'; +import './generated/math/basic/square.ts'; +import './generated/math/basic/substract.ts'; +import './generated/math/derivative/ddx.ts'; +import './generated/math/derivative/ddxy.ts'; +import './generated/math/derivative/ddy.ts'; +import './generated/math/interpolation/inverse-lerp.ts'; +import './generated/math/interpolation/lerp.ts'; +import './generated/math/interpolation/smoothstep.ts'; +import './generated/math/range/clamp.ts'; +import './generated/math/range/fraction.ts'; +import './generated/math/range/max.ts'; +import './generated/math/range/min.ts'; +import './generated/math/range/one-minus.ts'; +import './generated/math/range/random-range.ts'; +import './generated/math/range/remap.ts'; +import './generated/math/range/saturate.ts'; +import './generated/math/round/ceil.ts'; +import './generated/math/round/floor.ts'; +import './generated/math/round/round.ts'; +import './generated/math/round/sign.ts'; +import './generated/math/round/step.ts'; +import './generated/math/round/truncate.ts'; +import './generated/math/trigonometry/arccosine.ts'; +import './generated/math/trigonometry/arcsine.ts'; +import './generated/math/trigonometry/arctangent.ts'; +import './generated/math/trigonometry/arctangent2.ts'; +import './generated/math/trigonometry/cosine.ts'; +import './generated/math/trigonometry/degrees-to-radians.ts'; +import './generated/math/trigonometry/hyperbolic-cosine.ts'; +import './generated/math/trigonometry/hyperbolic-sine.ts'; +import './generated/math/trigonometry/hyperbolic.ts'; +import './generated/math/trigonometry/radians-to-degrees.ts'; +import './generated/math/trigonometry/sine.ts'; +import './generated/math/trigonometry/tangent.ts'; +import './generated/math/vector/cross-product.ts'; +import './generated/math/vector/distance.ts'; +import './generated/math/vector/dot-product.ts'; +import './generated/math/vector/fresnel.ts'; +import './generated/math/vector/projection.ts'; +import './generated/math/vector/reflection.ts'; +import './generated/math/vector/rejection.ts'; +import './generated/math/vector/sphere-mask.ts'; +import './generated/math/wave/noise-sine-wave.ts'; +import './generated/math/wave/sawtooth-wave.ts'; +import './generated/math/wave/square-wave.ts'; +import './generated/math/wave/triangle-wave.ts'; +import './generated/procedural/noise/gradient-noise.ts'; +import './generated/procedural/noise/simple-noise.ts'; +import './generated/procedural/shape/ellipse.ts'; +import './generated/procedural/shape/rectangle.ts'; +import './generated/procedural/shape/round-rectangle.ts'; +import './manual/index.ts'; +import './manual/channel/combine.ts'; +import './manual/channel/split.ts'; +import './manual/input/input-node.ts'; +import './manual/input/property-node.ts'; +import './manual/logic/all.ts'; +import './manual/logic/and.ts'; +import './manual/logic/any.ts'; +import './manual/logic/branch.ts'; +import './manual/logic/comparison.ts'; +import './manual/logic/is-nan.ts'; +import './manual/logic/not.ts'; +import './manual/logic/or.ts'; +import './manual/master/MasterNode.ts'; +import './manual/master/SurfaceMasterNode.ts'; +import './manual/master/UnlitMasterNode.ts'; +import './manual/subgraph/SubGraphNode.ts'; +import './manual/subgraph/SubGraphOutputNode.ts'; +import './manual/utility/PreviewNode.ts'; +import './manual/input/basic/color.ts'; +import './manual/input/basic/time.ts'; +import './manual/input/geometry/normal-vector.ts'; +import './manual/input/geometry/position.ts'; +import './manual/input/geometry/uv.ts'; +import './manual/input/geometry/vertex-color.ts'; +import './manual/input/geometry/view-direction.ts'; +import './manual/input/texture/cubemap-asset.ts'; +import './manual/input/texture/sample-cubemap.ts'; +import './manual/input/texture/sample-texture2d.ts'; +import './manual/input/texture/texture-asset.ts'; +import './manual/input/texture/texture2d-asset.ts'; +import './manual/input/variable/get-local-var.ts'; +import './manual/input/variable/register-local-var.ts'; diff --git a/extensions/shader-graph/shader-node/assets/operation/index.ts.meta b/extensions/shader-graph/shader-node/assets/operation/index.ts.meta new file mode 100644 index 0000000..017a115 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/index.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "00450c9d-2c84-414b-a6f3-4c234d4639a6", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual.meta b/extensions/shader-graph/shader-node/assets/operation/manual.meta new file mode 100644 index 0000000..8db7eb4 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "d84c0713-acbc-4ba3-8303-f44c1f6169b2", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/artistic.meta b/extensions/shader-graph/shader-node/assets/operation/manual/artistic.meta new file mode 100644 index 0000000..3ed3e36 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/artistic.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "3d4755f8-2ca1-4826-b050-f97df95c41a3", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/channel.meta b/extensions/shader-graph/shader-node/assets/operation/manual/channel.meta new file mode 100644 index 0000000..addd20a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/channel.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "7f28f4c8-26b6-4de9-8d14-469a0a0092da", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/channel/combine.ts b/extensions/shader-graph/shader-node/assets/operation/manual/channel/combine.ts new file mode 100644 index 0000000..b263ca2 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/channel/combine.ts @@ -0,0 +1,53 @@ +import { Vec4, Vec3, Vec2 } from 'cc'; +import { register } from '../../../graph'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { slot } from '../../utils'; + +@register({ + menu: 'Channel/Combine', + title: 'Combine', +}) +export default class CombineNode extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('R', 0, 'float', 'vector'), + slot('G', 0, 'float', 'vector'), + slot('B', 0, 'float', 'vector'), + slot('A', 0, 'float', 'vector'), + ], + outputs: [ + slot('RGBA', Vec4.ZERO, 'vec4', 'vector'), + slot('RGB', Vec3.ZERO, 'vec3', 'vector'), + slot('RG', Vec2.ZERO, 'vec2', 'vector'), + ], + }; + + generateCode() { + + const slotR = this.getSlotWithSlotName('R'); + const slotG = this.getSlotWithSlotName('G'); + const slotB = this.getSlotWithSlotName('B'); + const slotA = this.getSlotWithSlotName('A'); + + const slotRGBA = this.getSlotWithSlotName('RGBA'); + const slotRGB = this.getSlotWithSlotName('RGB'); + const slotRG = this.getSlotWithSlotName('RG'); + + let code = ''; + + if (slotRGBA && slotRGBA.connectSlot) { + code += `${slotRGBA?.varDefine} = vec4(${slotR?.slotValue}, ${slotG?.slotValue}, ${slotB?.slotValue}, ${slotA?.slotValue});\n`; + } + if (slotRGB && slotRGB.connectSlot) { + code += `${slotRGB?.varDefine} = vec3(${slotR?.slotValue}, ${slotG?.slotValue}, ${slotB?.slotValue});\n`; + } + if (slotRG && slotRG.connectSlot) { + code += `${slotRG?.varDefine} = vec2(${slotR?.slotValue}, ${slotG?.slotValue});\n`; + } + + return code; + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/channel/combine.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/channel/combine.ts.meta new file mode 100644 index 0000000..f620848 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/channel/combine.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "c9cd7714-c732-467e-aac1-c72a3a8bd1a6", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/channel/split.ts b/extensions/shader-graph/shader-node/assets/operation/manual/channel/split.ts new file mode 100644 index 0000000..1f6b11b --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/channel/split.ts @@ -0,0 +1,38 @@ +import { Vec4 } from 'cc'; +import { register } from '../../../graph'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { slot } from '../../utils'; + +@register({ + menu: 'Channel/Split', + title: 'Split', +}) +export default class SplitNode extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + + data = { + inputs: [ + slot('Vector', new Vec4, 'vec4', 'vector'), + ], + outputs: [ + slot('R', 0, 'float', 'vector'), + slot('G', 0, 'float', 'vector'), + slot('B', 0, 'float', 'vector'), + slot('A', 0, 'float', 'vector'), + ], + }; + + generateCode() { + const Value = this.getInputValue(0); + const codes: string[] = []; + this.data.outputs.forEach(o => { + const slot = this.getOutputSlotWithSlotName(o.display); + if (slot && slot.connectSlot) { + codes.push(`float ${slot?.varName} = ${Value}.${o.display.toLowerCase()};`); + } + }); + + return codes.join('\n'); + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/channel/split.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/channel/split.ts.meta new file mode 100644 index 0000000..39c92b5 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/channel/split.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "3da06cb8-854d-4ec3-87c7-32e69587d3b1", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/index.ts b/extensions/shader-graph/shader-node/assets/operation/manual/index.ts new file mode 100644 index 0000000..7ff54fb --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/index.ts @@ -0,0 +1,27 @@ +// import { ShaderNode } from '../base'; +// import globby from 'globby'; +// import path from 'fire-path'; + +// let nodePaths = globby.sync([ +// path.join(__dirname, './**').replace(/\\/g, '/'), +// path.join(__dirname, '!./index.*').replace(/\\/g, '/'), +// ]) +// let nodes = {}; +// for (let i = 0; i < nodePaths.length; i++) { +// let nodePath = nodePaths[i]; +// let nodeName = path.basenameNoExt(nodePath); +// nodes[nodeName] = require(nodePath).default; +// } + +// export function createNode (data: any) { +// let type = data.typeInfo; +// let name = type.fullName; +// name = name.replace('UnityEditor.ShaderGraph.', ''); + +// let ctor = nodes[name]; +// if (!ctor) { +// console.warn(`Can not find Node with Name [${name}]`) +// ctor = ShaderNode +// } +// return ctor && new ctor(data); +// } diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/index.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/index.ts.meta new file mode 100644 index 0000000..1e566dd --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/index.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "ce045985-d7fc-4550-aa8a-73b6144e0a39", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input.meta new file mode 100644 index 0000000..24c51e7 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "9b4e7d66-8af4-4cd6-b21e-9e6b29bd4834", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/InputNode.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/InputNode.ts.meta new file mode 100644 index 0000000..87c3a34 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/InputNode.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "89e26a63-4e80-4c5c-bd93-94024a1c81b7", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/basic.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/basic.meta new file mode 100644 index 0000000..0c732ca --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/basic.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "b01ae50d-31ff-40d3-8dfe-405a944fa882", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/color.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/color.ts new file mode 100644 index 0000000..4f68671 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/color.ts @@ -0,0 +1,28 @@ +import { Color, Vec4 } from 'cc'; +import InputNode from '../input-node'; +import { prop, slot } from '../../../utils'; +import { register } from '../../../../graph'; + +@register({ + menu: 'Input/Basic/Color', + title: 'Color', +}) +export default class ColorNode extends InputNode { + fixedConcretePrecision = 4; + + data = { + props: [ + prop('Color', new Vec4, 'color'), + ], + outputs: [ + slot('Out', new Vec4, 'vec4', 'vector'), + ], + }; + + generateCode() { + const prop = this.getPropWithName('Color'); + const c = prop.value as Color; + return `vec4 ${this.getOutputVarName(0)} = vec4(${c.x}, ${c.y}, ${c.z}, ${c.w});`; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/color.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/color.ts.meta new file mode 100644 index 0000000..a9dcec6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/color.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "e3d3490d-0e60-490b-b3f9-95d300e7281a", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/time.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/time.ts new file mode 100644 index 0000000..fc800c5 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/time.ts @@ -0,0 +1,49 @@ +import { slot } from '../../../utils'; +import InputNode from '../input-node'; + +import { register } from '../../../../graph'; + +@register({ + menu: 'Input/Basic/Time', + title: 'Time', +}) +export default class TimeNode extends InputNode { + data = { + outputs: [ + slot('Time', 0, 'float', 'vector'), + slot('Sine Time', 0, 'float', 'vector'), + slot('Cosine Time', 0, 'float', 'vector'), + slot('Delta Time', 0, 'float', 'vector'), + slot('Smooth Delta', 0, 'float', 'vector'), + ], + }; + + generateCode() { + const Time = this.getOutputSlotWithSlotName('Time'); + const SineTime = this.getOutputSlotWithSlotName('Sine Time'); + const CosineTime = this.getOutputSlotWithSlotName('Cosine Time'); + const DeltaTime = this.getOutputSlotWithSlotName('Delta Time'); + const SmoothDelta = this.getOutputSlotWithSlotName('Smooth Delta'); + + let code = ''; + if (Time?.connectSlot) { + code += `float ${Time.varName} = cc_time.x;`; + } + if (SineTime?.connectSlot) { + code += `float ${SineTime.varName} = sin(cc_time.x);`; + } + if (CosineTime?.connectSlot) { + code += `float ${CosineTime.varName} = cos(cc_time.x);`; + } + if (DeltaTime?.connectSlot) { + code += `float ${DeltaTime.varName} = cc_time.y;`; + } + if (SmoothDelta?.connectSlot) { + console.warn('Not support smooth delta time'); + code += `float ${SmoothDelta.varName} = cc_time.y;`; + } + + return code; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/time.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/time.ts.meta new file mode 100644 index 0000000..2cf9dc6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/basic/time.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "d78e78a8-c222-475d-b568-d89fa38525e8", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry.meta new file mode 100644 index 0000000..e0c4591 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "c9afd016-01cf-497d-96e5-9b04607e80ba", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/normal-vector.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/normal-vector.ts new file mode 100644 index 0000000..99c1c84 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/normal-vector.ts @@ -0,0 +1,48 @@ +import { Vec3 } from 'cc'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType, NormalSpace } from '../../../type'; +import { getEnumDefine, prop, slot } from '../../../utils'; + +import { register } from '../../../../graph'; + +@register({ + menu: 'Input/Geometry/NormalVector', + title: 'NormalVector', +}) +export default class NormalVectorNode extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + fixedConcretePrecision = 3; + + data = { + props: [ + prop('Space', NormalSpace.World, 'enum', { enum: NormalSpace }), + ], + outputs: [ + slot('Normal', Vec3.ZERO, 'vec3', 'vector'), + ], + }; + + generateCode() { + const prop = this.getPropWithName('Space'); + + let name = 'normal'; + if (prop.value === NormalSpace.Local) { + name = 'normal'; + } + else if (prop.value === NormalSpace.View) { + name = 'viewNormal'; + } + // else if (prop.value === NormalSpace.Tangent) { + // // name = 'tangentNormal'; + // name = 'worldNormal'; + // } + else if (prop.value === NormalSpace.World) { + name = 'worldNormal'; + } + + this.defines = [getEnumDefine(NormalSpace, prop.value)]; + + return `${this.getOutputVarDefine(0)} = ${name};`; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/normal-vector.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/normal-vector.ts.meta new file mode 100644 index 0000000..444d171 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/normal-vector.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "f4d52b63-1826-4ad4-9b0a-b19e10503342", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/position.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/position.ts new file mode 100644 index 0000000..c850c6d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/position.ts @@ -0,0 +1,50 @@ +import { Vec3 } from 'cc'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType, PositionSpace } from '../../../type'; +import { getEnumDefine, prop, slot } from '../../../utils'; +import { register } from '../../../../graph'; + +@register({ + menu: 'Input/Geometry/Position', + title: 'Position', +}) +export default class PositionNode extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + fixedConcretePrecision = 3; + + data = { + props: [ + prop('Space', PositionSpace.World, 'enum', { enum: PositionSpace }), + ], + outputs: [ + slot('Position', new Vec3, 'vec3', 'vector'), + ], + }; + + generateCode() { + const prop = this.getPropWithName('Space'); + + let name = 'position'; + if (prop.value === PositionSpace.Local) { + name = 'position'; + } + else if (prop.value === PositionSpace.View) { + name = 'viewPos'; + } + // else if (prop.value === PositionSpace.Tangent) { + // // name = 'v_tangentPos'; + // name = 'worldPos'; + // } + else if (prop.value === PositionSpace.World) { + name = 'worldPos'; + } + // else if (prop.value === PositionSpace.AbsoluteWorld) { + // name = 'worldPos'; + // } + + this.defines = [getEnumDefine(PositionSpace, prop.value)]; + + return `${this.getOutputVarDefine(0)} = ${name}.xyz;`; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/position.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/position.ts.meta new file mode 100644 index 0000000..e924bba --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/position.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "c4117179-6029-4858-a425-f8696d08da90", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/uv.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/uv.ts new file mode 100644 index 0000000..4af19fa --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/uv.ts @@ -0,0 +1,34 @@ +import { Vec2 } from 'cc'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { prop, slot } from '../../../utils'; +import { register } from '../../../../graph'; + +@register({ + menu: 'Input/Geometry/UV', + title: 'UV', +}) +export default class UVNode extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + fixedConcretePrecision = 2; + + data = { + props: [ + prop('Channel', 0, 'float'), + ], + outputs: [ + slot('UV', new Vec2, 'vec2', 'vector'), + ], + }; + + generateCode() { + const prop = this.getPropWithName('Channel'); + if (!prop) { + console.warn('UV Node generate code undefined'); + return ''; + } + const uvName = `v_uv${(prop.value as number) > 0 ? prop.value : ''}`; + return `${this.getOutputVarDefine(0)} = ${uvName};`; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/uv.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/uv.ts.meta new file mode 100644 index 0000000..ca558c6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/uv.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "95b7b48d-922d-416b-93e4-e004175dc1b9", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/vertex-color.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/vertex-color.ts new file mode 100644 index 0000000..e94240a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/vertex-color.ts @@ -0,0 +1,25 @@ +import { Vec4 } from 'cc'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { prop, slot } from '../../../utils'; +import { register } from '../../../../graph'; + +@register({ + menu: 'Input/Geometry/VertexColor', + title: 'VertexColor', +}) +export default class VertexColorNode extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + fixedConcretePrecision = 4; + + data = { + outputs: [ + slot('Out', new Vec4, 'vec4', 'vector'), + ], + }; + + generateCode() { + return `${this.getOutputVarDefine(0)} = FSInput_vertexColor;`; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/vertex-color.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/vertex-color.ts.meta new file mode 100644 index 0000000..9f09d41 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/vertex-color.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "57f73c67-41c9-4d26-81ff-2d90db0a8f0d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/view-direction.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/view-direction.ts new file mode 100644 index 0000000..530f9f0 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/view-direction.ts @@ -0,0 +1,51 @@ +import { Vec3 } from 'cc'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType, ViewDirSpace, PositionSpace } from '../../../type'; +import { getEnumDefine, prop, slot } from '../../../utils'; +import { register } from '../../../../graph'; + +@register({ + menu: 'Input/Geometry/ViewDirection', + title: 'ViewDirection', +}) +export default class ViewDirection extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + fixedConcretePrecision = 3; + + get type() { + return 'ViewDirection'; + } + + data = { + props: [ + prop('Space', ViewDirSpace.World, 'enum', { enum: ViewDirSpace }), + ], + outputs: [ + slot('ViewDirection', new Vec3, 'vec3', 'vector'), + ], + }; + + generateCode() { + const space = this.getPropWithName('Space'); + + let name = 'view'; + if (space.value === ViewDirSpace.Local) { + name = 'view'; + } + else if (space.value === ViewDirSpace.View) { + name = 'viewView'; + } + // else if (space.value === ViewDirSpace.Tangent) { + // // name = 'tangentView'; + // name = 'worldView'; + // } + else if (space.value === ViewDirSpace.World) { + name = 'worldView'; + } + + this.defines = [getEnumDefine(ViewDirSpace, space.value)]; + + return `${this.getOutputVarDefine(0)} = ${name};`; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/view-direction.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/view-direction.ts.meta new file mode 100644 index 0000000..24c6b28 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/geometry/view-direction.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "fbe7300f-e8dc-414e-a3ab-2f4ee7836cc3", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/input-node.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/input-node.ts new file mode 100644 index 0000000..4851ab6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/input-node.ts @@ -0,0 +1,7 @@ +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; + +export default class InputNode extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/input-node.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/input-node.ts.meta new file mode 100644 index 0000000..4b0274a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/input-node.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "fcee978c-06f2-41b7-9483-2db584a5b6ce", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/property-node.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/property-node.ts new file mode 100644 index 0000000..4980f10 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/property-node.ts @@ -0,0 +1,66 @@ +import { ShaderNode } from '../../base'; +import { shaderContext } from '../../context'; +import { ShaderProperty, ShaderPropertyType } from '../../property'; +import { ShaderSlot } from '../../slot'; +import { ConcretePrecisionType, TextureConcretePrecision } from '../../type'; +import { prop, slot } from '../../utils'; +import { register } from '../../../graph/register'; + +@register({ + style: { + headerColor: '#ec7063', + }, +}) +export default class PropertyNode extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + property: ShaderProperty | null = null; + + name = ''; + + data = { + outputs: [ + slot('Out', {} as any, 'any', 'any'), + ], + }; + + calcConcretePrecision(): void { + // super.calcConcretePrecision() + + let concretePrecision = 0; + const prop = shaderContext.properties.find(p => p.name === this.name)!; + switch (prop.type) { + case ShaderPropertyType.Float: + case ShaderPropertyType.Boolean: + concretePrecision = 1; + break; + case ShaderPropertyType.Vector2: + concretePrecision = 2; + break; + case ShaderPropertyType.Vector3: + concretePrecision = 4; + break; + case ShaderPropertyType.Vector4: + case ShaderPropertyType.Color: + concretePrecision = 4; + break; + } + this.slots[0]._concretePrecision = concretePrecision; + } + + isPropertyNode = true; + generateCode() { + const code = ''; + // let prop = shaderContext.properties.find(p => p.name === this.name) + // if (prop) { + // this.outputs.forEach((o, i) => { + // if (o.connectSlot) { + // o.value = prop.value; + // code += `${this.getOutputVarDefine(i)} = ${this.name};\n` + // } + // }) + // } + + return code; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/property-node.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/property-node.ts.meta new file mode 100644 index 0000000..4ade951 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/property-node.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "9319472c-3043-49fa-8582-3f1142c7ef5c", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture.meta new file mode 100644 index 0000000..9394de4 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "a4a78e41-b567-4e7d-855f-ba68ce22dfa8", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/cubemap-asset.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/cubemap-asset.ts new file mode 100644 index 0000000..09bec92 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/cubemap-asset.ts @@ -0,0 +1,7 @@ +import TextureAsset from './texture-asset'; + +export default class CubemapAsset extends TextureAsset { + generateCode() { + return `samplerCube ${this.getOutputVarName(0)} = ${this.getInputValue(0)};`; + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/cubemap-asset.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/cubemap-asset.ts.meta new file mode 100644 index 0000000..84f84ab --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/cubemap-asset.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "f593bebc-7a34-476e-8613-70f0cbedd65e", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-cubemap.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-cubemap.ts new file mode 100644 index 0000000..c31eaf4 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-cubemap.ts @@ -0,0 +1,34 @@ +import InputNode from '../input-node'; +import { NormalMapSpace, NormalSpace, ConcretePrecisionType, ViewDirSpace } from '../../../type'; +import PropertyNode from '../property-node'; + +export default class SampleTexture2D extends InputNode { + + generateCode() { + const cubeSlot = this.getSlotWithSlotName('Cube'); + const node = cubeSlot?.connectSlot && cubeSlot?.connectSlot.node as PropertyNode; + if (!node) { + return ''; + } + + let V = 'view'; + let N = 'normal'; + + const viewSlot = this.getSlotWithSlotName('ViewDir'); + if (viewSlot?.connectSlot) { + V = viewSlot?.connectSlot.varName; + } + const normalSlot = this.getSlotWithSlotName('Normal'); + if (normalSlot?.connectSlot) { + N = normalSlot?.connectSlot.varName; + } + + const R = `${this.getOutputVarName(0)}_R`; + + let code = ''; + code += `vec3 ${R} = reflect( -normalize( ${V} ), ${N} );\n`; + code += `${this.getOutputVarDefine(0)} = texture(${node.property?.name}, ${R});\n`; + return code; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-cubemap.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-cubemap.ts.meta new file mode 100644 index 0000000..b57d834 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-cubemap.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "6f28aec4-0ff8-4694-b483-83545dfe739f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-texture2d.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-texture2d.ts new file mode 100644 index 0000000..a8728c8 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-texture2d.ts @@ -0,0 +1,96 @@ +import InputNode from '../input-node'; +import { NormalMapSpace, NormalSpace } from '../../../type'; +import { Vec2, Vec4, Texture2D } from 'cc'; +import { prop, slot } from '../../../utils'; +import { register } from '../../../../graph'; + +enum TextureType { + Default, + Normal, +} + +enum TextureNormalSpace { + Tangent, + Object, +} + +@register({ + menu: 'Input/Texture/SampleTexture2D', + title: 'SampleTexture2D', +}) +export default class SampleTexture2D extends InputNode { + + data = { + props: [ + prop('TextureType', TextureType.Default, 'enum', { enum: TextureType }), + prop('NormalSpace', TextureNormalSpace.Tangent, 'enum', { enum: TextureNormalSpace }), + ], + inputs: [ + slot('Texture', new Texture2D, 'texture2D', 'texture2D'), + slot('UV', Vec2.ZERO, 'vec2', 'vector'), + ], + outputs: [ + slot('RGBA', Vec4.ZERO, 'vec4', 'vector'), + slot('R', 0, 'float', 'vector'), + slot('G', 0, 'float', 'vector'), + slot('B', 0, 'float', 'vector'), + slot('A', 0, 'float', 'vector'), + ], + }; + + generateCode() { + const textureSlot = this.getSlotWithSlotName('Texture'); + const uvSlot = this.getSlotWithSlotName('UV'); + + const rgbaSlot = this.getSlotWithSlotName('RGBA'); + + const rgbaVarName = rgbaSlot?.varName; + let code; + if (!textureSlot?.connectSlot) { + code = `vec4 ${rgbaVarName} = vec4(1.);\n`; + } + else { + let uv; + if (!uvSlot.connectSlot) { + uv = 'v_uv'; + } + else { + uv = uvSlot.slotValue; + } + code = `vec4 ${rgbaVarName} = texture(${textureSlot?.connectSlot.varName}, ${uv});\n`; + } + + const textureType = this.getPropWithName('TextureType'); + const normalSpace = this.getPropWithName('NormalSpace'); + + if (textureType.value === TextureType.Normal && normalSpace.value === TextureNormalSpace.Tangent) { + code += `${rgbaVarName}.xyz -= vec3(0.5);\n`; + code += `${rgbaVarName}.xyz = \n`; + code += ` ${rgbaVarName}.x * normalize(worldTangent) +\n`; + code += ` ${rgbaVarName}.y * normalize(worldBinormal) +\n`; + code += ` ${rgbaVarName}.z * normalize(worldNormal);\n`; + + this.defines.push('CC_SURFACES_USE_TANGENT_SPACE'); + } + + const r = this.getSlotWithSlotName('R'); + if (r && r.connectSlot) { + code += `float ${r.varName} = ${rgbaVarName}.r;\n`; + } + const g = this.getSlotWithSlotName('G'); + if (g && g.connectSlot) { + code += `float ${g.varName} = ${rgbaVarName}.g;\n`; + } + const b = this.getSlotWithSlotName('B'); + if (b && b.connectSlot) { + code += `float ${b.varName} = ${rgbaVarName}.b;\n`; + } + const a = this.getSlotWithSlotName('A'); + if (a && a.connectSlot) { + code += `float ${a.varName} = ${rgbaVarName}.a;\n`; + } + + return code; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-texture2d.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-texture2d.ts.meta new file mode 100644 index 0000000..ee06f96 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/sample-texture2d.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "5895a329-8c92-440f-96d8-18d9b426652a", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture-asset.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture-asset.ts new file mode 100644 index 0000000..5bc0ffa --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture-asset.ts @@ -0,0 +1,7 @@ +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; + +export default class TextureAsset extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Texture; +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture-asset.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture-asset.ts.meta new file mode 100644 index 0000000..f5cedf6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture-asset.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "ae6c5758-47f7-4cde-a30d-ae194163d1ec", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture2d-asset.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture2d-asset.ts new file mode 100644 index 0000000..a68b5b8 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture2d-asset.ts @@ -0,0 +1,7 @@ +import TextureAssetNode from './texture-asset'; + +export default class Texture2DAsset extends TextureAssetNode { + generateCode() { + return `sampler2D ${this.getOutputVarName(0)} = ${this.getInputValue(0)};`; + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture2d-asset.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture2d-asset.ts.meta new file mode 100644 index 0000000..df5b34e --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/texture/texture2d-asset.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "1e7d587f-7693-4a38-a3f2-70f7557e20d9", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/variable.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/variable.meta new file mode 100644 index 0000000..c1fd3cf --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/variable.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "e160a4e8-d9ba-4ea5-b78e-d9d7b2e5d287", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/get-local-var.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/get-local-var.ts new file mode 100644 index 0000000..27e1c09 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/get-local-var.ts @@ -0,0 +1,41 @@ +import { Vec2, Vec4 } from 'cc'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { prop, slot } from '../../../utils'; +import { register } from '../../../../graph'; +import RegisterLocalVar from './register-local-var'; + +@register({ + menu: 'Input/Variable/GetLocalVar', + title: 'GetLocalVar', +}) +export default class GetLocalVar extends ShaderNode { + get name() { + const name = this.getPropWithName('Name'); + return name && name.value; + } + set name(v) { + const name = this.getPropWithName('Name'); + name.value = v; + } + + data = { + props: [ + prop('Name', 'local_var', 'dynamicEnum', { + registerEnum: { + type: 'RegisterLocalVarName', + property: 'Name', + }, + }), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + generateCode() { + const precisionName = this.inputs[0].connectSlot.precisionName; + return `${precisionName} ${this.name}= ${this.getInputValue(0)};`; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/get-local-var.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/get-local-var.ts.meta new file mode 100644 index 0000000..b46b6b8 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/get-local-var.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "30fea624-74ab-4eb3-9768-4a131c803280", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/register-local-var.ts b/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/register-local-var.ts new file mode 100644 index 0000000..d13e240 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/register-local-var.ts @@ -0,0 +1,42 @@ +import { Vec2, Vec4 } from 'cc'; +import { ShaderNode } from '../../../base'; +import { ConcretePrecisionType } from '../../../type'; +import { prop, slot } from '../../../utils'; +import { register } from '../../../../graph'; + +@register({ + menu: 'Input/Variable/RegisterLocalVar', + title: 'RegisterLocalVar', +}) +export default class RegisterLocalVar extends ShaderNode { + isRegisterLocalVar = true; + + get name() { + const name = this.getPropWithName('Name'); + return name.value; + } + set name(v) { + const name = this.getPropWithName('Name'); + name.value = v; + } + + data = { + props: [ + prop('Name', 'local_var', 'string', { + registerEnumType: 'RegisterLocalVarName', + }), + ], + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + generateCode() { + return ''; + + // const name = this.getPropWithName('Name'); + // const precisionName = this.inputs[0].connectSlot.precisionName; + // return `${precisionName} ${name.value}= ${this.getInputValue(0)};`; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/register-local-var.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/register-local-var.ts.meta new file mode 100644 index 0000000..a637f56 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/input/variable/register-local-var.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "b61a90ef-15cc-4448-adbf-7cd16da98d21", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic.meta b/extensions/shader-graph/shader-node/assets/operation/manual/logic.meta new file mode 100644 index 0000000..442f051 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "768c726a-a499-4173-984a-9022d1afa9ff", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/all.ts b/extensions/shader-graph/shader-node/assets/operation/manual/logic/all.ts new file mode 100644 index 0000000..726eb4d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/all.ts @@ -0,0 +1,45 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { prop, slot } from '../../utils'; + +@register({ + menu: 'Logic/All', + title: 'All', +}) +export default class All extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Min; + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', false, 'boolean', 'boolean'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + const i0 = this.getInputValue(0); + const output0 = this.getOutputVarDefine(0); + + const elements = ['x', 'y', 'z', 'w']; + + const conditions: string[] = []; + const precision = this.slots[0].concretePrecision; + for (let i = 0; i < precision; i++) { + conditions.push(`(${i0}.${elements[i]} > 0.)`); + } + + return ` + ${output0} = (${conditions.join(' && ')}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/all.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/logic/all.ts.meta new file mode 100644 index 0000000..f0f4935 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/all.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "08b1e905-4683-4b43-9503-063e98b4138e", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/and.ts b/extensions/shader-graph/shader-node/assets/operation/manual/logic/and.ts new file mode 100644 index 0000000..7a15eee --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/and.ts @@ -0,0 +1,40 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { prop, slot } from '../../utils'; + +@register({ + menu: 'Logic/And', + title: 'And', +}) +export default class And extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Max; + + data = { + inputs: [ + slot('A', false, 'boolean', 'boolean'), + slot('B', false, 'boolean', 'boolean'), + ], + outputs: [ + slot('Out', false, 'boolean', 'boolean'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + const i0 = this.getInputValue(0); + const i1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + + return ` + ${output0} = (${i0} && ${i1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/and.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/logic/and.ts.meta new file mode 100644 index 0000000..f1dfa41 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/and.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "ad796a9a-277e-4ad6-956d-02888b010c27", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/any.ts b/extensions/shader-graph/shader-node/assets/operation/manual/logic/any.ts new file mode 100644 index 0000000..99ad8e6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/any.ts @@ -0,0 +1,45 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { prop, slot } from '../../utils'; + +@register({ + menu: 'Logic/Any', + title: 'Any', +}) +export default class Any extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Min; + + data = { + inputs: [ + slot('In', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', false, 'boolean', 'boolean'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + const i0 = this.getInputValue(0); + const output0 = this.getOutputVarDefine(0); + + const elements = ['x', 'y', 'z', 'w']; + + const conditions: string[] = []; + const precision = this.slots[0].concretePrecision; + for (let i = 0; i < precision; i++) { + conditions.push(`(${i0}.${elements[i]} > 0.)`); + } + + return ` + ${output0} = (${conditions.join(' || ')}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/any.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/logic/any.ts.meta new file mode 100644 index 0000000..26c750d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/any.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "c213e378-aa5d-45a3-9102-928ac63866a6", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/branch.ts b/extensions/shader-graph/shader-node/assets/operation/manual/logic/branch.ts new file mode 100644 index 0000000..d84fd29 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/branch.ts @@ -0,0 +1,42 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { prop, slot } from '../../utils'; + +@register({ + menu: 'Logic/Branch', + title: 'Branch', +}) +export default class Branch extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Max; + + data = { + inputs: [ + slot('Predicate', false, 'boolean', 'boolean'), + slot('True', Vec4.ZERO, 'vec4', 'vector'), + slot('False', Vec4.ZERO, 'vec4', 'vector'), + ], + outputs: [ + slot('Out', Vec4.ZERO, 'vec4', 'vector'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + const i0 = this.getInputValue(0); + const i1 = this.getInputValue(1); + const i2 = this.getInputValue(2); + + const output0 = this.getOutputVarDefine(0); + + return ` + ${output0} = (${i0}) ? (${i1}) : (${i2}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/branch.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/logic/branch.ts.meta new file mode 100644 index 0000000..d6e109d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/branch.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "2f31ffe5-2ba8-467c-89cc-55535d4bc4b2", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/comparison.ts b/extensions/shader-graph/shader-node/assets/operation/manual/logic/comparison.ts new file mode 100644 index 0000000..aa1fa5a --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/comparison.ts @@ -0,0 +1,77 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { prop, slot } from '../../utils'; + +enum ComparisonType { + Equal, + NotEqual, + Less, + LessOrEqual, + Greater, + GreaterOrEqual, +} + +@register({ + menu: 'Logic/Comparison', + title: 'Comparison', +}) +export default class Comparison extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + fixedConcretePrecision = 1; + + data = { + props: [ + prop('Type', ComparisonType.Equal, 'enum', { enum: ComparisonType }), + ], + inputs: [ + slot('A', 0, 'float', 'vector'), + slot('B', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', 0, 'boolean', 'boolean'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + const A = this.getInputValue(0); + const B = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + + let code = ''; + + const type = this.getPropWithName('Type'); + switch (type.value) { + case ComparisonType.Equal: + code = `(${A} == ${B})`; + break; + case ComparisonType.NotEqual: + code = `(${A} != ${B})`; + break; + case ComparisonType.Less: + code = `(${A} < ${B})`; + break; + case ComparisonType.LessOrEqual: + code = `(${A} <= ${B})`; + break; + case ComparisonType.Greater: + code = `(${A} > ${B})`; + break; + case ComparisonType.GreaterOrEqual: + code = `(${A} >= ${B})`; + break; + } + + return ` + ${output0} = ${code}; + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/comparison.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/logic/comparison.ts.meta new file mode 100644 index 0000000..835d613 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/comparison.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "29cf0756-1c72-48a3-8755-25cbfcaba224", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/is-nan.ts b/extensions/shader-graph/shader-node/assets/operation/manual/logic/is-nan.ts new file mode 100644 index 0000000..909fd76 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/is-nan.ts @@ -0,0 +1,39 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { prop, slot } from '../../utils'; + +@register({ + menu: 'Logic/IsNan', + title: 'IsNan', +}) +export default class IsNan extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Fixed; + fixedConcretePrecision = 1; + + data = { + inputs: [ + slot('In', 0, 'float', 'vector'), + ], + outputs: [ + slot('Out', false, 'boolean', 'boolean'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + const i0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + + return ` + ${output0} = isnan(${i0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/is-nan.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/logic/is-nan.ts.meta new file mode 100644 index 0000000..bee8396 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/is-nan.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "c8ed686c-193d-4738-a27d-42bf72f3e68c", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/not.ts b/extensions/shader-graph/shader-node/assets/operation/manual/logic/not.ts new file mode 100644 index 0000000..eba34fa --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/not.ts @@ -0,0 +1,38 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { prop, slot } from '../../utils'; + +@register({ + menu: 'Logic/Not', + title: 'Not', +}) +export default class Not extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Max; + + data = { + inputs: [ + slot('In', false, 'boolean', 'boolean'), + ], + outputs: [ + slot('Out', false, 'boolean', 'boolean'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + const i0 = this.getInputValue(0); + + const output0 = this.getOutputVarDefine(0); + + return ` + ${output0} = (!${i0}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/not.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/logic/not.ts.meta new file mode 100644 index 0000000..d33ee66 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/not.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "aad298d5-0ef6-495f-b787-8150a4cee4b1", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/or.ts b/extensions/shader-graph/shader-node/assets/operation/manual/logic/or.ts new file mode 100644 index 0000000..ebb70cf --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/or.ts @@ -0,0 +1,40 @@ + +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '../../../graph/register'; +import { ShaderNode } from '../../base'; +import { ConcretePrecisionType } from '../../type'; +import { prop, slot } from '../../utils'; + +@register({ + menu: 'Logic/Or', + title: 'Or', +}) +export default class Or extends ShaderNode { + concretePrecisionType = ConcretePrecisionType.Max; + + data = { + inputs: [ + slot('A', false, 'boolean', 'boolean'), + slot('B', false, 'boolean', 'boolean'), + ], + outputs: [ + slot('Out', false, 'boolean', 'boolean'), + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + const i0 = this.getInputValue(0); + const i1 = this.getInputValue(1); + + const output0 = this.getOutputVarDefine(0); + + return ` + ${output0} = (${i0} || ${i1}); + `; + } +} + \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/logic/or.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/logic/or.ts.meta new file mode 100644 index 0000000..b3ba2f6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/logic/or.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "a2b3f474-fe0f-440b-b85a-4fee8da9310b", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/master.meta b/extensions/shader-graph/shader-node/assets/operation/manual/master.meta new file mode 100644 index 0000000..26a910c --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/master.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "40116e55-e3a9-49a9-ba20-1c6aacbe2ee5", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/master/MasterNode.ts b/extensions/shader-graph/shader-node/assets/operation/manual/master/MasterNode.ts new file mode 100644 index 0000000..ccca1b6 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/master/MasterNode.ts @@ -0,0 +1,330 @@ +import { EDITOR } from 'cc/env'; +import { ShaderNode } from '../../base'; +import { + ConcretePrecisionType, + TextureConcretePrecision, + NormalSpace, + NormalMapSpace, + ViewDirSpace, + PositionSpace, + SlotDefine, + INodeDataDefine, +} from '../../type'; +import { ensureEnumDefines, fs, getEnumDefine, getEnumNames, path } from '../../utils'; +import { ShaderSlot } from '../../slot'; +import { ShaderProperty, ShaderPropertyType } from '../../property'; +import { shaderContext } from '../../context'; +import { Asset, Material, Texture2D, assetManager } from 'cc'; + +export enum MasterSlotType { + Vertex, + Fragment, +} + +export declare class MasterSlotDefine extends SlotDefine { + slotType: MasterSlotType; + codeChunk: number; +} + +function findConnectNodes(slot: ShaderSlot, nodes: ShaderNode[]) { + if (!slot.connectSlot) return; + + const connectNode = slot.connectNode; + if (connectNode) { + if (nodes.includes(connectNode)) { + return; + } + + connectNode.inputs.forEach(slot => { + findConnectNodes(slot, nodes); + }); + + nodes.push(connectNode); + } +} + +export default class MasterNode extends ShaderNode { + + // vsSlotIndices: string[] = []; + // fsSlotIndices: string[] = []; + + get templatePath() { + return ''; + } + + isMasterNode = true; + concretePrecisionType = ConcretePrecisionType.Fixed; + + properties: ShaderProperty[] = []; + + data: INodeDataDefine = { + inputs: [], + }; + + getConnectNodes(slots: ShaderSlot[]) { + const nodes: ShaderNode[] = []; + slots.forEach(slot => { + findConnectNodes(slot, nodes); + }); + + nodes.sort((a, b) => b.priority - a.priority); + return nodes; + } + + generatePropertiesCode() { + let uniform = '\n'; + let mtl = '\n'; + let uniformSampler = ''; + + const properties = shaderContext.properties; + properties.sort((a, b) => { + return b.concretePrecision - a.concretePrecision; + }); + + let blockUniformCount = 0; + + properties.forEach(p => { + let precision = ''; + let mtlValue = ''; + + const value = p.value; + const isColor = p.type === ShaderPropertyType.Color; + const x = value.x; + const y = value.y; + const z = value.z; + const w = value.w; + + if (p.type === ShaderPropertyType.Texture2D) { + precision = 'sampler2D'; + mtlValue = 'white'; + } + else if (p.type === ShaderPropertyType.TextureCube) { + precision = 'samplerCube'; + mtlValue = 'white'; + } + else { + const concretePrecision = p.concretePrecision; + if (concretePrecision === 1) { + precision = 'float'; + mtlValue = `${value}`; + } + else if (concretePrecision === 2) { + precision = 'vec2'; + mtlValue = `[${x}, ${y}]`; + } + else if (concretePrecision === 3) { + precision = 'vec4'; + mtlValue = `[${x}, ${y}, ${z}, 0]`; + } + else if (concretePrecision === 4) { + precision = 'vec4'; + mtlValue = `[${x}, ${y}, ${z}, ${w}]`; + } + } + + const editorStr = isColor ? `, editor: { type: color }` : ''; + + if (!p.isTexture()) { + uniform += ` ${precision} ${p.name};\n`; + blockUniformCount++; + } + else { + uniformSampler += ` uniform ${precision} ${p.name};\n`; + } + mtl += ` ${p.name}: { value: ${mtlValue} ${editorStr}}\n`; + }); + + if (blockUniformCount === 0) { + uniform += ' vec4 empty_value;\n'; + } + + return { + uniform, + uniformSampler, + mtl, + }; + } + + replaceChunks(code: string) { + const depChunks: string[] = ['common']; + const allNodes = shaderContext.allNodes; + allNodes.forEach(node => { + for (let k = 0; k < node.depChunks.length; k++) { + if (!depChunks.includes(node.depChunks[k])) { + depChunks.push(node.depChunks[k]); + } + } + }); + + let chunkIncludes = '\n'; + let chunks = '\n'; + depChunks.forEach(chunkName => { + const chunkPath = path.join(shaderContext.shaderTemplatesDir, `chunks/${chunkName}.chunk`); + const chunk = fs.readFileSync(chunkPath, 'utf-8'); + if (!chunk) { + console.error(`Can not find chunk with path [${chunkPath}]`); + return; + } + chunks += chunk + '\n'; + chunkIncludes += ` #include \n`; + }); + + code = code.replace('{{chunks}}', chunks); + code = code.replace('{{vs_chunks}}', chunkIncludes); + code = code.replace('{{fs_chunks}}', chunkIncludes); + + return code; + } + + generateDefines(code: string) { + const defines: string[] = []; + const allNodes = shaderContext.allNodes; + allNodes.forEach(node => { + node.defines.forEach(def => { + if (!defines.includes(def)) { + defines.push(def); + } + }); + }); + + let define = ''; + defines.forEach(df => { + define += `${df}\n`; + }); + + define = ensureEnumDefines(NormalSpace, define); + define = ensureEnumDefines(PositionSpace, define); + define = ensureEnumDefines(ViewDirSpace, define); + + // add spaces + let lines = define.split('\n'); + lines = lines.map(l => ' ' + l); + define = lines.join('\n'); + + return code.replace(/{{defines}}/g, define); + } + + generateSlotsCode(slots: ShaderSlot[]) { + const code: string[] = ['\n']; + + const nodes = this.getConnectNodes(slots); + nodes.forEach(node => { + node.calcConcretePrecision(); + node.generateCode().split('\n').forEach(c => { + if (c) { + c += ` // ${node.constructor.name}`; + code.push(' ' + c); + } + }); + }); + + return code.join('\n'); + } + + generateCodeChunk(code) { + const codeChunkSlots: any[] = []; + this.inputs.forEach(input => { + const data = input.data as MasterSlotDefine; + if (!codeChunkSlots[data.codeChunk]) { + codeChunkSlots[data.codeChunk] = []; + } + + codeChunkSlots[data.codeChunk].push(input); + }); + + codeChunkSlots.forEach((slots, chunkIdx) => { + const codeChunk = this.generateSlotsCode(slots); + code = code.replace(`{{code_chunk_${chunkIdx}}}`, codeChunk); + + // console.log(`{{code_chunk_${chunkIdx}}} : \n ` + codeChunk); + }); + + return code; + } + + generateCode() { + let code = fs.readFileSync(this.templatePath, 'utf-8'); + + code = this.generateCodeChunk(code); + code = this.generateDefines(code); + code = this.replaceChunks(code); + + if (!shaderContext.properties || shaderContext.properties.length === 0) { + code = code.replace(/properties: &props/g, ''); + code = code.replace(/properties: \*props/g, ''); + } + + const props = this.generatePropertiesCode(); + code = code.replace('{{properties}}', props.uniform); + code = code.replace('{{properties_sampler}}', props.uniformSampler); + code = code.replace('{{properties_mtl}}', props.mtl); + + // 如果 slot 没有连接,使用 template 中定义的默认值 + const slotsToUseTemplateDefault = ['Vertex Position', 'Vertex Normal', 'Vertex Tangent', 'Position']; + + this.inputs.forEach(slot => { + const tempName = `slot_${slot.displayName.replace(/ /g, '_')}`; + let value; + if (slotsToUseTemplateDefault.includes(slot.displayName) || slot.displayName === 'Normal') { + if (slot.connectSlot) { + value = slot.slotValue; + } + } + else { + value = slot.slotValue; + } + + const reg = new RegExp(`{{${tempName} *= *(.*)}}`, 'g'); + if (value === undefined) { + const res = reg.exec(code); + if (res) { + value = res[1]; + } + } + code = code.replace(reg, value); + }); + + // vertexSlotNames.forEach(name => { + // const tempName = `slot_${name.replace(/ /g, '_')}`; + // let value = ''; + // const reg = new RegExp(`{{${tempName} *= *(.*)}}`, 'g'); + // const res = reg.exec(code); + // if (res) { + // value = res[1]; + // } + // code = code.replace(reg, value); + // }); + + return code; + } + + async createMaterial(buildEffect: (name: string, code: string) => Promise) { + const code = this.generateCode(); + + const material = new Material(); + const name = 'shader-graph-preview.effect'; + const effect = await buildEffect(name, code); + const result = new cc.EffectAsset(); + Object.assign(result, effect); + result.onLoaded(); + material.initialize({ effectAsset: effect }); + + await Promise.all(shaderContext.properties.map(async p => { + if (p.type === ShaderPropertyType.Texture2D || p.type === ShaderPropertyType.TextureCube) { + const uuid = (p.value as Texture2D).uuid; + return new Promise(resolve => { + assetManager.loadAny(uuid, (err: any, asset: Texture2D) => { + if (err) { + console.error(err); + return resolve(null); + } + material.setProperty(p.name, asset); + resolve(null); + }); + }); + } + })); + + return material; + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/master/MasterNode.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/master/MasterNode.ts.meta new file mode 100644 index 0000000..06b7fab --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/master/MasterNode.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "1eab7a6d-080d-4a88-af82-ead98c54e37f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/master/SurfaceMasterNode.ts b/extensions/shader-graph/shader-node/assets/operation/manual/master/SurfaceMasterNode.ts new file mode 100644 index 0000000..a937716 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/master/SurfaceMasterNode.ts @@ -0,0 +1,54 @@ +import MasterNode, { MasterSlotDefine, MasterSlotType } from './MasterNode'; +import { slot } from '../../utils'; +import { NormalSpace, PositionSpace } from '../../type'; + +import { Vec3, Color, Vec4 } from 'cc'; +import { path } from '../../utils'; +import { register } from '../../../graph'; +import { shaderContext } from '../../context'; + +@register({ + title: 'Surface', + master: true, +}) +export default class SurfaceMasterNode extends MasterNode { + get templatePath() { + return path.join(shaderContext.shaderTemplatesDir, 'master/SurfaceMasterNode.effect'); + } + + data = { + inputs: [ + slot('Vertex Position', Vec3.ZERO, 'vec3', 'vector', { slotType: MasterSlotType.Vertex, codeChunk: 0 }), + slot('Vertex Normal', Vec3.ZERO, 'vec3', 'vector', { slotType: MasterSlotType.Vertex, codeChunk: 0 }), + slot('Vertex Tangent', Vec3.ZERO, 'vec3', 'vector', { slotType: MasterSlotType.Vertex, codeChunk: 0 }), + + slot('Albedo', new Vec4(0.5, 0.5, 0.5, 0.5), 'color', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('Normal', Vec3.ZERO, 'vec3', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('Emission', Vec3.ZERO, 'vec3', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('Metallic', 0.6, 'float', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('Roughness', 0.5, 'float', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('Occlusion', 1, 'float', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('SpecularIntensity', 0.5, 'float', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('Alpha', 1, 'float', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('AlphaClipThreshold', 0.5, 'float', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + + slot('AnisotropyRotation', 0, 'float', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('AnisotropyShape', 1, 'float', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + ], + }; + + generateCode() { + const AnisotropyRotationConnected = this.getSlotWithSlotName('AnisotropyRotation')?.connectSlot; + const AnisotropyShapeConnected = this.getSlotWithSlotName('AnisotropyShape')?.connectSlot; + + // if (AnisotropyRotationConnected || AnisotropyShapeConnected) { + // this.defines = [ + // '#define CC_SURFACES_LIGHTING_ANISOTROPIC IS_ANISOTROPY', + // '#define CC_SURFACES_LIGHTING_ANISOTROPIC_ENVCONVOLUTION_COUNT 15', + // ]; + // } + + return super.generateCode(); + } + +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/master/SurfaceMasterNode.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/master/SurfaceMasterNode.ts.meta new file mode 100644 index 0000000..0eb38bb --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/master/SurfaceMasterNode.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "3dc0b965-6e4c-40b0-acef-520bf372b81b", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/master/UnlitMasterNode.ts b/extensions/shader-graph/shader-node/assets/operation/manual/master/UnlitMasterNode.ts new file mode 100644 index 0000000..07f4082 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/master/UnlitMasterNode.ts @@ -0,0 +1,43 @@ +import MasterNode, { MasterSlotType } from './MasterNode'; +import { slot, path } from '../../utils'; +import { register } from '../../../graph'; +import { Color, Vec3, Vec4 } from 'cc'; +import { shaderContext } from '../../context'; +import { ShaderNode } from '../../base'; + +@register({ + title: 'Unlit', + master: true, +}) +export default class UnlitMasterNode extends MasterNode { + + get templatePath() { + return path.join(shaderContext.shaderTemplatesDir, 'master/UnlitMasterNode.effect'); + } + + data = { + inputs: [ + slot('Vertex Position', Vec3.ZERO, 'vec3', 'vector', { slotType: MasterSlotType.Vertex, codeChunk: 0 }), + slot('Vertex Normal', Vec3.ZERO, 'vec3', 'vector', { slotType: MasterSlotType.Vertex, codeChunk: 0 }), + slot('Vertex Tangent', Vec3.ZERO, 'vec3', 'vector', { slotType: MasterSlotType.Vertex, codeChunk: 0 }), + + slot('BaseColor', new Vec4(0.5, 0.5, 0.5, 0.5), 'color', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('Alpha', 1, 'float', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + slot('AlphaClipThreshold', 0, 'float', 'vector', { slotType: MasterSlotType.Fragment, codeChunk: 3 }), + + ], + }; + + static generatePreviewCode(node: ShaderNode) { + const tempNode = new UnlitMasterNode(); + tempNode.init(); + + const baseColor = tempNode.getSlotWithSlotName('BaseColor'); + if (baseColor) { + baseColor.connectSlots[0] = node.outputs[0]; + } + + return tempNode.generateCode(); + } + +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/master/UnlitMasterNode.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/master/UnlitMasterNode.ts.meta new file mode 100644 index 0000000..eb5a1f7 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/master/UnlitMasterNode.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "f3fa2908-eae9-4124-ac94-7db7d3093d8f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/math.meta b/extensions/shader-graph/shader-node/assets/operation/manual/math.meta new file mode 100644 index 0000000..fb17386 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/math.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "73d60c62-7f72-4970-8842-362d88f8761c", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/procedural.meta b/extensions/shader-graph/shader-node/assets/operation/manual/procedural.meta new file mode 100644 index 0000000..4f5e992 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/procedural.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "961356a6-060b-44e5-af55-e4cf258e2afa", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/subgraph.meta b/extensions/shader-graph/shader-node/assets/operation/manual/subgraph.meta new file mode 100644 index 0000000..7e99927 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/subgraph.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "6b6b28a7-6d20-4478-9457-e4f20421c504", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphNode.ts b/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphNode.ts new file mode 100644 index 0000000..5257a00 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphNode.ts @@ -0,0 +1,142 @@ +// import { ShaderNode, ShaderSlot, ShaderPropery, ShaderEdgeSlot } from '../../base'; +// import globby from 'globby'; +// import path from 'path'; +// import ShaderGraph from '../../shadergraph'; +// import SubGraphOutputNode from './SubGraphOutputNode'; +// import PropertyNode from '../input/PropertyNode'; +// import { ConcretePrecisionType } from '../../type'; + +import { ShaderNode } from '../../base'; +import { register } from '../../../graph'; +import { slot } from '../../utils'; + +@register({ + style: { + headerColor: '#757575', + }, +}) +export default class SubGraphNode extends ShaderNode { + data = { + inputs: [ + slot('In', 0, 'any', 'any'), + ], + outputs: [ + slot('Out', 0, 'any', 'any'), + ], + }; + + // nodes: ShaderNode[] = [] + // nodeMap: Map = new Map + // properties: ShaderPropery[] = [] + // + // subgraphOutNode: SubGraphOutputNode | null = null; + // + // concretePrecisionType = ConcretePrecisionType.Fixed; + // + // constructor (data) { + // super(data) + // + // let name = this.data.m_Name; + // let subgraphPath = path.join(ShaderGraph.subgraphPath, `**/${name}.*`).replace(/\\/g, '/'); + // let paths = globby.sync(subgraphPath) + // paths = paths.filter(p => path.extname(p).toLowerCase() === '.shadersubgraph') + // if (!paths[0]) { + // console.error(`Can not find sub graph with name [${name}]`) + // return; + // } + // + // let res = ShaderGraph.searchNodes(paths[0]); + // if (!res) { + // return; + // } + // + // let { properties, nodeMap, nodes, edges } = res; + // + // this.nodes = nodes; + // this.nodeMap = nodeMap; + // this.properties = properties; + // + // let subgraphOutNode = nodes.find(n => n instanceof SubGraphOutputNode) + // if (!subgraphOutNode) { + // console.error(`Can not find SubGraphOutputNode for [${name}]`) + // return; + // } + // + // this.subgraphOutNode = subgraphOutNode; + // + // } + // + // excahngeSubGraphOutNode (outputEdgeSlot: ShaderEdgeSlot) { + // let outputNode = this as ShaderNode; + // + // let outputSlot = this.slotsMap.get(outputEdgeSlot.id); + // let subgraphSlot = this.subgraphOutNode?.getSlotWithSlotName(outputSlot?.displayName); + // + // if (subgraphSlot && subgraphSlot.connectSlot) { + // //@ts-ignore + // outputNode = subgraphSlot.connectSlot.node; + // outputEdgeSlot.id = subgraphSlot.connectSlot.id; + // //@ts-ignore + // outputEdgeSlot.nodeUuid = subgraphSlot.connectSlot.node?.uuid; + // if (outputNode && subgraphSlot) { + // subgraphSlot.connectSlots.length = 0; + // } + // } + // + // return outputNode; + // } + // + // exchangeSubGraphInputNodes () { + // let inputSlots = this.inputSlots; + // + // let propertyNodes = this.nodes.filter(n => n instanceof PropertyNode); + // propertyNodes.forEach(node => { + // let propertySlot = node.outputSlots[0]; + // let propertyName = propertySlot.displayName; + // + // let inputSlot = inputSlots.find(slot => slot.displayName === propertyName); + // + // if (inputSlot) { + // let outputSlot = inputSlot.connectSlot; + // if (outputSlot) { + // propertySlot.connectSlots.forEach(inputSlotInSubGraph => { + // inputSlotInSubGraph.connectSlot = outputSlot; + // outputSlot.connectSlots = outputSlot.connectSlots.filter(slot => slot === inputSlot); + // + // if (outputSlot.node) { + // inputSlotInSubGraph.node?.addDependency(outputSlot.node); + // //@ts-ignore + // outputSlot.node.setPriority(inputSlotInSubGraph.node.priority + 1); + // } + // }) + // + // //@ts-ignore + // inputSlot.connectSlot = null; + // } + // else { + // propertySlot.connectSlots.forEach(inputSlotInSubGraph => { + // inputSlotInSubGraph.connectSlot = inputSlot!; + // // inputSlot.connectSlots.push(inputSlotInSubGraph); + // + // if (inputSlot!.node) { + // inputSlotInSubGraph.node?.addDependency(this); + // //@ts-ignore + // this.setPriority(inputSlotInSubGraph.node.priority + 1); + // } + // }); + // } + // } + // + // }) + // } + // + // generateCode () { + // let code = ''; + // let inputSlots = this.inputSlots; + // for (let i = 0; i < inputSlots.length; i++) { + // // if (!inputSlots[i].connectSlot) continue; + // code += `${inputSlots[i].varDefine} = ${inputSlots[i].defaultValueStr};\n`; + // } + // return code; + // } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphNode.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphNode.ts.meta new file mode 100644 index 0000000..a9d7a90 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphNode.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "159aba9f-8dc9-4262-9d20-aa3cca232ebd", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphOutputNode.ts b/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphOutputNode.ts new file mode 100644 index 0000000..274eafa --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphOutputNode.ts @@ -0,0 +1,19 @@ +import { ShaderNode } from '../../base'; +import { register } from '../../../graph'; +import { slot } from '../../utils'; + +@register({ + title: 'Output', + master: true, + style: { + headerColor: '#81ff2f', + }, +}) +export default class SubGraphOutputNode extends ShaderNode { + data = { + inputs: [ + slot('Out', 0, 'any', 'any'), + ], + }; +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphOutputNode.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphOutputNode.ts.meta new file mode 100644 index 0000000..8de108f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/subgraph/SubGraphOutputNode.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "a7a1d5a5-f763-4523-b37a-0795941c170e", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/utility.meta b/extensions/shader-graph/shader-node/assets/operation/manual/utility.meta new file mode 100644 index 0000000..0a4f3ea --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/utility.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "c46cd314-c43d-4d44-8ead-9d0966430e67", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/utility/PreviewNode.ts b/extensions/shader-graph/shader-node/assets/operation/manual/utility/PreviewNode.ts new file mode 100644 index 0000000..145afb9 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/utility/PreviewNode.ts @@ -0,0 +1,7 @@ +import { ShaderNode } from '../../base'; + +export default class PreviewNode extends ShaderNode { + generateCode() { + return `${this.getOutputVarDefine(0)} = ${this.getInputValue(0)};`; + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/utility/PreviewNode.ts.meta b/extensions/shader-graph/shader-node/assets/operation/manual/utility/PreviewNode.ts.meta new file mode 100644 index 0000000..5f7419f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/utility/PreviewNode.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "f8b0f765-8953-417a-b78b-44d84b8af4df", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/manual/uv.meta b/extensions/shader-graph/shader-node/assets/operation/manual/uv.meta new file mode 100644 index 0000000..4dce63c --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/manual/uv.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "51eddf44-3965-4a7f-b48f-a4e84314fba9", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes.meta b/extensions/shader-graph/shader-node/assets/operation/nodes.meta new file mode 100644 index 0000000..730a24f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "b505bf78-444e-44a8-9656-4cb08b45cd9a", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/math.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/math.meta new file mode 100644 index 0000000..45e08a2 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/math.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "7ba923ae-1846-449d-95ec-49315f08fbd3", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/math/advanced.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/math/advanced.meta new file mode 100644 index 0000000..d1d5f97 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/math/advanced.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "63d22451-008b-4e03-a950-b5f829113d1c", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/math/basic.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/math/basic.meta new file mode 100644 index 0000000..9732198 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/math/basic.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "6a4f6ef4-513e-4bdf-921f-d22f93141f39", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/math/derivative.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/math/derivative.meta new file mode 100644 index 0000000..4b490be --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/math/derivative.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "c1dcd5aa-a99e-451d-b42c-f1dec0cd0709", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/math/interpolation.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/math/interpolation.meta new file mode 100644 index 0000000..061cc7d --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/math/interpolation.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "41960e02-4bf1-40ae-994b-e052e9e82ae6", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/math/range.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/math/range.meta new file mode 100644 index 0000000..3911dd3 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/math/range.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "1dd0ff67-5e75-45f4-9f1e-1836de1a90f4", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/math/round.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/math/round.meta new file mode 100644 index 0000000..12ae32f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/math/round.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "4b214877-6c6c-4281-a8f7-91020409b611", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/math/trigonometry.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/math/trigonometry.meta new file mode 100644 index 0000000..7b9dd22 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/math/trigonometry.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "1a3df9f5-ac78-4d6c-bddc-55023b426b25", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/math/vector.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/math/vector.meta new file mode 100644 index 0000000..9341a9e --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/math/vector.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "588e2fb0-509a-44f8-b87a-fd11cee766b5", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/math/wave.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/math/wave.meta new file mode 100644 index 0000000..0f38bde --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/math/wave.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "2ab50b7f-a1c9-4f35-9bda-323f9da4b0c4", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/procedural.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/procedural.meta new file mode 100644 index 0000000..e172f70 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/procedural.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "98e0b37b-f186-4092-af09-82ae447ad426", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/procedural/noise.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/procedural/noise.meta new file mode 100644 index 0000000..71bd117 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/procedural/noise.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "4b803390-09a7-48b1-9333-46e084e134c0", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/procedural/shape.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/procedural/shape.meta new file mode 100644 index 0000000..9491037 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/procedural/shape.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "c488881f-9e1f-452b-b4b4-d5ff354a5c2f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/subgraph.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/subgraph.meta new file mode 100644 index 0000000..0f8eab7 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/subgraph.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "4513f5f7-65b4-450a-847b-3f91fc2b1718", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/utility.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/utility.meta new file mode 100644 index 0000000..821cbe5 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/utility.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "de7c8b6a-0f2b-4737-9739-7d0219ceebcf", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/nodes/uv.meta b/extensions/shader-graph/shader-node/assets/operation/nodes/uv.meta new file mode 100644 index 0000000..9a3c25c --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/nodes/uv.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "aa89aef2-19c7-47e7-b417-998a0ce7f744", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/property.ts b/extensions/shader-graph/shader-node/assets/operation/property.ts new file mode 100644 index 0000000..7954204 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/property.ts @@ -0,0 +1,129 @@ +import { Color, Vec2, Vec3, Vec4, Texture2D, TextureCube, ValueType } from 'cc'; +import { ShaderNode } from './base'; +import { getJsonObject, getValueConcretePrecision, prop, slot } from './utils'; +import { ShaderSlot } from './slot'; +import { PropertyValueType, SlotDefine } from './type'; + +export enum ShaderPropertyType { + Float = 'Float', + Boolean = 'Boolean', + Vector2 = 'Vector2', + Vector3 = 'Vector3', + Vector4 = 'Vector4', + Color = 'Color', + Texture2D = 'Texture2D', + // Texture2DArray = 'Texture2DArray', + // Texture3D = 'Texture3D', + TextureCube = 'TextureCube', + // Gradient = 'Gradient', + // Matrix2 = 'Matrix2', + // Matrix3 = 'Matrix3', + // Matrix4 = 'Matrix4', +} + +export class ShaderProperty { + details = { + menu: '', + // -> IBlockStyle, + style: { + headerColor: '#ec7063', + }, + // feature: { } // -> IBlockFeature, + }; + name = ''; + type: ShaderPropertyType = ShaderPropertyType.Float; + value: PropertyValueType = 0; + + outputs: SlotDefine[] = []; + + public constructor(type: ShaderPropertyType | string) { + if (typeof type === 'string') { + this.type = ShaderPropertyType[type as ShaderPropertyType]; + } + else { + this.type = type; + } + this.name = ShaderPropertyType[type as ShaderPropertyType]; + this.details.menu = this.name; + this.updateDefaultValue(); + } + + setValue(value) { + if (this.value instanceof ValueType) { + this.value.set(value); + } + else if (this.type === ShaderPropertyType.Texture2D || this.type === ShaderPropertyType.TextureCube) { + (this.value as Texture2D)._uuid = value.uuid; + } + else { + this.value = value; + } + } + + updateDefaultValue() { + switch (this.type) { + case ShaderPropertyType.Float: + this.value = 0; + this.outputs = [ + slot('Out', this.value, 'float', 'vector'), + ]; + break; + case ShaderPropertyType.Boolean: + this.value = false; + this.outputs = [ + slot('Out', this.value, 'boolean', 'boolean'), + ]; + break; + case ShaderPropertyType.Vector2: + this.value = new Vec2; + this.outputs = [ + slot('Out', this.value, 'vec2', 'vector'), + ]; + break; + case ShaderPropertyType.Vector3: + this.value = new Vec3; + this.outputs = [ + slot('Out', this.value, 'vec3', 'vector'), + ]; + break; + case ShaderPropertyType.Vector4: + this.value = new Vec4; + this.outputs = [ + slot('Out', this.value, 'vec4', 'vector'), + ]; + break; + case ShaderPropertyType.Color: + this.value = new Color; + this.outputs = [ + slot('Out', this.value, 'color', 'vector'), + ]; + break; + case ShaderPropertyType.Texture2D: + this.value = new Texture2D; + this.outputs = [ + slot('Out', this.value, 'texture2D', 'texture2D'), + ]; + break; + case ShaderPropertyType.TextureCube: + this.value = new TextureCube; + this.outputs = [ + slot('Out', this.value, 'textureCube', 'textureCube'), + ]; + break; + } + } + + isTexture() { + switch (this.type) { + case ShaderPropertyType.Texture2D: + case ShaderPropertyType.TextureCube: + return true; + } + + return false; + } + + get concretePrecision() { + return getValueConcretePrecision(this.value); + } +} diff --git a/extensions/shader-graph/shader-node/assets/operation/property.ts.meta b/extensions/shader-graph/shader-node/assets/operation/property.ts.meta new file mode 100644 index 0000000..ee555f2 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/property.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "b05a879a-ef88-434d-bef0-02b4f9d4ac67", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/shadergraph.ts b/extensions/shader-graph/shader-node/assets/operation/shadergraph.ts new file mode 100644 index 0000000..6a6dd33 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/shadergraph.ts @@ -0,0 +1,132 @@ +// import { ShaderPropery, ShaderNode, ShaderEdge, resetGlobalShaderSlotID } from "./base"; +// import { getJsonObject } from "./utils"; +// import { createNode } from "./nodes"; +// import MasterNode from "./nodes/master/MasterNode"; +// import SubGraphNode from "./nodes/subgraph/SubGraphNode"; + +// import fs from 'fs' +// import PropertyNode from "./nodes/input/PropertyNode"; + +// export default class ShaderGraph { +// static subgraphPath = '' + +// static allNodes: ShaderNode[][] = []; + +// static searchNodes (graphPath: string) { +// let contentStr = fs.readFileSync(graphPath, 'utf-8'); +// let content = getJsonObject(contentStr); +// if (!content) return; + +// let properties: ShaderPropery[] = content.m_SerializedProperties.map(d => new ShaderPropery(d)); +// let nodeMap: Map = new Map; + +// let propertyNodeMap: Map = new Map; + +// let nodes: ShaderNode[] = content.m_SerializableNodes.map(d => { +// let node = createNode(d); + +// if (node instanceof PropertyNode) { +// node.searchProperties(properties); + +// let propertyNode = propertyNodeMap.get(node.property!); +// if (propertyNode) { +// nodeMap.set(node.uuid, propertyNode); +// return propertyNode; +// } + +// propertyNodeMap.set(node.property!, node); + +// } + +// nodeMap.set(node.uuid, node); +// return node; +// }); + +// let edges: ShaderEdge[] = content.m_SerializableEdges.map(d => { +// return new ShaderEdge(d) +// }) + +// for (let i = 0; i < edges.length; i++) { +// let edge = edges[i]; +// let inputSlot = edge.input; +// let outputSlot = edge.output; + +// let inputNode = nodeMap.get(inputSlot.nodeUuid); +// let outputNode = nodeMap.get(outputSlot.nodeUuid); + +// if (outputNode instanceof SubGraphNode) { +// outputNode = outputNode.excahngeSubGraphOutNode(outputSlot); +// } + +// if (!inputNode) { +// console.warn(`Can not find input [${inputSlot.nodeUuid}] for edge.`) +// continue; +// } +// if (!outputNode) { +// console.warn(`Can not find input [${outputSlot.nodeUuid}] for edge.`) +// continue; +// } + +// inputNode.addDependency(outputNode); +// outputNode.setPriority(inputNode.priority + 1); + +// let inputNodeSlot = inputNode.slotsMap.get(inputSlot.id); +// let outputNodeSlot = outputNode.slotsMap.get(outputSlot.id); + +// if (inputNodeSlot && outputNodeSlot) { +// inputNodeSlot.connectSlots.push(outputNodeSlot); +// outputNodeSlot.connectSlots.push(inputNodeSlot); +// } +// } + +// nodes.sort((a, b) => b.priority - a.priority); + +// nodes.forEach(node => { +// if (node instanceof SubGraphNode) { +// node.exchangeSubGraphInputNodes(); +// } + +// node.calcConcretePrecision(); +// }) + +// this.allNodes.push(nodes); + +// return { +// properties, +// nodeMap, +// nodes, +// edges +// } +// } + +// static decode (path: string) { + +// resetGlobalShaderSlotID(); + +// this.allNodes.length = 0; + +// let res = this.searchNodes(path); +// if (!res) { +// return; +// } + +// let { properties, nodeMap, nodes, edges } = res; + +// let masterNode = nodes.find(n => n instanceof MasterNode); +// if (!masterNode) { +// console.error('Can not find master node.'); +// return; +// } + +// (masterNode as MasterNode).properties = properties; + +// this.allNodes.forEach(nodes => { +// nodes.forEach(node => { +// node.beforeGenreateCode() +// }); +// }) + +// let code = masterNode.generateCode(); +// return code; +// } +// } diff --git a/extensions/shader-graph/shader-node/assets/operation/shadergraph.ts.meta b/extensions/shader-graph/shader-node/assets/operation/shadergraph.ts.meta new file mode 100644 index 0000000..2195031 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/shadergraph.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "c03d0c99-6c8e-423c-9c88-be99e26b974e", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/slot.ts b/extensions/shader-graph/shader-node/assets/operation/slot.ts new file mode 100644 index 0000000..7cdd203 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/slot.ts @@ -0,0 +1,247 @@ +import { ValueType } from 'cc'; +import { ShaderNode } from './base'; +import { SlotDefine } from './type'; +import { getFloatString, getPrecisionName, getValueConcretePrecision, getValueElementStr } from './utils'; +import PropertyNode from './nodes/input/PropertyNode'; +import { shaderContext } from './context'; + +let _GlobalShaderSlotID_ = 0; +export function resetGlobalShaderSlotID() { + _GlobalShaderSlotID_ = 0; +} + +export enum ShaderSlotType { + Input, + Output, +} + +export class ShaderSlot { + // typeInfo = {}; + data: SlotDefine; + + globalID = 0; + + // serialized + id = 0; + displayName = ''; + type = ShaderSlotType.Input; + defaultValue: any; + value: any; + + get connectSlot() { + const slot = this.connectSlots[0]; + if (slot && shaderContext.getLocalVars.includes(slot.node)) { + const v = shaderContext.localVars.find(v => { + return v.name === (slot.node as any).name; + }); + return v.inputs[0].connectSlot; + } + return this.connectSlots[0]; + } + set connectSlot(v) { + this.connectSlots.length = 0; + if (v) { + this.connectSlots[0] = v; + } + } + connectSlots: ShaderSlot[] = []; + + node: ShaderNode | undefined = undefined; + get connectNode() { + return this.connectSlot && this.connectSlot.node; + } + // otherNode: ShaderNode | undefined = undefined; + + constructor(data: SlotDefine, node: ShaderNode) { + this.displayName = data.display; + this.defaultValue = data.default; + + if (data.default instanceof ValueType) { + this.value = data.default.clone(); + } + else { + this.value = data.default; + } + + this.data = data; + this.node = node; + + // console.log(`Slot ID ${this.displayName} : ${_GlobalShaderSlotID_}`) + + this.globalID = _GlobalShaderSlotID_++; + } + + // deserialize (obj: any, node: ShaderNode) { + // this.typeInfo = obj.typeInfo; + // this.data = getJsonObject(obj.JSONnodeData); + + // this.type = this.data.m_SlotType as ShaderSlotType; + + // this.node = node; + + // this.id = this.data.m_Id; + // this.globalID = _GlobalShaderSlotID_++; + // this.displayName = this.data.m_DisplayName; + // this.defaultValue = this.data.m_DefaultValue; + // this.value = this.data.m_Value; + // } + + get varName(): string { + if (this.node?.isPropertyNode) { + return (this.node as PropertyNode).name; + } + return 'var_' + this.globalID; + } + + get varDefine(): string { + let name = getPrecisionName(this.concretePrecision, this.data.type); + if (name) { + name += ' '; + } + return name + this.varName; + } + + get precisionName(): string { + return getPrecisionName(this.concretePrecision, this.data.type); + } + + // get defaultValueStr () { + // let defaultValue = this.defaultValue; + + // let x = getFloatString(defaultValue.x); + // let y = getFloatString(defaultValue.y); + // let z = getFloatString(defaultValue.z); + // let w = getFloatString(defaultValue.w); + + // let result = getFloatString(defaultValue); + // if (typeof defaultValue === 'object') { + // if (defaultValue.w !== undefined) { + // result = `vec4(${x}, ${y}, ${z}, ${w})`; + // } + // else if (defaultValue.z !== undefined) { + // result = `vec3(${x}, ${y}, ${z})`; + // } + // else if (defaultValue.y !== undefined) { + // result = `vec2(${x}, ${y})`; + // } + // } + + // return result; + // } + + get isVector() { + return this.data.connectType === 'vector'; + } + + get slotValue() { + let valueConretePresition = this.defaultConcretePrecision; + const selfConcretePresition = this.concretePrecision; + + let valueStr = ''; + if (!this.connectSlot) { + const value = this.value; + if (!this.isVector) { + valueStr = value; + } + else { + let x = getValueElementStr(value, 0); + const y = getValueElementStr(value, 1); + const z = getValueElementStr(value, 2); + const w = getValueElementStr(value, 3); + + if (typeof value !== 'object') { + x = getFloatString(value); + } + + valueConretePresition = getValueConcretePrecision(value); + + const values = [x, y, z, w]; + const concreteValues: any[] = []; + for (let i = 0; i < selfConcretePresition; i++) { + concreteValues.push(values[i] === undefined ? 0 : values[i]); + } + valueStr = concreteValues.join(', '); + } + } + else { + valueConretePresition = this.connectSlot.concretePrecision; + + valueStr = this.connectSlot.varName; + if (this.isVector && selfConcretePresition !== valueConretePresition) { + if (selfConcretePresition < valueConretePresition) { + if (selfConcretePresition === 1) { + valueStr += '.x'; + } + else if (selfConcretePresition === 2) { + valueStr += '.xy'; + } + else if (selfConcretePresition === 3) { + valueStr += '.xyz'; + } + } + else { + if (valueConretePresition !== 1) { + const dif = selfConcretePresition - valueConretePresition; + const difValues: any[] = []; + for (let i = 0; i < dif; i++) { + difValues.push('0.'); + } + valueStr += ', ' + difValues.join(', '); + } + } + } + } + + let result = `${valueStr}`; + if (this.isVector) { + if (selfConcretePresition === 2) { + result = `vec2(${valueStr})`; + } + else if (selfConcretePresition === 3) { + result = `vec3(${valueStr})`; + } + else if (selfConcretePresition === 4) { + result = `vec4(${valueStr})`; + } + } + + return result; + } + + get defaultConcretePrecision() { + let concretePrecision = 1; + + const value = this.defaultValue; + if (typeof value === 'object') { + if (value.w !== undefined) { + concretePrecision = 4; + } + else if (value.z !== undefined) { + concretePrecision = 3; + } + else if (value.y !== undefined) { + concretePrecision = 2; + } + } + + return concretePrecision; + } + + _concretePrecision = -1; + get concretePrecision() { + if (this._concretePrecision === -1) { + let value = this.defaultValue; + if (value === undefined) { + if (this.node?.isPropertyNode) { + value = (this.node as PropertyNode).property!.value; + } + } + if (value === undefined) { + console.error('Slot Value is undefined, concrete precision maybe wrong.'); + } + this._concretePrecision = getValueConcretePrecision(value); + } + return this._concretePrecision; + } +} + diff --git a/extensions/shader-graph/shader-node/assets/operation/slot.ts.meta b/extensions/shader-graph/shader-node/assets/operation/slot.ts.meta new file mode 100644 index 0000000..130a79e --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/slot.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "37bc895c-264a-40b9-916b-ba4c1c020f87", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/type.ts b/extensions/shader-graph/shader-node/assets/operation/type.ts new file mode 100644 index 0000000..3ca4b2f --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/type.ts @@ -0,0 +1,126 @@ +import { Vec2, Vec3, Vec4, ccenum, Color, Texture2D, TextureCube } from 'cc'; +import { IBlockFeature, IBlockStyle } from '../../../src/block-forge/interface'; + +export enum ConcretePrecisionType { + Min, + Max, + Fixed, + Texture, +} +(ConcretePrecisionType as any)._name = 'ConcretePrecisionType'; + +export enum TextureConcretePrecision { + Texture2D = 100, + TextureCube = 101, +} +(TextureConcretePrecision as any)._name = 'TextureConcretePrecision'; + +export enum PositionSpace { + Local = 0, + View, + World, + // Tangent, + // AbsoluteWorld +} +(PositionSpace as any)._name = 'PositionSpace'; + +export enum NormalSpace { + Local = 0, + View, + World, + // Tangent, +} +(NormalSpace as any)._name = 'NormalSpace'; + +export enum ViewDirSpace { + Local = 0, + View, + World, + // Tangent, +} +(ViewDirSpace as any)._name = 'ViewDirSpace'; + +export const NormalMapSpace = 300; + +export interface IRegisterOptions { + menu?: string; + title?: string; + // 节点的样式 + style?: IBlockStyle; + // 是否是主节点 + master?: boolean; +} + +export interface INodeDataDefine { + inputs?: SlotDefine[]; + outputs?: SlotDefine[]; + props?: SlotDefine[]; +} + +export declare class NodeDefine { + type: string; + extend?: string; + node: INodeDataDefine; + details?: { [key: string]: any } & IRegisterOptions; +} + +export type PropertyValueType = Vec2 | Vec3 | Vec4 | number | boolean | Color | Texture2D | TextureCube; + +export declare class PropertyDefine { + name: string; + type: string; + // 实际对应的 block 类型 + declareType: string; + default: PropertyValueType; + outputs: SlotDefine[]; + details: { + menu: string, + style?: IBlockStyle, + feature?: IBlockFeature, + [key: string]: any + }; +} + +export type SlotDefaultValueType = Boolean | Vec4 | Vec3 | Vec2 | Number | Color | String | Texture2D | TextureCube | null; +// 如果类型是 any,会走动态定义 slot 类型 +export type SlotOrPropType = 'any' | 'number' | 'float' | 'color' | 'vec4' | 'vec3' | 'vec2' | 'boolean' | 'string' | 'texture2D' | 'textureCube' | 'enum' | 'dynamicEnum'; +export type SlotConnectType = 'any' | 'vector' | 'texture2D' | 'textureCube' | 'boolean' | 'string' | 'color'; + +/** + * 该类型动态搜集指定 shader node 的指定属性 key + */ +export type RegisterEnum = { + /** + * 枚举类型 + */ + type: string; + /** + * 需要搜集 Shader Node 中指定属性 + */ + property: string; +} + +export interface SlotPropDetail { + enum?: any; + /** + * 为了识别是否把 slot 注册到 enum 上 + */ + registerEnumType?: string; + /** + * 获取注册 enum 信息 + */ + registerEnum?: RegisterEnum; +} + +export declare class SlotDefine { + display: string; + default: SlotDefaultValueType; + type: SlotOrPropType; + connectType: SlotConnectType; +} +export declare class PropDefine { + display: string; + default: Vec4 | Vec3 | Vec2 | Number | String; + type: string; //'Number' | 'Texture' | 'Enum' + enum: any; +} diff --git a/extensions/shader-graph/shader-node/assets/operation/type.ts.meta b/extensions/shader-graph/shader-node/assets/operation/type.ts.meta new file mode 100644 index 0000000..b7f2af2 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/type.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "298c3210-ad90-4fe8-bc7b-5c4f8ddfddf3", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/assets/operation/utils.ts b/extensions/shader-graph/shader-node/assets/operation/utils.ts new file mode 100644 index 0000000..3cbb465 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/utils.ts @@ -0,0 +1,169 @@ +import { EDITOR } from 'cc/env'; +import { + SlotConnectType, + SlotDefaultValueType, + SlotDefine, + SlotOrPropType, SlotPropDetail, + TextureConcretePrecision, +} from './type'; +import { Vec2, Vec3, Vec4, Color } from 'cc'; + +const useNpm = (EDITOR || globalThis.electron); + +export const Editor = useNpm && globalThis.Editor; +export const projectPath = EDITOR && Editor.Project.path; +export const fs = useNpm && globalThis.require('fs-extra'); +export const path = useNpm && globalThis.require('path'); + +// export const shaderTemplatesDir = path.join(__dirname, '../../compile-shader/shader-templates'); + +export function getJsonObject(str: string) { + let content; + try { + content = JSON.parse(str); + } + catch (err) { + console.error(err); + } + return content; +} + +export function getFloatString(value: number) { + if (typeof value !== 'number') { + return value; + } + + let str = value + ''; + if (!str.includes('.')) { + str += '.'; + } + return str; +} + +const ValueElements = { + vector: ['x', 'y', 'z', 'w'], + color: ['r', 'g', 'b', 'a'], + mat4: ['e00', 'e01', 'e02', 'e03'], +}; + +export function getValueElement(value: any | number, index: number): number { + if (typeof value === 'number') { + return value; + } + + let elements; + + if (value.x !== undefined) { + elements = ValueElements.vector; + } + else if (value.r !== undefined) { + elements = ValueElements.color; + } + else if (value.e00 !== undefined) { + elements = ValueElements.mat4; + } + + return value[elements[index]] || 0; +} + +export function getValueElementStr(value: object | number, index: number): string { + return getFloatString(getValueElement(value, index)); +} + +export function getValueConcretePrecision(value: any) { + let valueConretePresition = 1; + if (typeof value === 'object') { + if (value.w !== undefined || value.a !== undefined) { + valueConretePresition = 4; + } + else if (value.z !== undefined || value.b !== undefined) { + valueConretePresition = 3; + } + else if (value.y !== undefined || value.g !== undefined) { + valueConretePresition = 2; + } + else if (value.m_SerializedTexture !== undefined) { + valueConretePresition = TextureConcretePrecision.Texture2D; + } + else if (value.m_SerializedCubemap !== undefined) { + valueConretePresition = TextureConcretePrecision.TextureCube; + } + } + return valueConretePresition; +} + +export function getPrecisionName(precision: number, type: SlotOrPropType) { + let name = ''; + if (type === 'boolean') { + name = 'bool'; + } + else if (precision === 1) { + name = 'float'; + } + else if (precision === 2) { + name = 'vec2'; + } + else if (precision === 3) { + name = 'vec3'; + } + else if (precision === 4) { + name = 'vec4'; + } + else if (precision === TextureConcretePrecision.Texture2D) { + name = 'sampler2D'; + } + else if (precision === TextureConcretePrecision.TextureCube) { + name = 'samplerCube'; + } + return name; +} + +export function getEnumNames(type) { + let names = Object.getOwnPropertyNames(type); + names = names.filter(name => Number.isNaN(Number.parseFloat(name)) && name !== '_name'); + return names; +} + +export function slot(display: string, + defaultValue: SlotDefaultValueType, + type: SlotOrPropType, + connectType: SlotConnectType, + opts: { [key: string]: any } = {} +): SlotDefine { + const data = { display, default: defaultValue, type, connectType }; + + Object.assign(data, opts); + return data; +} + +export function prop( + display: string, + defaultValue: Vec4 | Vec3 | Vec2 | Number | Color | String | null, + type: SlotOrPropType, + details: SlotPropDetail = {} +) { + const data = { display, default: defaultValue, type }; + Object.assign(data, details); + return data as any; +} + +export function getEnumDefineName(enumObj, value) { + return `CC_${enumObj._name.replace('Space', '')}_${enumObj[value]}`.toUpperCase(); +} + +export function getEnumDefine(enumObj, value) { + const name = getEnumDefineName(enumObj, value); + return `#define ${name} 1`; +} + +export function ensureEnumDefines(enumObj, define: string) { + getEnumNames(enumObj).forEach(name => { + const def = getEnumDefineName(enumObj, enumObj[name]); + + if (!define.includes(def)) { + define += `#define ${def} 0\n`; + } + }); + + return define; +} diff --git a/extensions/shader-graph/shader-node/assets/operation/utils.ts.meta b/extensions/shader-graph/shader-node/assets/operation/utils.ts.meta new file mode 100644 index 0000000..64be277 --- /dev/null +++ b/extensions/shader-graph/shader-node/assets/operation/utils.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "7ceab5c1-cffb-4005-aec2-4d70c0331267", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/shader-graph/shader-node/compile-shader/scripts/generate.js b/extensions/shader-graph/shader-node/compile-shader/scripts/generate.js new file mode 100644 index 0000000..0d30d16 --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/scripts/generate.js @@ -0,0 +1,348 @@ + +const fs = require('fs-extra'); +const path = require('path'); +const { makeFirstCharUppcase, getFileName } = require('./utils'); +const globby = require('globby'); + +const chunkPaths = [ + path.join(__dirname, '../shader-templates/chunks/math.chunk'), + path.join(__dirname, '../shader-templates/chunks/noise.chunk'), + path.join(__dirname, '../shader-templates/chunks/shape.chunk'), + path.join(__dirname, '../shader-templates/chunks/range.chunk'), + path.join(__dirname, '../shader-templates/chunks/uv.chunk'), + path.join(__dirname, '../shader-templates/chunks/input_basic.chunk'), +]; + +const nodeDir = path.join(__dirname, '../../assets/operation/generated'); + +const ignoredFuncs = []; + +let currentChunk; +function generateChunk(chunkPath) { + const content = fs.readFileSync(chunkPath, 'utf-8'); + + currentChunk = ''; + if (content.includes('// @depChunk')) { + currentChunk = path.basename(chunkPath).split('.')[0]; + } + + const funcs = fetchFuncs(content); + fetchParams(content, funcs); + + generateCode(funcs); + + // console.log(objs) +} + +// 获取所有 glsl 函数,标记了注释的函数才会被纳入 +function fetchFuncs(content) { + // https://stackoverflow.com/questions/65367401/extract-glsl-function-body-with-regexp + const reg = /^(\s*)(vec4|vec3|vec2|float|int|void) *(\w*) *\((.*)\) *{([\s\S]*?^\1)}\s*$/gm; + const funcRegs = content.match(reg); + + const funcs = []; + + funcRegs.forEach(funcReg => { + const res = new RegExp(reg).exec(funcReg); + // let res = func.match(reg); + + if (!res) { + throw new Error('Failed to get Function.'); + } + + const func = { + return: '', + outputs: [], + inputs: [], + + name: res[3], + body: res[5], + }; + + const inputs = res[4].split(','); + func.inputs = inputs.map((i, idx) => { + const res = /(\w+) +(\w+)/.exec(i); + return { type: res[1], name: res[2] }; + }); + + func.return = res[2]; + func.outputs.push({ type: res[2], name: 'Out' }); + + funcs.push(func); + }); + + return funcs; +} + +// 从注释中获取生成节点的参数 + +// 生成的文件夹路径 +// @folder procedural/noise + +/** + * @param uv notConnect=v_uv.xy + * @param width default=0.5 + * @param radius default=0.1 + * @presicion fixed + * @inline + * @type Slider +*/ +function fetchParams(content, funcs) { + + const lines = content.split('\n'); + let folder = ''; + let params = {}; + const paramNames = [ + 'inline', + 'presicion', + 'param', + 'type', + ]; + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + if (line.includes('@folder')) { + folder = /@folder *(.+)/g.exec(line)[1]; + console.log('--- ', folder); + continue; + } + else { + paramNames.forEach(name => { + if (line.includes('@' + name)) { + if (name === 'inline') { + params[name] = true; + } + else if (name === 'param') { + let setting = new RegExp(`@${name} *(.+)`).exec(line)[1]; + setting = setting.split(' '); + const inputName = setting[0]; + if (!params.inputs) { + params.inputs = {}; + } + + params.inputs[inputName] = {}; + for (let i = 1; i < setting.length; i++) { + const inputSetting = setting[i].split('='); + params.inputs[inputName][inputSetting[0]] = inputSetting[1]; + } + } + else { + params[name] = new RegExp(`@${name} *(.+)`).exec(line)[1]; + } + } + }); + } + + funcs.forEach(obj => { + const test = new RegExp(`${obj.return} * ${obj.name} *\\(`); + if (test.exec(line)) { + obj.folder = folder; + obj.params = params; + params = {}; + } + }); + } + + for (let i = funcs.length - 1; i >= 0; i--) { + const params = funcs[i].params; + if (!Object.getOwnPropertyNames(params).length) { + ignoredFuncs.push(funcs[i]); + funcs.splice(i, 1); + } + } +} + +// 生成节点代码 +function generateCode(funcs) { + + const glsl2CCType = { + sampler2D: 'texture2D', + samplerCube: 'textureCube', + float: 'float', + vec2: 'vec2', + vec3: 'vec3', + vec4: 'vec4', + }; + + const type2Default = { + texture2D: 'white', + textureCube: 'white', + float: '0', + vec2: 'Vec2.ZERO', + vec3: 'Vec3.ZERO', + vec4: 'Vec4.ZERO', + }; + + const type2ConnectType = { + texture2D: 'texture2D', + textureCube: 'textureCube', + float: 'vector', + vec2: 'vector', + vec3: 'vector', + vec4: 'vector', + }; + + funcs.forEach(func => { + let inputsDatas = ``; + let inputs = ``; + func.inputs.forEach((i, idx) => { + const type = glsl2CCType[i.type]; + if (!type) { + throw new Error(`Not found type for ${i.type}`); + } + + const inputParam = func.params.inputs && func.params.inputs[i.name]; + + const defaultValue = (inputParam && inputParam.default) || type2Default[type]; + const connectType = type2ConnectType[type]; + + const valueDefine = inputParam && inputParam.notConnect ? 'let' : 'const'; + + inputsDatas += `\n slot('${i.name}', ${defaultValue}, '${type}', '${connectType}'),`; + inputs += `\n ${valueDefine} input${idx} = this.getInputValue(${idx});`; + + if (inputParam) { + if (inputParam.notConnect) { + inputs += ` + if (!this.inputs[${idx}].connectSlot) { + input${idx} = '${inputParam.notConnect}'; + } + `; + } + } + }); + + let outputsDatas = ``; + let outputs = ``; + func.outputs.forEach((o, idx) => { + const type = glsl2CCType[o.type]; + if (!type) { + throw new Error(`Not found type for ${o.type}`); + } + const def = type2Default[type]; + const connectType = type2ConnectType[type]; + + outputsDatas += `\n slot('${o.name}', ${def}, '${type}', '${connectType}'),`; + outputs += `\n const output${idx} = this.getOutputVarDefine(${idx});`; + }); + + let funcCode = ``; + if (func.params && func.params.inline) { + funcCode = func.body.replace('return ', '${output0} = '); + + func.inputs.forEach((input, idx) => { + funcCode = funcCode.replace(new RegExp(`\\b${input.name}\\b`, 'g'), '${input' + idx + '}'); + }); + + const lines = funcCode.split('\n'); + let newFunc = ``; + for (let i = 0; i < lines.length; i++) { + const newLine = lines[i].replace(/^ */g, ''); + if (!newLine || newLine === '\r') { + continue; + } + newFunc += '\n ' + newLine; + } + newFunc += '\n '; + funcCode = newFunc; + } + else { + const params = func.inputs.map((input, idx) => '${input' + idx + '}'); + funcCode = '${output0}' + ` = ${func.name}(${params.join(', ')});`; + } + + const folderLevel = func.folder.split('/').length; + const pathRel = new Array(folderLevel - 1).fill(1).map(a => '../').join(); + + let presicion = ''; + if (func.params.presicion) { + presicion = ` concretePrecisionType = ConcretePrecisionType.${makeFirstCharUppcase(func.params.presicion)};\n`; + } + + let depChunks = ''; + if (currentChunk) { + depChunks = ` depChunks = ['${currentChunk}'];\n`; + } + + let nodeType = ''; + if (func.params.type) { + nodeType = ` get type() { return '${func.params.type}'; }\n`; + } + + const preDefine = presicion + depChunks + nodeType; + + let folder = func.folder; + let folders = folder.split('/'); + folders = folders.map(f => makeFirstCharUppcase(f)); + folder = folders.join('/'); + + const code = ` +import { Vec2, Vec3, Vec4 } from 'cc'; +import { register } from '${pathRel}../../../graph/register'; +import { ShaderNode } from '${pathRel}../../base'; +import { ConcretePrecisionType } from '${pathRel}../../type'; +import { slot } from '${pathRel}../../utils'; + +@register({ + menu: '${folder}/${func.name}', + title: '${func.name}', +}) +export default class ${func.name} extends ShaderNode { +${preDefine} + data = { + inputs: [${inputsDatas} + ], + outputs: [${outputsDatas} + ], + }; + + calcConcretePrecision() { + super.calcConcretePrecision(); + } + + generateCode() { + ${inputs} + ${outputs} + return \`${funcCode}\`; + } +} + `; + const nodePath = path.join(nodeDir, func.folder, getFileName(func.name) + '.ts'); + fs.ensureDirSync(path.dirname(nodePath)); + fs.writeFileSync(nodePath, code); + }); + +} + +// 在 index.ts 中 import 所有节点文件,作为加载所有节点的入口 +function generateIndex() { + const generatedDir = path.join(nodeDir, '**/*.ts'); + const manualDir = path.join(__dirname, '../../assets/operation/manual', '**/*.ts'); + + const baseDir = path.join(__dirname, '../../assets/operation'); + + const paths = globby.sync([ + generatedDir.replace(/\\/g, '/'), + manualDir.replace(/\\/g, '/'), + ]); + + let index = ''; + paths.forEach(p => { + index += `import './${path.relative(baseDir, p).replace(/\\/g, '/')}';\n`; + }); + + fs.writeFileSync(path.join(baseDir, 'index.ts'), index); +} + +function run() { + chunkPaths.forEach(chunkPath => { + generateChunk(chunkPath); + }); + + ignoredFuncs.forEach(obj => { + console.warn(`Ignored function ${obj.name}`); + }); + + generateIndex(); +} + +run(); diff --git a/extensions/shader-graph/shader-node/compile-shader/scripts/utils.js b/extensions/shader-graph/shader-node/compile-shader/scripts/utils.js new file mode 100644 index 0000000..dc06892 --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/scripts/utils.js @@ -0,0 +1,18 @@ + +function makeFirstCharUppcase(str) { + const f = str[0].toUpperCase(); + str = f + str.substring(1, str.length); + return str; +} + +function getFileName(str) { + let res = str.match(/[A-Z]+[a-z0-9]*/g); + if (!res) return ''; + res = res.map(f => f.toLowerCase()); + return res.join('-'); +} + +module.exports = { + makeFirstCharUppcase, + getFileName, +}; \ No newline at end of file diff --git a/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/common.chunk b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/common.chunk new file mode 100644 index 0000000..2f6c987 --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/common.chunk @@ -0,0 +1,9 @@ + + +CCProgram shader_graph_common %{ + +// #include +#define frac(uv) fract(uv) +#define lerp(min, max, t) mix(min, max, t) + +}% diff --git a/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/input_basic.chunk b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/input_basic.chunk new file mode 100644 index 0000000..e0dc64d --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/input_basic.chunk @@ -0,0 +1,53 @@ + +CCProgram shader_graph_input_basic %{ + // @folder input/basic + + /** + * @inline + * @presicion fixed + */ + float Boolean (float In) { + return In; + } + + /** + * @inline + * @presicion fixed + */ + float Float (float In) { + return In; + } + + /** + * @inline + * @presicion fixed + */ + vec2 Vector2 (float X, float Y) { + return vec2(X, Y); + } + + /** + * @inline + * @presicion fixed + */ + vec3 Vector3 (float X, float Y, float Z) { + return vec3(X, Y, Z); + } + + /** + * @inline + * @presicion fixed + */ + vec4 Vector4 (float X, float Y, float Z, float W) { + return vec4(X, Y, Z, W); + } + + /** + * @inline + * @type Slider + * @presicion fixed + */ + float Slider (float In) { + return In; + } +}% diff --git a/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/math.chunk b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/math.chunk new file mode 100644 index 0000000..0479baf --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/math.chunk @@ -0,0 +1,451 @@ + +CCProgram shader_graph_math %{ + // @folder math/advanced + + /** + * @inline + */ + vec4 Absolute(vec4 In) { + return abs(In); + } + + /** + * @inline + */ + vec4 Exponential(vec4 In) { + return exp(In); + } + + /** + * @inline + */ + vec4 Length(vec4 In) { + return length(In); + } + + /** + * @inline + */ + vec4 Log(vec4 In) { + return log(In); + } + + /** + * @inline + */ + vec4 Modulo(vec4 A, vec4 B) { + return mod(A, B); + } + + /** + * @inline + */ + vec4 Negate(vec4 In) { + return -In; + } + + /** + * @inline + */ + vec4 Normalize(vec4 In) { + return normalize(In); + } + + /** + * @inline + */ + vec4 Posterize(vec4 In, vec4 Steps) { + return floor(In / (1. / Steps)) * (1. / Steps); + } + + /** + * @inline + */ + vec4 Reciprocal(vec4 In) { + return 1. / In; + } + + /** + * @inline + */ + vec4 ReciprocalSquare(vec4 In) { + return 1. / (In * In); + } + + + // @folder math/basic + + /** + * @presicion max + * @inline + */ + vec4 Add (vec4 A, vec4 B) { + return A + B; + } + + /** + * @presicion max + * @inline + */ + vec4 Substract (vec4 A, vec4 B) { + return A - B; + } + + /** + * @presicion max + * @inline + */ + vec4 Divide (vec4 A, vec4 B) { + return A / B; + } + + /** + * @presicion max + * @inline + */ + vec4 Multiply (vec4 A, vec4 B) { + return A * B; + } + + /** + * @presicion fixed + * @inline + */ + vec4 Power (vec4 A, vec4 B) { + return pow(A, B); + } + + /** + * @inline + */ + vec4 Square (vec4 A) { + return sqrt(A); + } + + // @folder math/round + + /** + * @inline + */ + vec4 Ceil (vec4 In) { + return ceil(In); + } + + /** + * @inline + */ + vec4 Floor (vec4 In) { + return floor(In); + } + + /** + * @inline + */ + vec4 Round (vec4 In) { + return floor(In + 0.5); + } + + /** + * @inline + */ + vec4 Sign (vec4 In) { + return sign(In); + } + + /** + * @inline + */ + vec4 Step (vec4 Edge, vec4 In) { + return step(Edge, In); + } + + /** + * @inline + */ + vec4 Truncate (vec4 In) { + return trunc(In); + } + + // @folder math/interpolation + + /** + * @inline + */ + vec4 InverseLerp (vec4 A, vec4 B, vec4 T) { + return (T - A) / (B - A); + } + + /** + * @inline + * @presicion max + */ + vec4 Lerp (vec4 A, vec4 B, vec4 T) { + return mix(A, B, T); + } + + /** + * @inline + */ + vec4 Smoothstep (vec4 Edge1, vec4 Edge2, vec4 In) { + return smoothstep(Edge1, Edge2, In); + } + + + // @folder math/trigonometry + + /** + * @inline + */ + vec4 Arccosine (vec4 In) { + return acos(In); + } + + /** + * @inline + */ + vec4 Arcsine (vec4 In) { + return asin(In); + } + + /** + * @inline + */ + vec4 Arctangent2 (vec4 A, vec4 B) { + return atan2(A, B); + } + + /** + * @inline + */ + vec4 Arctangent (vec4 In) { + return atan(In); + } + + /** + * @inline + */ + vec4 Cosine (vec4 In) { + return cos(In); + } + + /** + * @inline + */ + vec4 Sine (vec4 In) { + return sin(In); + } + + /** + * @inline + */ + vec4 Tangent (vec4 In) { + return tan(In); + } + + /** + * @inline + */ + vec4 DegreesToRadians (vec4 In) { + return radians(In); + } + + /** + * @inline + */ + vec4 RadiansToDegrees (vec4 In) { + return degrees(In); + } + + /** + * @inline + */ + vec4 HyperbolicCosine (vec4 In) { + return cosh(In); + } + + /** + * @inline + */ + vec4 HyperbolicSine (vec4 In) { + return sinh(In); + } + + /** + * @inline + */ + vec4 Hyperbolic (vec4 In) { + return tanh(In); + } + + // @folder math/vector + + /** + * @inline + */ + vec4 CrossProduct (vec4 A, vec4 B) { + return cross(A, B); + } + + /** + * @inline + * @presicion fixed + */ + float Distance (vec4 A, vec4 B) { + return distance(A, B); + } + + /** + * @inline + * @presicion fixed + */ + float DotProduct (vec4 A, vec4 B) { + return dot(A, B); + } + + /** + * @inline + * @presicion fixed + */ + float Fresnel (vec3 Normal, vec3 ViewDir, float Power) { + return pow((1.0 - saturate(dot(normalize(Normal), normalize(ViewDir)))), Power); + } + + /** + * @inline + */ + vec4 Projection (vec4 A, vec4 B) { + return B * dot(A, B) / dot(B, B); + } + + /** + * @inline + */ + vec4 Reflection(vec4 In, vec4 Normal) { + return reflect(In, Normal); + } + + /** + * @inline + */ + vec4 Rejection(vec4 A, vec4 B) { + return A - (B * dot(A, B) / dot(B, B)) + } + + /** + * @inline + */ + vec4 SphereMask(vec4 Coords, vec4 Center, float Radius, float Hardness) { + return 1 - saturate((distance(Coords, Center) - Radius) / (1 - Hardness)); + } + + + // @folder math/range + + /** + * @inline + */ + vec4 Clamp(vec4 In, vec4 Min, vec4 Max) { + return clamp(In, Min, Max); + } + + /** + * @inline + */ + vec4 Fraction(vec4 In) { + return fract(In); + } + + /** + * @inline + */ + vec4 Max(vec4 A, vec4 B) { + return max(A, B); + } + + /** + * @inline + */ + vec4 Min(vec4 A, vec4 B) { + return min(A, B); + } + + /** + * @inline + */ + vec4 OneMinus(vec4 In) { + return 1. - In; + } + + /** + * @inline + * @presicion max + */ + vec4 Remap(vec4 In, vec2 InMinMax, vec2 OutMinMax) { + return OutMinMax.x + (In - InMinMax.x) * (OutMinMax.y - OutMinMax.x) / (InMinMax.y - InMinMax.x); + } + + /** + * @inline + */ + vec4 Saturate(vec4 In) { + return saturate(In); + } + + + // @folder math/derivative + + /** + * @inline + */ + vec4 DDX (vec4 In) { + return dFdx(In); + } + + /** + * @inline + */ + vec4 DDY (vec4 In) { + return dFdy(In); + } + + /** + * @inline + */ + vec4 DDXY (vec4 In) { + return abs(dFdx(In)) + abs(dFdy(In)); + } + + // @folder math/wave + + /** + * @inline + */ + vec4 TriangleWave (vec4 In) { + return 2.0 * abs( 2 * (In - floor(0.5 + In)) ) - 1.0; + } + + /** + * @inline + */ + vec4 NoiseSineWave(vec4 In, vec2 MinMax) { + float sinIn = sin(In); + float sinInOffset = sin(In + 1.0); + float randomno = frac(sin((sinIn - sinInOffset) * (12.9898 + 78.233))*43758.5453); + float noise = lerp(MinMax.x, MinMax.y, randomno); + return sinIn + noise; + } + + /** + * @inline + */ + vec4 SawtoothWave(vec4 In) { + return 2 * (In - floor(0.5 + In)); + } + + /** + * @inline + */ + vec4 SquareWave(vec4 In) { + return 1.0 - 2.0 * round(frac(In)); + } +}% diff --git a/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/noise.chunk b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/noise.chunk new file mode 100644 index 0000000..12369d2 --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/noise.chunk @@ -0,0 +1,85 @@ +// @depChunk +CCProgram shader_graph_noise %{ + // @folder procedural/noise + + float noise_randomValue (vec2 uv) + { + return fract(sin(dot(uv, vec2(12.9898, 78.233)))*43758.5453); + } + + float noise_interpolate (float a, float b, float t) + { + return (1.0-t)*a + (t*b); + } + + float simpleNoise_valueNoise (vec2 uv) + { + vec2 i = floor(uv); + vec2 f = fract(uv); + f = f * f * (3.0 - 2.0 * f); + + uv = abs(fract(uv) - 0.5); + vec2 c0 = i + vec2(0.0, 0.0); + vec2 c1 = i + vec2(1.0, 0.0); + vec2 c2 = i + vec2(0.0, 1.0); + vec2 c3 = i + vec2(1.0, 1.0); + float r0 = noise_randomValue(c0); + float r1 = noise_randomValue(c1); + float r2 = noise_randomValue(c2); + float r3 = noise_randomValue(c3); + + float bottomOfGrid = noise_interpolate(r0, r1, f.x); + float topOfGrid = noise_interpolate(r2, r3, f.x); + float t = noise_interpolate(bottomOfGrid, topOfGrid, f.y); + return t; + } + + + /* + * @presicion fixed + * @param uv notConnect=v_uv.xy + */ + float SimpleNoise (vec2 uv, float scale) { + float t = 0.0; + + float freq = pow(2.0, 0.); + float amp = pow(0.5, 3.); + t += simpleNoise_valueNoise(vec2(uv.x*scale/freq, uv.y*scale/freq))*amp; + + freq = pow(2.0, 1.); + amp = pow(0.5, 3.-1.); + t += simpleNoise_valueNoise(vec2(uv.x*scale/freq, uv.y*scale/freq))*amp; + + freq = pow(2.0, 2.); + amp = pow(0.5, 3.-2.); + t += simpleNoise_valueNoise(vec2(uv.x*scale/freq, uv.y*scale/freq))*amp; + + return t; + } + + vec2 gradientNoiseDir (vec2 p) { + // Permutation and hashing used in webgl-nosie goo.gl/pX7HtC + p = mod(p, 289.); + float x = mod((34. * p.x + 1.) * p.x, 289.) + p.y; + x = mod((34. * x + 1.) * x, 289.); + x = frac(x / 41.) * 2. - 1.; + return normalize(vec2(x - floor(x + 0.5), abs(x) - 0.5)); + } + + /* + * @presicion fixed + * @param uv notConnect=v_uv.xy + */ + float GradientNoise (vec2 uv, float scale) { + vec2 p = uv * scale; + vec2 ip = floor(p); + vec2 fp = frac(p); + float d00 = dot(gradientNoiseDir(ip), fp); + float d01 = dot(gradientNoiseDir(ip + vec2(0., 1.)), fp - vec2(0., 1.)); + float d10 = dot(gradientNoiseDir(ip + vec2(1., 0.)), fp - vec2(1., 0.)); + float d11 = dot(gradientNoiseDir(ip + vec2(1., 1.)), fp - vec2(1., 1.)); + fp = fp * fp * fp * (fp * (fp * 6. - 15.) + 10.); + return lerp(lerp(d00, d01, fp.y), lerp(d10, d11, fp.y), fp.x) + 0.5; + } + +}% diff --git a/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/range.chunk b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/range.chunk new file mode 100644 index 0000000..a3ef25e --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/range.chunk @@ -0,0 +1,13 @@ +// @depChunk +CCProgram shader_graph_range %{ + // @folder math/range + + /* + * @presicion fixed + */ + float RandomRange (vec2 seed, float minv, float maxv) { + float randomno = fract(sin(dot(seed, vec2(12.9898, 78.233)))*43758.5453); + return mix(minv, maxv, randomno); + } + +}% diff --git a/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/shape.chunk b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/shape.chunk new file mode 100644 index 0000000..2044f98 --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/shape.chunk @@ -0,0 +1,54 @@ + + +// @depChunk +CCProgram shader_graph_shape %{ + // @folder procedural/shape + + /* + * @presicion fixed + * @param uv notConnect=v_uv.xy + * @param width default=0.5 + * @param height default=0.5 + */ + float Ellipse (vec2 uv, float width, float height) { + #if CC_USE_derivatives + float d = length((uv * 2. - 1.) / vec2(width, height)); + return saturate((1. - d) / fwidth(d)); + #else + return 1.; + #endif + } + + /* + * @presicion fixed + * @param uv notConnect=v_uv.xy + * @param width default=0.5 + */ + float Rectangle (vec2 uv, float width) { + #if CC_USE_derivatives + vec2 d = abs(uv * 2. - 1.) - vec2(width, width); + d = 1. - d / fwidth(d); + return saturate(min(d.x, d.y)); + #else + return 1.; + #endif + } + + /* + * @presicion fixed + * @param uv notConnect=v_uv.xy + * @param width default=0.5 + * @param radius default=0.1 + */ + float RoundRectangle (vec2 uv, float width, float radius) { + #if CC_USE_derivatives + radius = max(min(min(abs(radius * 2.), abs(width)), abs(width)), float(1e-5)); + uv = abs(uv * 2. - 1.) - vec2(width, width) + radius; + float d = length(max(vec2(0.), uv)) / radius; + return saturate((1. - d) / fwidth(d)); + #else + return 1.; + #endif + } + +}% diff --git a/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/uv.chunk b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/uv.chunk new file mode 100644 index 0000000..1cec91f --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/shader-templates/chunks/uv.chunk @@ -0,0 +1,50 @@ + + +// @depChunk +CCProgram shader_graph_uv %{ + // @folder uv + + /** + * @param uv notConnect=v_uv.xy + * @presicion fixed + */ + vec2 PolarCoordinates (vec2 uv, vec2 center, float radialScale, float lengthScale) { + vec2 delta = uv - center; + float radius = length(delta) * 2. * radialScale; + float angle = atan(delta.y, delta.x) * 1.0/6.28 * lengthScale; + return vec2(radius, angle); + } + + /** + * @param uv notConnect=v_uv.xy + * @presicion fixed + */ + vec2 RotateCoordinates (vec2 uv, vec2 center, float rotation) { + //rotation matrix + uv -= center; + float s = sin(rotation); + float c = cos(rotation); + + //center rotation matrix + mat2 rMatrix = mat2(c, -s, s, c); + rMatrix *= 0.5; + rMatrix += 0.5; + rMatrix = rMatrix*2. - 1.; + + //multiply the UVs by the rotation matrix + uv *= rMatrix; + uv += center; + + return uv; + } + + /** + * @param uv notConnect=v_uv.xy + * @presicion fixed + * @inline + */ + vec2 TillingAndOffset (vec2 uv, vec2 tilling, vec2 offset) { + return uv * tilling + offset; + } + +}% diff --git a/extensions/shader-graph/shader-node/compile-shader/shader-templates/master/SurfaceMasterNode.effect b/extensions/shader-graph/shader-node/compile-shader/shader-templates/master/SurfaceMasterNode.effect new file mode 100644 index 0000000..b9be1ae --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/shader-templates/master/SurfaceMasterNode.effect @@ -0,0 +1,399 @@ +// Copyright (c) 2017-2022 Xiamen Yaji Software Co., Ltd. + +CCEffect %{ + techniques: + - name: opaque + passes: + - vert: standard-vs + frag: standard-fs + properties: &props + {{properties_mtl}} + + - &forward-add + vert: standard-vs + frag: standard-fs + phase: forward-add + propertyIndex: 0 + embeddedMacros: { CC_FORWARD_ADD: true } + depthStencilState: + depthFunc: equal + depthTest: true + depthWrite: false + blendState: + targets: + - blend: true + blendSrc: one + blendDst: one + blendSrcAlpha: zero + blendDstAlpha: one + - &shadow-caster + vert: shadow-caster-vs + frag: shadow-caster-fs + phase: shadow-caster + propertyIndex: 0 + rasterizerState: + cullMode: front + properties: *props + - &reflect-map + vert: standard-vs + frag: reflect-map-fs + phase: reflect-map + propertyIndex: 0 + - &planar-shadow + vert: planar-shadow-vs + frag: planar-shadow-fs + phase: planar-shadow + propertyIndex: 0 + depthStencilState: + depthTest: true + depthWrite: false + stencilTestFront: true + stencilFuncFront: not_equal + stencilPassOpFront: replace + stencilRef: 0x80 # only use the leftmost bit + stencilReadMask: 0x80 + stencilWriteMask: 0x80 + blendState: + targets: + - blend: true + blendSrc: src_alpha + blendDst: one_minus_src_alpha + blendDstAlpha: one_minus_src_alpha + - name: transparent + passes: + - vert: standard-vs + frag: standard-fs + embeddedMacros: { CC_FORCE_FORWARD_SHADING: true } + depthStencilState: + depthTest: true + depthWrite: false + blendState: + targets: + - blend: true + blendSrc: src_alpha + blendDst: one_minus_src_alpha + blendDstAlpha: one_minus_src_alpha + properties: *props + - *forward-add + # - *shadow-caster + # - *planar-shadow +}% + +{{chunks}} + +CCProgram shared-ubos %{ + uniform ShaderGraph_Properties { + {{properties}} + }; + + {{properties_sampler}} +}% + +CCProgram macro-remapping %{ + // ui displayed macros + #pragma define-meta HAS_SECOND_UV + #pragma define-meta USE_TWOSIDE + #pragma define-meta IS_ANISOTROPY + #pragma define-meta USE_VERTEX_COLOR + + #define CC_SURFACES_USE_SECOND_UV HAS_SECOND_UV + #define CC_SURFACES_USE_TWO_SIDED USE_TWOSIDE + #define CC_SURFACES_USE_VERTEX_COLOR USE_VERTEX_COLOR + + #define CC_SURFACES_LIGHTING_ANISOTROPIC IS_ANISOTROPY + #define CC_SURFACES_LIGHTING_ANISOTROPIC_ENVCONVOLUTION_COUNT 15 + + #if __VERSION__ < 300 + #ifdef GL_OES_standard_derivatives + #define CC_USE_derivatives 1 + #else + #define CC_USE_derivatives 0 + #endif + #else + #define CC_USE_derivatives 1 + #endif + +{{defines}} +}% + + +CCProgram surface-vertex %{ + #if CC_POSITION_LOCAL + out vec3 v_locPos; + #endif + + #if CC_NORMAL_LOCAL + out vec3 v_locNormal; + #endif + + + {{vs_chunks}} + + + #define CC_SURFACES_VERTEX_MODIFY_LOCAL_SHARED_DATA + void SurfacesVertexModifyLocalSharedData(inout SurfacesStandardVertexIntermediate In) + { + vec3 position = In.position.xyz; + vec3 normal = In.normal.xyz; + + #if CC_SURFACES_USE_TANGENT_SPACE + vec4 tangent = In.tangent; + #endif + + #if CC_POSITION_WORLD || CC_POSITION_VIEW || CC_NORMAL_WORLD || CC_NORMAL_VIEW + mat4 matWorld, matWorldIT; + CCGetWorldMatrixFull(matWorld, matWorldIT); + #endif + + #if CC_POSITION_WORLD || CC_POSITION_VIEW + vec3 worldPos = (matWorld * In.position).xyz; + #endif + + #if CC_POSITION_VIEW + vec3 viewPos = (cc_matView * vec4(worldPos, 1.)).xyz; + #endif + + #if CC_NORMAL_WORLD || CC_NORMAL_VIEW + vec3 worldNormal = normalize((matWorldIT * vec4(In.normal.xyz, 0.0)).xyz); + #endif + + #if CC_NORMAL_VIEW + vec3 viewNormal = cc_matView * vec4(worldNormal, 0.0); + #endif + + {{code_chunk_0}} + + In.position.xyz = {{slot_Vertex_Position = position}}.xyz; + In.normal = {{slot_Vertex_Normal = normal}}.xyz; + + #if CC_SURFACES_USE_TANGENT_SPACE + In.tangent = {{slot_Vertex_Tangent = tangent}}; + #endif + + #if CC_POSITION_LOCAL + v_locPos = In.position.xyz; + #endif + + #if CC_NORMAL_LOCAL + v_locNormal = In.normal.xyz; + #endif + } +}% + +CCProgram surface-fragment %{ + #include + + #if CC_POSITION_LOCAL + in vec3 v_locPos; + #endif + + #if CC_NORMAL_LOCAL + in vec3 v_locNormal; + #endif + + {{fs_chunks}} + + // definition of SurfacesMaterialData structure with corresponding shading-model + #include + + #define CC_SURFACES_FRAGMENT_MODIFY_SHARED_DATA + void SurfacesFragmentModifySharedData(inout SurfacesMaterialData surfaceData) + { + vec3 worldPos = surfaceData.worldPos; + vec3 worldNormal = surfaceData.worldNormal; + vec3 worldTangent = surfaceData.worldTangent; + vec3 worldBinormal = surfaceData.worldBinormal; + + #if CC_VIEWDIR_WORLD || CC_VIEWDIR_VIEW || CC_VIEWDIR_LOCAL + vec3 worldView = cc_cameraPos.xyz - worldPos.xyz; + #endif + #if CC_VIEWDIR_VIEW + vec3 viewView = (cc_matView * vec4(worldView, 0.0)).xyz; + #endif + #if CC_VIEWDIR_LOCAL + vec3 view = (matWorldIT * vec4(worldView, 0.0)).xyz; + #endif + + #if CC_POSITION_LOCAL + vec3 position = v_locPos; + #endif + + #if CC_NORMAL_LOCAL + vec3 normal = v_locNormal; + #endif + + #if CC_POSITION_VIEW + vec4 viewPos = cc_matView * vec4(worldPos, 1.); + #endif + + {{code_chunk_3}} + + surfaceData.baseColor.a = {{slot_Alpha = 1.}}; + if (surfaceData.baseColor.a <= {{slot_AlphaClipThreshold = 0.}}) { + discard; + } + + surfaceData.baseColor.rgb = {{slot_Albedo = vec3(1.)}}.rgb; + surfaceData.emissive = {{slot_Emission = vec3(0.)}}.rgb; + surfaceData.specularIntensity = {{slot_SpecularIntensity = 0.5}}; + surfaceData.metallic = {{slot_Metallic = 0.6}}; + surfaceData.roughness = {{slot_Roughness = 0.5}}; + surfaceData.ao = {{slot_Occlusion = 1.0}}; + + #if CC_SURFACES_LIGHTING_ANISOTROPIC + float anisotropyRotation = {{slot_AnisotropyRotation = 0.}}; + float anisotropyShape = {{slot_AnisotropyShape = 1.}}; + + surfaceData.anisotropyShape = anisotropyShape; + RotateTangentAndBinormal(surfaceData.worldTangent, surfaceData.worldBinormal, surfaceData.worldNormal, anisotropyRotation); + #endif + } + +}% + +CCProgram test-fs %{ + + layout(location = 0) out vec4 fragColorX; + + void main() { + SurfacesMaterialData surfaceData; + CCSurfacesFragmentGetMaterialData(surfaceData); + + LightingResult lightingResult; + CCSurfacesLighting(lightingResult, surfaceData, vec2(0.)); + + vec4 color = CCSurfacesShading(surfaceData, lightingResult); + + // Color output + #if CC_USE_RGBE_OUTPUT + color = packRGBE(color.rgb); // for reflection-map + #else + color = CCSurfacesDebugDisplayInvalidNumber(color); + // #if !CC_USE_FLOAT_OUTPUT + // color.rgb = HDRToLDR(color.rgb); + // color.rgb = LinearToSRGB(color.rgb); + // #endif + #endif + + fragColorX = color; + + // fragColorX = vec4(surfaceData.worldPos, 1.); + } +}% + +CCProgram standard-vs %{ + precision highp float; + + // 1. surface internal macros, for technique usage or remapping some user (material) macros to surface internal macros + #include + #include + + // 2. common include with corresponding shader stage, include before surface functions + #include + + // 3. user surface functions that can use user (effect) parameters (ubo Constants) + // see surfaces/default-functions/xxx.chunk + #include + #include + + // 4. surface include with corresponding shader stage and shading-model (optional) + #include + + // 5. shader entry with corresponding shader stage and technique usage/type + #include +}% + + +CCProgram shadow-caster-vs %{ + precision highp float; + #include + #include + #include + #include + #include + #include +}% + +CCProgram planar-shadow-vs %{ + precision highp float; + #include + #include + #include + #include + #include + #include +}% + + +CCProgram standard-fs %{ + #pragma extension([GL_OES_standard_derivatives, __VERSION__ < 300]) + + // shading-model : standard + // lighting-model : standard (isotropy / anisotropy pbr) + // shader stage : fs + // technique usage/type : render-to-scene + + precision highp float; + // 1. surface internal macros, for technique usage or remapping some user (material) macros to surface internal macros + #include + #include + + // 2. common include with corresponding shader stage, include before surface functions + #include + + // 3. user surface functions that can use user (effect) parameters (ubo Constants) + // see surfaces/default-functions/xxx.chunk + #include + #include + + // 4. lighting-model (optional) + #include + + // 5. surface include with corresponding shader stage and shading-model (optional) + #include + + // 6. shader entry with corresponding shader stage and technique usage/type + #include + + // #include + +}% + +CCProgram shadow-caster-fs %{ + #pragma extension([GL_OES_standard_derivatives, __VERSION__ < 300]) + + precision highp float; + #include + #include + #include + #include + #include + #include +}% + +CCProgram planar-shadow-fs %{ + #pragma extension([GL_OES_standard_derivatives, __VERSION__ < 300]) + + precision highp float; + #include + #include + #include + #include + #include + #include +}% + +CCProgram reflect-map-fs %{ + #pragma extension([GL_OES_standard_derivatives, __VERSION__ < 300]) + + precision highp float; + #include + #include + #include + #include + #include + #include + #include + #include +}% + diff --git a/extensions/shader-graph/shader-node/compile-shader/shader-templates/master/UnlitMasterNode.effect b/extensions/shader-graph/shader-node/compile-shader/shader-templates/master/UnlitMasterNode.effect new file mode 100644 index 0000000..68b5db7 --- /dev/null +++ b/extensions/shader-graph/shader-node/compile-shader/shader-templates/master/UnlitMasterNode.effect @@ -0,0 +1,349 @@ +// Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. +CCEffect %{ + techniques: + - name: opaque + passes: + - vert: unlit-vs + frag: unlit-fs + properties: &props + {{properties_mtl}} + - &shadow-caster + vert: shadow-caster-vs + frag: shadow-caster-fs + phase: shadow-caster + propertyIndex: 0 + rasterizerState: + cullMode: front + properties: *props + - &reflect-map + vert: unlit-vs + frag: reflect-map-fs + phase: reflect-map + propertyIndex: 0 + - &planar-shadow + vert: planar-shadow-vs + frag: planar-shadow-fs + phase: planar-shadow + propertyIndex: 0 + depthStencilState: + depthTest: true + depthWrite: false + stencilTestFront: true + stencilFuncFront: not_equal + stencilPassOpFront: replace + stencilRef: 0x80 # only use the leftmost bit + stencilReadMask: 0x80 + stencilWriteMask: 0x80 + blendState: + targets: + - blend: true + blendSrc: src_alpha + blendDst: one_minus_src_alpha + blendDstAlpha: one_minus_src_alpha + - name: transparent + passes: + - vert: unlit-vs + frag: unlit-fs + depthStencilState: &d1 + depthTest: true + depthWrite: false + blendState: + targets: + - blend: true + blendSrc: src_alpha + blendDst: one_minus_src_alpha + blendDstAlpha: one_minus_src_alpha + properties: *props + - *planar-shadow + - name: add + passes: + - vert: unlit-vs + frag: unlit-fs + rasterizerState: &r1 { cullMode: none } + depthStencilState: *d1 + blendState: + targets: + - blend: true + blendSrc: src_alpha + blendDst: one + blendSrcAlpha: src_alpha + blendDstAlpha: one + properties: *props + - name: alpha-blend + passes: + - vert: unlit-vs + frag: unlit-fs + rasterizerState: *r1 + depthStencilState: *d1 + blendState: + targets: + - blend: true + blendSrc: src_alpha + blendDst: one_minus_src_alpha + blendSrcAlpha: src_alpha + blendDstAlpha: one_minus_src_alpha + properties: *props +}% + +{{chunks}} + + +CCProgram shared-ubos %{ + uniform ShaderGraph_Properties { + {{properties}} + }; + + {{properties_sampler}} +}% + +CCProgram macro-remapping %{ + #if __VERSION__ < 300 + #ifdef GL_OES_standard_derivatives + #define CC_USE_derivatives 1 + #else + #define CC_USE_derivatives 0 + #endif + #else + #define CC_USE_derivatives 1 + #endif + +{{defines}} +}% + + +CCProgram surface-vertex %{ + #if CC_POSITION_LOCAL + out vec3 v_locPos; + #endif + + #if CC_NORMAL_LOCAL + out vec3 v_locNormal; + #endif + + {{vs_chunks}} + + #define CC_SURFACES_VERTEX_MODIFY_LOCAL_SHARED_DATA + void SurfacesVertexModifyLocalSharedData(inout SurfacesStandardVertexIntermediate In) + { + vec3 position = In.position.xyz; + vec3 normal = In.normal.xyz; + + #if CC_SURFACES_USE_TANGENT_SPACE + vec4 tangent = In.tangent; + #endif + + #if CC_POSITION_WORLD || CC_POSITION_VIEW || CC_NORMAL_WORLD || CC_NORMAL_VIEW + mat4 matWorld, matWorldIT; + CCGetWorldMatrixFull(matWorld, matWorldIT); + #endif + + #if CC_POSITION_WORLD || CC_POSITION_VIEW + vec3 worldPos = (matWorld * In.position).xyz; + #endif + + #if CC_POSITION_VIEW + vec3 viewPos = (cc_matView * vec4(worldPos, 1.)).xyz; + #endif + + #if CC_NORMAL_WORLD || CC_NORMAL_VIEW + vec3 worldNormal = normalize((matWorldIT * vec4(In.normal.xyz, 0.0)).xyz); + #endif + + #if CC_NORMAL_VIEW + vec3 viewNormal = cc_matView * vec4(worldNormal, 0.0); + #endif + + {{code_chunk_0}} + + In.position.xyz = {{slot_Vertex_Position = position}}.xyz; + In.normal = {{slot_Vertex_Normal = normal}}.xyz; + + #if CC_SURFACES_USE_TANGENT_SPACE + In.tangent = {{slot_Vertex_Tangent = tangent}}; + #endif + + #if CC_POSITION_LOCAL + v_locPos = In.position.xyz; + #endif + + #if CC_NORMAL_LOCAL + v_locNormal = In.normal.xyz; + #endif + } +}% + +CCProgram surface-fragment %{ + precision highp float; + // #include + // #include + + #if CC_POSITION_LOCAL + in vec3 v_locPos; + #endif + + #if CC_NORMAL_LOCAL + in vec3 v_locNormal; + #endif + + {{fs_chunks}} + + #define CC_SURFACES_FRAGMENT_MODIFY_BASECOLOR_AND_TRANSPARENCY + vec4 SurfacesFragmentModifyBaseColorAndTransparency() + { + vec3 worldPos = FSInput_worldPos.xyz; + vec3 worldNormal = FSInput_worldNormal.xyz; + vec3 worldTangent = FSInput_worldTangent.xyz; + // vec3 worldBinormal = surfaceData.worldBinormal; + + #if CC_VIEWDIR_WORLD || CC_VIEWDIR_VIEW || CC_VIEWDIR_LOCAL + vec3 worldView = cc_cameraPos.xyz - worldPos.xyz; + #endif + #if CC_VIEWDIR_VIEW + vec3 viewView = (cc_matView * vec4(worldView, 0.0)).xyz; + #endif + #if CC_VIEWDIR_LOCAL + vec3 view = (matWorldIT * vec4(worldView, 0.0)).xyz; + #endif + + #if CC_POSITION_LOCAL + vec3 position = v_locPos; + #endif + + #if CC_NORMAL_LOCAL + vec3 normal = v_locNormal; + #endif + + #if CC_POSITION_VIEW + vec4 viewPos = cc_matView * vec4(worldPos, 1.); + #endif + + {{code_chunk_3}} + + vec4 baseColor; + baseColor.a = {{slot_Alpha = 1.}}; + + #if USE_ALPHA_TEST + if (baseColor.a <= {{slot_AlphaClipThreshold = 0.}}) { + discard; + } + #endif + + baseColor.rgb = {{slot_BaseColor = vec3(1.)}}.rgb; + + return baseColor; + } +}% + + +CCProgram unlit-vs %{ + precision highp float; + + // 1. surface internal macros, for technique usage or remapping some user (material) macros to surface internal macros + #include + #include + + // 2. common include with corresponding shader stage, include before surface functions + #include + + // 3. user surface functions that can use user (effect) parameters (ubo Constants) + // see surfaces/default-functions/xxx.chunk + #include + #include + + // 4. surface include with corresponding shader stage and shading-model (optional) + #include + + // 5. shader entry with corresponding shader stage and technique usage/type + #include +}% + + +CCProgram shadow-caster-vs %{ + precision highp float; + #include + #include + #include + #include + #include + #include +}% + +CCProgram planar-shadow-vs %{ + precision highp float; + #include + #include + #include + #include + #include + #include +}% + + +CCProgram unlit-fs %{ + #pragma extension([GL_OES_standard_derivatives, __VERSION__ < 300]) + + // shading-model : standard + // lighting-model : standard (isotropy / anisotropy pbr) + // shader stage : fs + // technique usage/type : render-to-scene + + precision highp float; + // 1. surface internal macros, for technique usage or remapping some user (material) macros to surface internal macros + #include + #include + + // 2. common include with corresponding shader stage, include before surface functions + #include + + // 3. user surface functions that can use user (effect) parameters (ubo Constants) + // see surfaces/default-functions/xxx.chunk + #include + #include + + // 4. lighting-model (optional) + #include + + // 5. surface include with corresponding shader stage and shading-model (optional) + #include + + // 6. shader entry with corresponding shader stage and technique usage/type + #include +}% + +CCProgram shadow-caster-fs %{ + #pragma extension([GL_OES_standard_derivatives, __VERSION__ < 300]) + + precision highp float; + #include + #include + #include + #include + #include + #include +}% + +CCProgram planar-shadow-fs %{ + #pragma extension([GL_OES_standard_derivatives, __VERSION__ < 300]) + + precision highp float; + #include + #include + #include + #include + #include + #include +}% + +CCProgram reflect-map-fs %{ + #pragma extension([GL_OES_standard_derivatives, __VERSION__ < 300]) + + precision highp float; + #include + #include + #include + #include + #include + #include + #include + #include +}% diff --git a/extensions/shader-graph/shader-node/test b/extensions/shader-graph/shader-node/test new file mode 100644 index 0000000..220f856 --- /dev/null +++ b/extensions/shader-graph/shader-node/test @@ -0,0 +1,846 @@ +#version 300 es +#define CC_DEVICE_SUPPORT_FLOAT_TEXTURE 1 +#define CC_ENABLE_CLUSTERED_LIGHT_CULLING 0 +#define CC_DEVICE_MAX_VERTEX_UNIFORM_VECTORS 4095 +#define CC_DEVICE_MAX_FRAGMENT_UNIFORM_VECTORS 1024 +#define CC_DEVICE_CAN_BENEFIT_FROM_INPUT_ATTACHMENT 0 +#define CC_PLATFORM_ANDROID_AND_WEBGL 0 +#define CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES 0 +#define CC_JOINT_UNIFORM_CAPACITY 256 +#define CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS 97 +#define CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS 127 +#define HAS_SECOND_UV 0 +#define USE_TWOSIDE 0 +#define IS_ANISOTROPY 0 +#define USE_VERTEX_COLOR 0 +#define FIX_ANISOTROPIC_ROTATION_MAP 0 +#define USE_NORMAL_MAP 0 +#define USE_INSTANCING 0 +#define CC_USE_LIGHTMAP 0 +#define CC_USE_SKINNING 0 +#define CC_USE_BAKED_ANIMATION 0 +#define CC_RECEIVE_SHADOW 1 +#define CC_USE_REFLECTION_PROBE 0 +#define CC_USE_LIGHT_PROBE 0 +#define CC_USE_MORPH 0 +#define CC_FORWARD_ADD 0 +#define CC_USE_FOG 4 +#define CC_USE_ACCURATE_FOG 0 +#define CC_USE_GPU_DRIVEN 0 +#define CC_MORPH_TARGET_COUNT 2 +#define CC_MORPH_TARGET_HAS_POSITION 0 +#define CC_MORPH_TARGET_HAS_NORMAL 0 +#define CC_MORPH_TARGET_HAS_TANGENT 0 +#define CC_MORPH_PRECOMPUTED 0 +#define CC_USE_REAL_TIME_JOINT_TEXTURE 0 +#define CC_DISABLE_STRUCTURE_IN_FRAGMENT_SHADER 0 +#define CC_PIPELINE_TYPE 0 +#define CC_FORCE_FORWARD_SHADING 0 +#define CC_ENABLE_CLUSTERED_LIGHT_CULLING 0 +#define CC_SUPPORT_CASCADED_SHADOW_MAP 1 +#define CC_USE_IBL 0 +#define CC_USE_DIFFUSEMAP 0 +#define USE_ALBEDO_MAP 0 +#define ALBEDO_UV v_uv +#define NORMAL_UV v_uv +#define DEFAULT_UV v_uv +#define USE_PBR_MAP 0 +#define USE_OCCLUSION_MAP 0 +#define USE_EMISSIVE_MAP 0 +#define EMISSIVE_UV v_uv +#define USE_ANISOTROPY_MAP 0 +#define USE_ALPHA_TEST 0 +#define ALPHA_TEST_CHANNEL a +#define CC_SHADOWMAP_USE_LINEAR_DEPTH 0 +#define CC_SHADOWMAP_FORMAT 0 + +precision highp float; +#define CC_SURFACES_USE_SECOND_UV HAS_SECOND_UV +#define CC_SURFACES_USE_TWO_SIDED USE_TWOSIDE +#define CC_SURFACES_LIGHTING_ANISOTROPIC IS_ANISOTROPY +#define CC_SURFACES_USE_VERTEX_COLOR USE_VERTEX_COLOR +#if IS_ANISOTROPY || USE_NORMAL_MAP + #define CC_SURFACES_USE_TANGENT_SPACE 1 +#endif +#define CC_SURFACES_LIGHTING_ANISOTROPIC_ENVCONVOLUTION_COUNT 31 +#ifndef CC_SURFACES_USE_SECOND_UV + #define CC_SURFACES_USE_SECOND_UV 0 +#endif +#ifndef CC_SURFACES_USE_TANGENT_SPACE + #define CC_SURFACES_USE_TANGENT_SPACE 0 +#endif +#ifndef CC_SURFACES_USE_VERTEX_COLOR + #define CC_SURFACES_USE_VERTEX_COLOR 0 +#endif +#ifndef CC_SURFACES_TRANSFER_LOCAL_POS + #define CC_SURFACES_TRANSFER_LOCAL_POS 0 +#endif +#ifndef CC_SURFACES_TRANSFER_CLIP_POS + #define CC_SURFACES_TRANSFER_CLIP_POS 0 +#endif +#ifndef CC_SURFACES_USE_LIGHT_MAP + #ifdef CC_USE_LIGHTMAP + #define CC_SURFACES_USE_LIGHT_MAP CC_USE_LIGHTMAP + #else + #define CC_SURFACES_USE_LIGHT_MAP 0 + #endif +#endif +#ifndef CC_SURFACES_FLIP_UV + #define CC_SURFACES_FLIP_UV 0 +#endif +#ifndef CC_SURFACES_USE_TWO_SIDED + #define CC_SURFACES_USE_TWO_SIDED 0 +#endif +#ifndef CC_SURFACES_USE_REFLECTION_DENOISE + #define CC_SURFACES_USE_REFLECTION_DENOISE 0 +#endif +#ifndef CC_SURFACES_LIGHTING_ANISOTROPIC + #define CC_SURFACES_LIGHTING_ANISOTROPIC 0 +#endif +#ifndef CC_SURFACES_LIGHTING_ANISOTROPIC_ENVCONVOLUTION_COUNT + #define CC_SURFACES_LIGHTING_ANISOTROPIC_ENVCONVOLUTION_COUNT 0 +#endif +#ifndef CC_SURFACES_USE_LEGACY_COMPATIBLE_LIGHTING + #define CC_SURFACES_USE_LEGACY_COMPATIBLE_LIGHTING 0 +#endif +#ifndef CC_SURFACES_LIGHTING_USE_FRESNEL + #define CC_SURFACES_LIGHTING_USE_FRESNEL 0 +#endif +#ifndef CC_SURFACES_LIGHTING_TRANSMIT_SPECULAR + #define CC_SURFACES_LIGHTING_TRANSMIT_SPECULAR 0 +#endif +#ifndef CC_SURFACES_LIGHTING_TRANSMIT_DIFFUSE + #define CC_SURFACES_LIGHTING_TRANSMIT_DIFFUSE 0 +#endif +#ifndef CC_SURFACES_LIGHTING_USE_SHADOWMAP_TRANSMIT + #define CC_SURFACES_LIGHTING_USE_SHADOWMAP_TRANSMIT 0 +#endif +#ifndef CC_SURFACES_LIGHTING_TRT + #define CC_SURFACES_LIGHTING_TRT 0 +#endif +#ifndef CC_SURFACES_LIGHTING_DUAL_LOBE_SPECULAR + #define CC_SURFACES_LIGHTING_DUAL_LOBE_SPECULAR 0 +#endif +#ifndef CC_SURFACES_LIGHTING_CLEAR_COAT + #define CC_SURFACES_LIGHTING_CLEAR_COAT 0 +#endif +#ifndef CC_SURFACES_LIGHTING_TT + #define CC_SURFACES_LIGHTING_TT 0 +#endif +#ifndef CC_SURFACES_LIGHTING_SSS + #define CC_SURFACES_LIGHTING_SSS 0 +#endif +#ifndef CC_SURFACES_LIGHTING_2ND_LAYER_SPECULAR + #if CC_SURFACES_LIGHTING_TRT || CC_SURFACES_LIGHTING_DUAL_LOBE_SPECULAR || CC_SURFACES_LIGHTING_CLEAR_COAT + #define CC_SURFACES_LIGHTING_2ND_LAYER_SPECULAR 1 + #endif +#endif +#ifndef CC_SURFACES_LIGHTING_2ND_LAYER_SPECULAR + #define CC_SURFACES_LIGHTING_2ND_LAYER_SPECULAR 0 +#endif +#ifndef CC_SURFACES_LIGHTING_USE_MULTIPLE_LAYER_BLEND + #if CC_SURFACES_LIGHTING_CLEAR_COAT + #define CC_SURFACES_LIGHTING_USE_MULTIPLE_LAYER_BLEND 1 + #endif +#endif +#ifndef CC_SURFACES_LIGHTING_USE_MULTIPLE_LAYER_BLEND + #define CC_SURFACES_LIGHTING_USE_MULTIPLE_LAYER_BLEND 0 +#endif +#ifndef CC_SURFACES_ENABLE_DEBUG_VIEW + #define CC_SURFACES_ENABLE_DEBUG_VIEW 1 +#endif +#define CC_USE_SURFACE_SHADER 1 +in vec3 a_position; +in vec3 a_normal; +in vec2 a_texCoord; +#if CC_SURFACES_USE_TANGENT_SPACE + in vec4 a_tangent; +#endif +#if CC_SURFACES_USE_VERTEX_COLOR + in vec4 a_color; +#endif +#if CC_SURFACES_USE_SECOND_UV || CC_USE_LIGHTMAP + in vec2 a_texCoord1; +#endif +#if CC_USE_SKINNING + in vec4 a_joints; + in vec4 a_weights; +#endif +#if USE_INSTANCING + #if CC_USE_BAKED_ANIMATION + in highp vec4 a_jointAnimInfo; + #endif + in vec4 a_matWorld0; + in vec4 a_matWorld1; + in vec4 a_matWorld2; + #if CC_USE_LIGHTMAP + in vec4 a_lightingMapUVParam; + #endif + #if CC_RECEIVE_SHADOW || CC_USE_REFLECTION_PROBE + in vec4 a_localShadowBiasAndProbeId; + #endif + #if CC_USE_REFLECTION_PROBE + in vec4 a_reflectionProbeData; + #endif + #if CC_USE_LIGHT_PROBE + in vec4 a_sh_linear_const_r; + in vec4 a_sh_linear_const_g; + in vec4 a_sh_linear_const_b; + #endif +#endif +#if CC_USE_MORPH + in float a_vertexId; +#endif +#define QUATER_PI 0.78539816340 +#define HALF_PI 1.57079632679 +#define PI 3.14159265359 +#define PI2 6.28318530718 +#define PI4 12.5663706144 +#define INV_QUATER_PI 1.27323954474 +#define INV_HALF_PI 0.63661977237 +#define INV_PI 0.31830988618 +#define INV_PI2 0.15915494309 +#define INV_PI4 0.07957747155 +#define EPSILON 1e-6 +#define EPSILON_LOWP 1e-4 +#define LOG2 1.442695 +#define EXP_VALUE 2.71828183 +#define FP_MAX 65504.0 +#define FP_SCALE 0.0009765625 +#define FP_SCALE_INV 1024.0 +#define GRAY_VECTOR vec3(0.299, 0.587, 0.114) +#define LIGHT_MAP_TYPE_DISABLED 0 +#define LIGHT_MAP_TYPE_ALL_IN_ONE 1 +#define LIGHT_MAP_TYPE_INDIRECT_OCCLUSION 2 +#define REFLECTION_PROBE_TYPE_NONE 0 +#define REFLECTION_PROBE_TYPE_CUBE 1 +#define REFLECTION_PROBE_TYPE_PLANAR 2 +#define REFLECTION_PROBE_TYPE_BLEND 3 +#define REFLECTION_PROBE_TYPE_BLEND_AND_SKYBOX 4 +#define LIGHT_TYPE_DIRECTIONAL 0.0 +#define LIGHT_TYPE_SPHERE 1.0 +#define LIGHT_TYPE_SPOT 2.0 +#define LIGHT_TYPE_POINT 3.0 +#define LIGHT_TYPE_RANGED_DIRECTIONAL 4.0 +#define IS_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_DIRECTIONAL)) < EPSILON_LOWP) +#define IS_SPHERE_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPHERE)) < EPSILON_LOWP) +#define IS_SPOT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPOT)) < EPSILON_LOWP) +#define IS_POINT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_POINT)) < EPSILON_LOWP) +#define IS_RANGED_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_RANGED_DIRECTIONAL)) < EPSILON_LOWP) +#define TONE_MAPPING_ACES 0 +#define TONE_MAPPING_LINEAR 1 +#define SURFACES_MAX_TRANSMIT_DEPTH_VALUE 999999.0 +#ifndef CC_SURFACES_DEBUG_VIEW_SINGLE + #define CC_SURFACES_DEBUG_VIEW_SINGLE 1 +#endif +#ifndef CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC + #define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2 +#endif +out highp vec3 v_worldPos; +out vec4 v_normal; +out vec2 v_uv; +#if CC_SURFACES_USE_VERTEX_COLOR + out lowp vec4 v_color; +#endif +#if CC_SURFACES_USE_TANGENT_SPACE + out mediump vec4 v_tangent; +#endif +#if CC_SURFACES_USE_SECOND_UV + out mediump vec2 v_uv1; +#endif +#if CC_USE_LIGHTMAP && !CC_FORWARD_ADD + out mediump vec3 v_luv; +#endif +#if CC_RECEIVE_SHADOW || CC_USE_REFLECTION_PROBE + out mediump vec4 v_shadowBiasAndProbeId; +#endif +#if CC_USE_REFLECTION_PROBE && USE_INSTANCING + out mediump vec4 v_reflectionProbeData; +#endif +#if CC_USE_FOG ! = 4 && !CC_USE_ACCURATE_FOG + out mediump float v_fogFactor; +#endif +#if CC_SURFACES_TRANSFER_LOCAL_POS + out highp vec4 v_localPos; +#endif +#if CC_SURFACES_TRANSFER_CLIP_POS + out highp vec4 v_clipPos; +#endif +#if CC_USE_LIGHT_PROBE + #if USE_INSTANCING + out mediump vec4 v_sh_linear_const_r; + out mediump vec4 v_sh_linear_const_g; + out mediump vec4 v_sh_linear_const_b; + #endif +#endif +#define VSOutput_worldPos v_worldPos +#define VSOutput_worldNormal v_normal.xyz +#define VSOutput_faceSideSign v_normal.w +#define VSOutput_texcoord v_uv +#if CC_SURFACES_USE_VERTEX_COLOR + #define VSOutput_vertexColor v_color +#endif +#if CC_SURFACES_USE_TANGENT_SPACE + #define VSOutput_worldTangent v_tangent.xyz + #define VSOutput_mirrorNormal v_tangent.w +#endif +#if CC_SURFACES_USE_SECOND_UV + #define VSOutput_texcoord1 v_uv1 +#endif +#if CC_USE_LIGHTMAP && !CC_FORWARD_ADD + #define VSOutput_lightMapUV v_luv +#endif +#if CC_RECEIVE_SHADOW + #define VSOutput_shadowBias v_shadowBiasAndProbeId.xy +#endif +#if CC_USE_REFLECTION_PROBE + #define VSOutput_reflectionProbeId v_shadowBiasAndProbeId.z + #if CC_USE_REFLECTION_PROBE == REFLECTION_PROBE_TYPE_BLEND || CC_USE_REFLECTION_PROBE == REFLECTION_PROBE_TYPE_BLEND_AND_SKYBOX + #define VSOutput_reflectionProbeBlendId v_shadowBiasAndProbeId.w + #endif + #if USE_INSTANCING + #define VSOutput_reflectionProbeData v_reflectionProbeData + #endif +#endif +#if CC_USE_FOG ! = 4 && !CC_USE_ACCURATE_FOG + #define VSOutput_fogFactor v_fogFactor +#endif +#if CC_SURFACES_TRANSFER_LOCAL_POS + #define VSOutput_localPos v_localPos +#endif +#if CC_SURFACES_TRANSFER_CLIP_POS + #define VSOutput_clipPos v_clipPos +#endif +struct SurfacesStandardVertexIntermediate { + highp vec4 position; + vec3 normal; + #if CC_SURFACES_USE_TANGENT_SPACE + vec4 tangent; + #endif + #if CC_SURFACES_USE_VERTEX_COLOR + vec4 color; + #endif + vec2 texCoord; + #if CC_SURFACES_USE_SECOND_UV + vec2 texCoord1; + #endif + highp vec4 clipPos; + highp vec3 worldPos; + vec4 worldNormal; + #if CC_SURFACES_USE_TANGENT_SPACE + vec3 worldTangent, worldBinormal; + #endif + #if CC_RECEIVE_SHADOW || CC_USE_REFLECTION_PROBE + vec4 shadowBiasAndProbeId; + #endif + #if CC_USE_FOG ! = 4 && !CC_USE_ACCURATE_FOG + float fogFactor; + #endif + #if CC_USE_LIGHTMAP && !CC_FORWARD_ADD + vec3 lightmapUV; + #endif +}; +#if CC_USE_MORPH + int getVertexId() { + return int(a_vertexId); + } +#endif +layout(std140) uniform CCGlobal { + highp vec4 cc_time; + mediump vec4 cc_screenSize; + mediump vec4 cc_nativeSize; + mediump vec4 cc_probeInfo; + mediump vec4 cc_debug_view_mode; +}; +layout(std140) uniform CCCamera { + highp mat4 cc_matView; + highp mat4 cc_matViewInv; + highp mat4 cc_matProj; + highp mat4 cc_matProjInv; + highp mat4 cc_matViewProj; + highp mat4 cc_matViewProjInv; + highp vec4 cc_cameraPos; + mediump vec4 cc_surfaceTransform; + mediump vec4 cc_screenScale; + mediump vec4 cc_exposure; + mediump vec4 cc_mainLitDir; + mediump vec4 cc_mainLitColor; + mediump vec4 cc_ambientSky; + mediump vec4 cc_ambientGround; + mediump vec4 cc_fogColor; + mediump vec4 cc_fogBase; + mediump vec4 cc_fogAdd; + mediump vec4 cc_nearFar; + mediump vec4 cc_viewPort; +}; +layout(std140) uniform CCShadow { + highp mat4 cc_matLightView; + highp mat4 cc_matLightViewProj; + highp vec4 cc_shadowInvProjDepthInfo; + highp vec4 cc_shadowProjDepthInfo; + highp vec4 cc_shadowProjInfo; + mediump vec4 cc_shadowNFLSInfo; + mediump vec4 cc_shadowWHPBInfo; + mediump vec4 cc_shadowLPNNInfo; + lowp vec4 cc_shadowColor; + mediump vec4 cc_planarNDInfo; +}; +highp float decode32 (highp vec4 rgba) { + rgba = rgba * 255.0; + highp float Sign = 1.0 - (step(128.0, (rgba[3]) + 0.5)) * 2.0; + highp float Exponent = 2.0 * (mod(float(int((rgba[3]) + 0.5)), 128.0)) + (step(128.0, (rgba[2]) + 0.5)) - 127.0; + highp float Mantissa = (mod(float(int((rgba[2]) + 0.5)), 128.0)) * 65536.0 + rgba[1] * 256.0 + rgba[0] + 8388608.0; + return Sign * exp2(Exponent - 23.0) * Mantissa; +} +#if !USE_INSTANCING + #if !CC_USE_GPU_DRIVEN + layout(std140) uniform CCLocal { + highp mat4 cc_matWorld; + highp mat4 cc_matWorldIT; + highp vec4 cc_lightingMapUVParam; + highp vec4 cc_localShadowBias; + highp vec4 cc_reflectionProbeData1; + highp vec4 cc_reflectionProbeData2; + highp vec4 cc_reflectionProbeBlendData1; + highp vec4 cc_reflectionProbeBlendData2; + }; + #endif +#endif +#if CC_USE_GPU_DRIVEN + struct ObjectData { + mat4 matWorld; + mat4 matWorldIT; + vec4 center; + vec4 halfExtents; + vec4 lightingMapUVParam; + vec4 localShadowBias; + }; + struct InstanceData { + uint objectId; + uint batchId; + }; + layout(std430) readonly buffer cc_objectBuffer { + ObjectData cc_objects[]; + }; + layout(std430) readonly buffer cc_instanceBuffer { + InstanceData cc_instances[]; + }; +#endif +#if CC_USE_GPU_DRIVEN + #ifdef VULKAN + #define cc_InstanceIndex gl_InstanceIndex + #else + #define cc_InstanceIndex gl_InstanceID + #endif + mat4 CCGetWorld() { + uint objectId = cc_instances[cc_InstanceIndex].objectId; + return cc_objects[objectId].matWorld; + } + mat4 CCGetWorldIT() { + uint objectId = cc_instances[cc_InstanceIndex].objectId; + return cc_objects[objectId].matWorldIT; + } +#endif +void CCGetWorldMatrixFull(out mat4 matWorld, out mat4 matWorldIT) { + #if CC_USE_GPU_DRIVEN + matWorld = CCGetWorld(); + matWorldIT = CCGetWorldIT(); + #elif USE_INSTANCING + matWorld = mat4( + vec4(a_matWorld0.xyz, 0.0), vec4(a_matWorld1.xyz, 0.0), vec4(a_matWorld2.xyz, 0.0), vec4(a_matWorld0.w, a_matWorld1.w, a_matWorld2.w, 1.0) + ); + vec3 scale = 1.0 / vec3(length(a_matWorld0.xyz), length(a_matWorld1.xyz), length(a_matWorld2.xyz)); + vec3 scale2 = scale * scale; + matWorldIT = mat4( + vec4(a_matWorld0.xyz * scale2.x, 0.0), vec4(a_matWorld1.xyz * scale2.y, 0.0), vec4(a_matWorld2.xyz * scale2.z, 0.0), vec4(0.0, 0.0, 0.0, 1.0) + ); + #else + matWorld = cc_matWorld; + matWorldIT = cc_matWorldIT; + #endif +} +#if CC_USE_MORPH + layout(std140) uniform CCMorph { + vec4 cc_displacementWeights[15]; + vec4 cc_displacementTextureInfo; + }; + #if CC_MORPH_TARGET_HAS_POSITION + uniform sampler2D cc_PositionDisplacements; + #endif + #if CC_MORPH_TARGET_HAS_NORMAL + uniform sampler2D cc_NormalDisplacements; + #endif + #if CC_MORPH_TARGET_HAS_TANGENT + uniform sampler2D cc_TangentDisplacements; + #endif + vec2 getPixelLocation(vec2 textureResolution, int pixelIndex) { + float pixelIndexF = float(pixelIndex); + float x = mod(pixelIndexF, textureResolution.x); + float y = floor(pixelIndexF / textureResolution.x); + return vec2(x, y); + } + vec2 getPixelCoordFromLocation(vec2 location, vec2 textureResolution) { + return (vec2(location.x, location.y) + .5) / textureResolution; + } + #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE + vec4 fetchVec3ArrayFromTexture(sampler2D tex, int pixelIndex) { + ivec2 texSize = textureSize(tex, 0); + return texelFetch(tex, ivec2(pixelIndex % texSize.x, pixelIndex / texSize.x), 0); + } + #else + vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) { + int pixelIndex = elementIndex * 4; + vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex); + vec2 x = getPixelCoordFromLocation(location + vec2(0.0, 0.0), cc_displacementTextureInfo.xy); + vec2 y = getPixelCoordFromLocation(location + vec2(1.0, 0.0), cc_displacementTextureInfo.xy); + vec2 z = getPixelCoordFromLocation(location + vec2(2.0, 0.0), cc_displacementTextureInfo.xy); + return vec4( + decode32(texture(tex, x)), decode32(texture(tex, y)), decode32(texture(tex, z)), 1.0 + ); + } + #endif + float getDisplacementWeight(int index) { + int quot = index / 4; + int remainder = index - quot * 4; + if (remainder == 0) { + return cc_displacementWeights[quot].x; + } + else if (remainder == 1) { + return cc_displacementWeights[quot].y; + } + else if (remainder == 2) { + return cc_displacementWeights[quot].z; + } + else { + return cc_displacementWeights[quot].w; + } + + } + vec3 getVec3DisplacementFromTexture(sampler2D tex, int vertexIndex) { + #if CC_MORPH_PRECOMPUTED + return fetchVec3ArrayFromTexture(tex, vertexIndex).rgb; + #else + vec3 result = vec3(0, 0, 0); + int nVertices = int(cc_displacementTextureInfo.z); + for (int iTarget = 0; iTarget < CC_MORPH_TARGET_COUNT; ++iTarget) { + result += (fetchVec3ArrayFromTexture(tex, nVertices * iTarget + vertexIndex).rgb * getDisplacementWeight(iTarget)); + } + return result; + #endif + } + #if CC_MORPH_TARGET_HAS_POSITION + vec3 getPositionDisplacement(int vertexId) { + return getVec3DisplacementFromTexture(cc_PositionDisplacements, vertexId); + } + #endif + #if CC_MORPH_TARGET_HAS_NORMAL + vec3 getNormalDisplacement(int vertexId) { + return getVec3DisplacementFromTexture(cc_NormalDisplacements, vertexId); + } + #endif + #if CC_MORPH_TARGET_HAS_TANGENT + vec3 getTangentDisplacement(int vertexId) { + return getVec3DisplacementFromTexture(cc_TangentDisplacements, vertexId); + } + #endif + void applyMorph (inout vec4 position, inout vec3 normal, inout vec4 tangent) { + int vertexId = getVertexId(); + #if CC_MORPH_TARGET_HAS_POSITION + position.xyz = position.xyz + getPositionDisplacement(vertexId); + #endif + #if CC_MORPH_TARGET_HAS_NORMAL + normal.xyz = normal.xyz + getNormalDisplacement(vertexId); + #endif + #if CC_MORPH_TARGET_HAS_TANGENT + tangent.xyz = tangent.xyz + getTangentDisplacement(vertexId); + #endif + } + void applyMorph (inout vec4 position) { + #if CC_MORPH_TARGET_HAS_POSITION + position.xyz = position.xyz + getPositionDisplacement(getVertexId()); + #endif + } +#endif +#if CC_USE_SKINNING + #if CC_USE_BAKED_ANIMATION + layout(std140) uniform CCSkinningTexture { + highp vec4 cc_jointTextureInfo; + }; + layout(std140) uniform CCSkinningAnimation { + highp vec4 cc_jointAnimInfo; + }; + uniform highp sampler2D cc_jointTexture; + void CCGetJointTextureCoords(float pixelsPerJoint, float jointIdx, out highp float x, out highp float y, out highp float invSize) { + #if USE_INSTANCING + highp float temp = pixelsPerJoint * (a_jointAnimInfo.x * a_jointAnimInfo.y + jointIdx) + a_jointAnimInfo.z; + #else + highp float temp = pixelsPerJoint * (cc_jointAnimInfo.x * cc_jointTextureInfo.y + jointIdx) + cc_jointTextureInfo.z; + #endif + invSize = cc_jointTextureInfo.w; + highp float tempY = floor(temp * invSize); + x = floor(temp - tempY * cc_jointTextureInfo.x); + y = (tempY + 0.5) * invSize; + } + #else + #if CC_USE_REAL_TIME_JOINT_TEXTURE + uniform highp sampler2D cc_realtimeJoint; + #else + layout(std140) uniform CCSkinning { + highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3]; + }; + #endif + #endif + #if CC_USE_BAKED_ANIMATION + #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE + mat4 getJointMatrix (float i) { + highp float x, y, invSize; + CCGetJointTextureCoords(3.0, i, x, y, invSize); + vec4 v1 = texture(cc_jointTexture, vec2((x + 0.5) * invSize, y)); + vec4 v2 = texture(cc_jointTexture, vec2((x + 1.5) * invSize, y)); + vec4 v3 = texture(cc_jointTexture, vec2((x + 2.5) * invSize, y)); + return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0)); + } + #else + mat4 getJointMatrix (float i) { + highp float x, y, invSize; + CCGetJointTextureCoords(12.0, i, x, y, invSize); + vec4 v1 = vec4( + decode32(texture(cc_jointTexture, vec2((x + 0.5) * invSize, y))), decode32(texture(cc_jointTexture, vec2((x + 1.5) * invSize, y))), decode32(texture(cc_jointTexture, vec2((x + 2.5) * invSize, y))), decode32(texture(cc_jointTexture, vec2((x + 3.5) * invSize, y))) + ); + vec4 v2 = vec4( + decode32(texture(cc_jointTexture, vec2((x + 4.5) * invSize, y))), decode32(texture(cc_jointTexture, vec2((x + 5.5) * invSize, y))), decode32(texture(cc_jointTexture, vec2((x + 6.5) * invSize, y))), decode32(texture(cc_jointTexture, vec2((x + 7.5) * invSize, y))) + ); + vec4 v3 = vec4( + decode32(texture(cc_jointTexture, vec2((x + 8.5) * invSize, y))), decode32(texture(cc_jointTexture, vec2((x + 9.5) * invSize, y))), decode32(texture(cc_jointTexture, vec2((x + 10.5) * invSize, y))), decode32(texture(cc_jointTexture, vec2((x + 11.5) * invSize, y))) + ); + return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0)); + } + #endif + #else + #if CC_USE_REAL_TIME_JOINT_TEXTURE + #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE + mat4 getJointMatrix (float i) { + float x = i; + vec4 v1 = texture(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0)); + vec4 v2 = texture(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0)); + vec4 v3 = texture(cc_realtimeJoint, vec2( x / 256.0, 2.5 / 3.0)); + return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0)); + } + #else + mat4 getJointMatrix (float i) { + float x = 4.0 * i; + vec4 v1 = vec4( + decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))), decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))), decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))), decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0))) + ); + vec4 v2 = vec4( + decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))), decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))), decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))), decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0))) + ); + vec4 v3 = vec4( + decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))), decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))), decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))), decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 2.5 / 3.0))) + ); + return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0)); + } + #endif + #else + mat4 getJointMatrix (float i) { + int idx = int(i); + vec4 v1 = cc_joints[idx * 3]; + vec4 v2 = cc_joints[idx * 3 + 1]; + vec4 v3 = cc_joints[idx * 3 + 2]; + return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0)); + } + #endif + #endif + mat4 skinMatrix () { + vec4 joints = vec4(a_joints); + return getJointMatrix(joints.x) * a_weights.x + + getJointMatrix(joints.y) * a_weights.y + + getJointMatrix(joints.z) * a_weights.z + + getJointMatrix(joints.w) * a_weights.w; + } + void CCSkin (inout vec4 position) { + mat4 m = skinMatrix(); + position = m * position; + } + void CCSkin (inout vec4 position, inout vec3 normal, inout vec4 tangent) { + mat4 m = skinMatrix(); + position = m * position; + normal = (m * vec4(normal, 0.0)).xyz; + tangent.xyz = (m * vec4(tangent.xyz, 0.0)).xyz; + } +#endif +#if CC_USE_FOG ! = 4 && !CC_USE_ACCURATE_FOG + #if CC_USE_FOG ! = 4 + #endif +#endif +layout(std140) uniform Constants { + vec4 tilingOffset; + vec4 albedo; + vec4 albedoScaleAndCutoff; + vec4 pbrParams; + vec4 emissive; + vec4 emissiveScaleParam; + vec4 anisotropyParam; +}; +#define CC_SURFACES_VERTEX_MODIFY_SHADOW_BIAS +#define CC_SURFACES_VERTEX_MODIFY_UV +void SurfacesVertexModifyUV(inout SurfacesStandardVertexIntermediate In) { + In.texCoord = In.texCoord * tilingOffset.xy + tilingOffset.zw; + #if CC_SURFACES_USE_SECOND_UV + In.texCoord1 = In.texCoord1 * tilingOffset.xy + tilingOffset.zw; + #endif +} +#ifndef CC_SURFACES_VERTEX_MODIFY_LOCAL_POS + vec3 SurfacesVertexModifyLocalPos(in SurfacesStandardVertexIntermediate In) { + return vec3(In.position.xyz); + } +#endif +#ifndef CC_SURFACES_VERTEX_MODIFY_LOCAL_NORMAL +#endif +#ifndef CC_SURFACES_VERTEX_MODIFY_LOCAL_TANGENT + #if CC_SURFACES_USE_TANGENT_SPACE + #endif +#endif +#ifndef CC_SURFACES_VERTEX_MODIFY_LOCAL_SHARED_DATA + void SurfacesVertexModifyLocalSharedData(inout SurfacesStandardVertexIntermediate In) { + + } +#endif +#ifndef CC_SURFACES_VERTEX_MODIFY_WORLD_POS + vec3 SurfacesVertexModifyWorldPos(in SurfacesStandardVertexIntermediate In) { + return In.worldPos; + } +#endif +#ifndef CC_SURFACES_VERTEX_MODIFY_CLIP_POS + vec4 SurfacesVertexModifyClipPos(in SurfacesStandardVertexIntermediate In) { + return In.clipPos; + } +#endif +#ifndef CC_SURFACES_VERTEX_MODIFY_UV + void SurfacesVertexModifyUV(inout SurfacesStandardVertexIntermediate In) { + + } +#endif +#ifndef CC_SURFACES_VERTEX_MODIFY_WORLD_NORMAL +#endif +#ifndef CC_SURFACES_VERTEX_MODIFY_SHADOW_BIAS +#endif +#ifndef CC_SURFACES_VERTEX_MODIFY_SHARED_DATA + void SurfacesVertexModifySharedData(inout SurfacesStandardVertexIntermediate In) { + + } +#endif +void CCSurfacesVertexInput(out SurfacesStandardVertexIntermediate In) { + In.position = vec4(a_position, 1.0); + In.normal = a_normal; + #if CC_SURFACES_USE_TANGENT_SPACE + In.tangent = a_tangent; + #endif + #if CC_SURFACES_USE_VERTEX_COLOR + In.color = a_color; + #endif + In.texCoord = a_texCoord; + #if CC_SURFACES_USE_SECOND_UV + In.texCoord1 = a_texCoord1; + #endif +} +void CCSurfacesVertexOutput(in SurfacesStandardVertexIntermediate In) { + gl_Position = In.clipPos; + VSOutput_worldNormal = In.worldNormal.xyz; + VSOutput_faceSideSign = In.worldNormal.w; + VSOutput_worldPos = In.worldPos; + #if CC_SURFACES_USE_TANGENT_SPACE + VSOutput_worldTangent = In.worldTangent.xyz; + VSOutput_mirrorNormal = In.tangent.w > 0.0 ? 1.0 : -1.0; + #endif + #if CC_SURFACES_USE_VERTEX_COLOR + VSOutput_vertexColor = In.color; + #endif + VSOutput_texcoord = In.texCoord; + #if CC_SURFACES_USE_SECOND_UV + VSOutput_texcoord1 = In.texCoord1; + #endif + #if CC_USE_FOG ! = 4 && !CC_USE_ACCURATE_FOG + VSOutput_fogFactor = In.fogFactor; + #endif + #if CC_RECEIVE_SHADOW + VSOutput_shadowBias = In.shadowBiasAndProbeId.xy; + #endif + #if CC_USE_REFLECTION_PROBE + VSOutput_reflectionProbeId = In.shadowBiasAndProbeId.z; + #if CC_USE_REFLECTION_PROBE == REFLECTION_PROBE_TYPE_BLEND || CC_USE_REFLECTION_PROBE == REFLECTION_PROBE_TYPE_BLEND_AND_SKYBOX + VSOutput_reflectionProbeBlendId = In.shadowBiasAndProbeId.w; + #endif + #if USE_INSTANCING + v_reflectionProbeData = a_reflectionProbeData; + #endif + #endif + #if CC_USE_LIGHTMAP && !CC_FORWARD_ADD + VSOutput_lightMapUV = In.lightmapUV; + #endif + #if CC_SURFACES_TRANSFER_LOCAL_POS + VSOutput_localPos = In.position; + #endif + #if CC_SURFACES_TRANSFER_CLIP_POS + VSOutput_clipPos = In.clipPos; + #endif + #if CC_USE_LIGHT_PROBE + #if USE_INSTANCING + v_sh_linear_const_r = a_sh_linear_const_r; + v_sh_linear_const_g = a_sh_linear_const_g; + v_sh_linear_const_b = a_sh_linear_const_b; + #endif + #endif +} +void CCSurfacesVertexAnimation(inout SurfacesStandardVertexIntermediate In) { + vec4 temp = vec4(0.0); + #if CC_USE_MORPH + #if CC_SURFACES_USE_TANGENT_SPACE + applyMorph(In.position, In.normal, In.tangent); + #else + applyMorph(In.position, In.normal, temp); + #endif + #endif + #if CC_USE_SKINNING + #if CC_SURFACES_USE_TANGENT_SPACE + CCSkin(In.position, In.normal, In.tangent); + #else + CCSkin(In.position, In.normal, temp); + #endif + #endif +} +void CCSurfacesVertexWorldTransform(inout SurfacesStandardVertexIntermediate In) { + mat4 matWorld, matWorldIT; + CCGetWorldMatrixFull(matWorld, matWorldIT); + In.worldPos = (matWorld * In.position).xyz; + In.worldNormal.xyz = normalize((matWorldIT * vec4(In.normal.xyz, 0.0)).xyz); + #if CC_SURFACES_USE_TANGENT_SPACE + In.worldTangent = normalize((matWorld * vec4(In.tangent.xyz, 0.0)).xyz); + In.worldBinormal = cross(In.worldNormal.xyz, In.worldTangent) * In.tangent.w; + #endif +} +void CCSurfacesVertexTransformUV(inout SurfacesStandardVertexIntermediate In) { + #if CC_SURFACES_FLIP_UV + In.texCoord = cc_cameraPos.w > 1.0 ? vec2(In.texCoord.x, 1.0 - In.texCoord.y) : In.texCoord; + #if CC_SURFACES_USE_SECOND_UV + In.texCoord1 = cc_cameraPos.w > 1.0 ? vec2(In.texCoord1.x, 1.0 - In.texCoord1.y) : In.texCoord1; + #endif + #endif +} +out highp vec2 v_clip_depth; +void main() { + SurfacesStandardVertexIntermediate In; + CCSurfacesVertexInput(In); + CCSurfacesVertexAnimation(In); + In.position.xyz = SurfacesVertexModifyLocalPos(In); + SurfacesVertexModifyLocalSharedData(In); + CCSurfacesVertexWorldTransform(In); + In.worldPos = SurfacesVertexModifyWorldPos(In); + In.clipPos = cc_matLightViewProj * vec4(In.worldPos, 1.0); + In.clipPos = SurfacesVertexModifyClipPos(In); + SurfacesVertexModifyUV(In); + SurfacesVertexModifySharedData(In); + CCSurfacesVertexTransformUV(In); + CCSurfacesVertexOutput(In); + v_clip_depth = In.clipPos.zw; +} \ No newline at end of file diff --git a/extensions/shader-graph/static/asset-icon.png b/extensions/shader-graph/static/asset-icon.png new file mode 100644 index 0000000..a1b1c3a Binary files /dev/null and b/extensions/shader-graph/static/asset-icon.png differ diff --git a/extensions/shader-graph/static/icon.png b/extensions/shader-graph/static/icon.png new file mode 100644 index 0000000..997299d Binary files /dev/null and b/extensions/shader-graph/static/icon.png differ diff --git a/extensions/shader-graph/static/shader-graph/create-node.less b/extensions/shader-graph/static/shader-graph/create-node.less new file mode 100644 index 0000000..ec45559 --- /dev/null +++ b/extensions/shader-graph/static/shader-graph/create-node.less @@ -0,0 +1,47 @@ +.create-node { + box-shadow: rgb(63 63 63 / 30%) 0px 0px 10px 2px; + + display: flex; + + .header { + display: flex; + align-items: center; + background-color: #141414; + width: 100%; + height: 25px; + } + + .title-label { + margin-left: 8px; + } + + .close { + position: absolute; + right: 8px; + cursor: pointer; + } + + .section { + height: 100%; + display: flex; + flex-direction: column; + overflow-y: auto; + padding: 4px; + } + + .search-group { + display: flex; + .icon { + margin-left: 4px; + margin-right: 4px; + } + .input { + flex: 1; + margin-right: 4px; + } + } + + .menus { + height: 100%; + } +} diff --git a/extensions/shader-graph/static/shader-graph/float-window.less b/extensions/shader-graph/static/shader-graph/float-window.less new file mode 100644 index 0000000..f4fc9b8 --- /dev/null +++ b/extensions/shader-graph/static/shader-graph/float-window.less @@ -0,0 +1,160 @@ +.float-window { + position: absolute; + pointer-events: auto; + background-color: #2B2B2B; + box-sizing: content-box; + display: flex; + flex-direction: column; + user-select: none; + border-radius: 2px; + + --point-width: 4px; + --point-height: 4px; + --point-position: absolute; + --point-background-color: #fffa00; + --point-cursor-tl: nwse-resize; + --point-cursor-lb: nesw-resize; + + --line-width: 100%; + --line-width-4: 4px; + --line-height: 100%; + --line-height-4: 4px; + --line-position: absolute; + --line-opacity: 0; + --line-background-color: #7882ff; + --line-cursor-lr: ew-resize; + --line-cursor-tb: ns-resize; + + &[hidden] { + display: none; + } + + .header { + display: flex; + align-items: center; + background-color: #141414; + width: 100%; + height: 25px; + + .hide-button { + position: absolute; + right: 5px; + color: #8F8F8F; + cursor: pointer; + } + .hide-button:hover { + color: #cccccc; + } + + .title { + display: flex; + line-height: 25px; + height: 25px; + padding-left: 16px; + padding-right: 16px; + background-color: #2B2B2B; + justify-content: space-between; + color: #cccccc; + } + } + + .top { + width: var(--line-width); + height: var(--line-height-4); + cursor: var(--line-cursor-tb); + position: var(--line-position); + background-color: var(--line-background-color); + opacity: var(--line-opacity); + + top: 0; + } + + .bottom { + width: var(--line-width); + height: var(--line-height-4); + cursor: var(--line-cursor-tb); + position: var(--line-position); + background-color: var(--line-background-color); + opacity: var(--line-opacity); + + bottom: 0; + } + + .left { + width: var(--line-width-4); + height: var(--line-height); + cursor: var(--line-cursor-lr); + position: var(--line-position); + background-color: var(--line-background-color); + opacity: var(--line-opacity); + + left: 0; + } + + .right { + width: var(--line-width-4); + height: var(--line-height); + cursor: var(--line-cursor-lr); + position: var(--line-position); + background-color: var(--line-background-color); + opacity: var(--line-opacity); + + right: 0; + } + + .top-left { + width: var(--point-width); + height: var(--point-height); + cursor: var(--point-cursor-tl); + position: var(--point-position); + background-color: var(--point-background-color); + opacity: var(--line-opacity); + + top: 0; + left: 0; + } + + .top-right { + width: var(--point-width); + height: var(--point-height); + cursor: var(--point-cursor-lb); + position: var(--point-position); + background-color: var(--point-background-color); + opacity: var(--line-opacity); + + top: 0; + right: 0; + } + + .bottom-left { + width: var(--point-width); + height: var(--point-height); + cursor: var(--point-cursor-lb); + position: var(--point-position); + background-color: var(--point-background-color); + opacity: var(--line-opacity); + + bottom: 0; + left: 0; + } + + .bottom-right { + width: var(--point-width); + height: var(--point-height); + cursor: var(--point-cursor-tl); + position: var(--point-position); + background-color: var(--point-background-color); + opacity: var(--line-opacity); + + bottom: 0; + right: 0; + } + + .section { + + } +} + +@import './graph-property.less'; +@import './create-node.less'; +@import './preview.less'; diff --git a/extensions/shader-graph/static/shader-graph/graph-property.less b/extensions/shader-graph/static/shader-graph/graph-property.less new file mode 100644 index 0000000..2d8b2ca --- /dev/null +++ b/extensions/shader-graph/static/shader-graph/graph-property.less @@ -0,0 +1,133 @@ +.graph-property { + + .input { + color: white; + } + + .section { + display: flex; + flex-direction: column; + overflow-y: auto; + padding: 4px; + } + + .property-title { + display: flex; + flex-direction: row; + padding: 2px 0 2px 8px; + + .name { + flex: 1; + font-size: 12px; + color: var(--color-normal-contrast-emphasis); + } + + .add { + cursor: pointer; + padding: 0 6px; + font-size: 12px; + + &:hover { + color: var(--color-primary-contrast-emphasis); + } + } + } + + .property-contents { + overflow-y: auto; + + .item { + display: flex; + padding: 2px; + + .prop { + flex: 1; + --left-width: 150px; + width: ceil(100% - 30px); + .input { + height: 22px; + } + + .label { + border: 1px solid black; + border-radius: 4px; + background-color: black; + width: 100%; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: flex; + + .name { + padding-left: 2px; + text-overflow: ellipsis; + } + + .key { + font-size: 8px; + padding-left: 2px; + } + + &:hover { + border-color: var(--color-focus-fill-emphasis); + } + } + + .content { + display: flex; + + ui-prop { + flex: 1; + } + } + } + + .delete { + width: 20px; + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + + .icon { + &:hover { + background-color: var(--color-hover-fill-normal); + } + } + } + } + } + + .property-menu { + position: absolute; + top: 45px; + right: 4px; + z-index: 2; + background-color: var(--color-normal-fill-important); + border: 1px solid var(--color-border-weak); + border-radius: 4px; + padding: 2px; + + .option { + display: block; + padding: 0 12px; + border-radius: 2px; + margin: 2px; + cursor: default; + + &:hover { + background-color: var(--color-hover-fill-normal); + } + } + } + + .loading { + position: absolute; + display: flex; + align-items: center; + top: 25px; + width: 100%; + height: calc(100% - 25px); + justify-content: center; + } +} diff --git a/extensions/shader-graph/static/shader-graph/index.html b/extensions/shader-graph/static/shader-graph/index.html new file mode 100644 index 0000000..efdaa23 --- /dev/null +++ b/extensions/shader-graph/static/shader-graph/index.html @@ -0,0 +1,94 @@ +
+ + + +
+ + +
+
+
+ +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + +
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
diff --git a/extensions/shader-graph/static/shader-graph/preview.less b/extensions/shader-graph/static/shader-graph/preview.less new file mode 100644 index 0000000..0061117 --- /dev/null +++ b/extensions/shader-graph/static/shader-graph/preview.less @@ -0,0 +1,107 @@ +.preview { + display: flex; + flex-wrap: nowrap; + flex-direction: column; + + .header { + display: flex; + align-items: center; + background-color: #141414; + width: 100%; + height: 25px; + } + + .title-label { + margin-left: 8px; + } + + .section { + flex: 1; + min-height: 0; + box-sizing: border-box; + display: flex; + justify-content: center; + flex-direction: row; + height: 100%; + width: 100%; + } + + .section > canvas { + + } + + .section > .loading { + position: absolute; + display: flex; + align-items: center; + top: 25px; + width: 100%; + height: calc(100% - 25px); + justify-content: center; + } + + .section > .tools { + position: absolute; + display: flex; + flex-direction: row; + justify-content: center; + flex-wrap: nowrap; + align-content: center; + align-items: center; + right: 20px; + top: 28px; + + .refresh { + opacity: 0.3; + margin-left: 2px; + margin-right: 2px; + } + .refresh:hover { + opacity: 1; + } + + .light { + opacity: 0.3; + margin-left: 2px; + margin-right: 2px; + --ui-button-bg-color-pressed: rgba(255, 255, 255, 0); + } + .light[pressed] { + opacity: 1; + color: white; + } + .light:hover { + opacity: 1; + } + } + + .section > .primitive-group { + position: absolute; + bottom: 6px; + left: 25px; + display: flex; + justify-content: flex-start; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + width: 100%; + + ui-label { + width: 50px; + } + + ui-asset { + width: calc(100% - 100px); + } + } + + .close { + position: absolute; + right: 5px; + color: #8F8F8F; + cursor: pointer; + } + .close:hover { + color: #cccccc; + } +} diff --git a/extensions/shader-graph/static/shader-graph/style.css b/extensions/shader-graph/static/shader-graph/style.css new file mode 100644 index 0000000..b50c6ff --- /dev/null +++ b/extensions/shader-graph/static/shader-graph/style.css @@ -0,0 +1,487 @@ +#shader-graph { + height: 100%; + display: flex; + flex-direction: column; +} +#shader-graph ui-link { + margin-left: 2px; + margin-right: 2px; +} +#shader-graph ui-graph-forge { + flex: 1; + background-color: #222; +} +#shader-graph .foreground { + overflow: hidden; + position: absolute; + z-index: 998; + top: 0; + left: 0; + right: 0; + bottom: 0; +} +#shader-graph .foreground .drag-area { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} +#shader-graph .foreground .drag-area[disallowed-event] { + pointer-events: none; +} +#shader-graph .foreground[disallowed-event] { + pointer-events: none; +} +#shader-graph .mask[show] { + opacity: 1; +} +#shader-graph .mask { + position: absolute; + z-index: 999; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + opacity: 0; +} +#shader-graph .mask .mask-child { + display: flex; + z-index: 999; + width: 100%; + height: 100%; + text-align: center; + align-items: center; + justify-content: center; + background-color: rgba(2, 2, 2, 0.9); + pointer-events: auto; +} +#shader-graph .mask .mask-child .button { + margin: 2px; + width: 100px; + height: 24px; + border: 1px solid; + border-radius: 4px; + line-height: 24px; +} +#shader-graph .mask .mask-child .button:hover { + border: 1px solid var(--color-success-fill); + color: var(--color-success-fill-emphasis); +} +#shader-graph .mask .mask-child .asset-missing { + display: flex; + align-items: center; +} +#shader-graph .mask .mask-child .need-create-new-asset { + display: flex; + align-items: center; +} +#shader-graph .mask .mask-child .asset-change { + display: flex; + align-items: center; +} +#shader-graph .mask .mask-child .button-group-horizontal { + padding: 4px; + display: flex; + flex-direction: row; + align-items: stretch; +} +#shader-graph .mask .mask-child .button-group-vertical { + padding: 4px; + display: flex; + flex-direction: column; + align-items: stretch; +} +#shader-graph .right-tabs { + position: absolute; + width: 28px; + z-index: 999; + top: 28px; + right: 1px; + display: flex; + flex-wrap: wrap; + background-color: #1F1F1F; + box-shadow: inset 0 0 1px #2b2b2b; +} +#shader-graph .right-tabs .tab { + width: 28px; + height: 115px; + writing-mode: tb; + text-align: center; + padding: 2px; + cursor: pointer; +} +#shader-graph .right-tabs .tab[pressed] { + background-color: #2B2B2B; +} +.float-window { + position: absolute; + pointer-events: auto; + background-color: #2B2B2B; + box-sizing: content-box; + display: flex; + flex-direction: column; + user-select: none; + border-radius: 2px; + --point-width: 4px; + --point-height: 4px; + --point-position: absolute; + --point-background-color: #fffa00; + --point-cursor-tl: nwse-resize; + --point-cursor-lb: nesw-resize; + --line-width: 100%; + --line-width-4: 4px; + --line-height: 100%; + --line-height-4: 4px; + --line-position: absolute; + --line-opacity: 0; + --line-background-color: #7882ff; + --line-cursor-lr: ew-resize; + --line-cursor-tb: ns-resize; +} +.float-window[hidden] { + display: none; +} +.float-window .header { + display: flex; + align-items: center; + background-color: #141414; + width: 100%; + height: 25px; +} +.float-window .header .hide-button { + position: absolute; + right: 5px; + color: #8F8F8F; + cursor: pointer; +} +.float-window .header .hide-button:hover { + color: #cccccc; +} +.float-window .header .title { + display: flex; + line-height: 25px; + height: 25px; + padding-left: 16px; + padding-right: 16px; + background-color: #2B2B2B; + justify-content: space-between; + color: #cccccc; +} +.float-window .top { + width: var(--line-width); + height: var(--line-height-4); + cursor: var(--line-cursor-tb); + position: var(--line-position); + background-color: var(--line-background-color); + opacity: var(--line-opacity); + top: 0; +} +.float-window .bottom { + width: var(--line-width); + height: var(--line-height-4); + cursor: var(--line-cursor-tb); + position: var(--line-position); + background-color: var(--line-background-color); + opacity: var(--line-opacity); + bottom: 0; +} +.float-window .left { + width: var(--line-width-4); + height: var(--line-height); + cursor: var(--line-cursor-lr); + position: var(--line-position); + background-color: var(--line-background-color); + opacity: var(--line-opacity); + left: 0; +} +.float-window .right { + width: var(--line-width-4); + height: var(--line-height); + cursor: var(--line-cursor-lr); + position: var(--line-position); + background-color: var(--line-background-color); + opacity: var(--line-opacity); + right: 0; +} +.float-window .top-left { + width: var(--point-width); + height: var(--point-height); + cursor: var(--point-cursor-tl); + position: var(--point-position); + background-color: var(--point-background-color); + opacity: var(--line-opacity); + top: 0; + left: 0; +} +.float-window .top-right { + width: var(--point-width); + height: var(--point-height); + cursor: var(--point-cursor-lb); + position: var(--point-position); + background-color: var(--point-background-color); + opacity: var(--line-opacity); + top: 0; + right: 0; +} +.float-window .bottom-left { + width: var(--point-width); + height: var(--point-height); + cursor: var(--point-cursor-lb); + position: var(--point-position); + background-color: var(--point-background-color); + opacity: var(--line-opacity); + bottom: 0; + left: 0; +} +.float-window .bottom-right { + width: var(--point-width); + height: var(--point-height); + cursor: var(--point-cursor-tl); + position: var(--point-position); + background-color: var(--point-background-color); + opacity: var(--line-opacity); + bottom: 0; + right: 0; +} +.graph-property .input { + color: white; +} +.graph-property .section { + display: flex; + flex-direction: column; + overflow-y: auto; + padding: 4px; +} +.graph-property .property-title { + display: flex; + flex-direction: row; + padding: 2px 0 2px 8px; +} +.graph-property .property-title .name { + flex: 1; + font-size: 12px; + color: var(--color-normal-contrast-emphasis); +} +.graph-property .property-title .add { + cursor: pointer; + padding: 0 6px; + font-size: 12px; +} +.graph-property .property-title .add:hover { + color: var(--color-primary-contrast-emphasis); +} +.graph-property .property-contents { + overflow-y: auto; +} +.graph-property .property-contents .item { + display: flex; + padding: 2px; +} +.graph-property .property-contents .item .prop { + flex: 1; + --left-width: 150px; + width: 70%; +} +.graph-property .property-contents .item .prop .input { + height: 22px; +} +.graph-property .property-contents .item .prop .label { + border: 1px solid black; + border-radius: 4px; + background-color: black; + width: 100%; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: flex; +} +.graph-property .property-contents .item .prop .label .name { + padding-left: 2px; + text-overflow: ellipsis; +} +.graph-property .property-contents .item .prop .label .key { + font-size: 8px; + padding-left: 2px; +} +.graph-property .property-contents .item .prop .label:hover { + border-color: var(--color-focus-fill-emphasis); +} +.graph-property .property-contents .item .prop .content { + display: flex; +} +.graph-property .property-contents .item .prop .content ui-prop { + flex: 1; +} +.graph-property .property-contents .item .delete { + width: 20px; + cursor: pointer; + padding-left: 2px; + padding-right: 2px; +} +.graph-property .property-contents .item .delete .icon:hover { + background-color: var(--color-hover-fill-normal); +} +.graph-property .property-menu { + position: absolute; + top: 45px; + right: 4px; + z-index: 2; + background-color: var(--color-normal-fill-important); + border: 1px solid var(--color-border-weak); + border-radius: 4px; + padding: 2px; +} +.graph-property .property-menu .option { + display: block; + padding: 0 12px; + border-radius: 2px; + margin: 2px; + cursor: default; +} +.graph-property .property-menu .option:hover { + background-color: var(--color-hover-fill-normal); +} +.graph-property .loading { + position: absolute; + display: flex; + align-items: center; + top: 25px; + width: 100%; + height: calc(100% - 25px); + justify-content: center; +} +.create-node { + box-shadow: rgba(63, 63, 63, 0.3) 0px 0px 10px 2px; + display: flex; +} +.create-node .header { + display: flex; + align-items: center; + background-color: #141414; + width: 100%; + height: 25px; +} +.create-node .title-label { + margin-left: 8px; +} +.create-node .close { + position: absolute; + right: 8px; + cursor: pointer; +} +.create-node .section { + height: 100%; + display: flex; + flex-direction: column; + overflow-y: auto; + padding: 4px; +} +.create-node .search-group { + display: flex; +} +.create-node .search-group .icon { + margin-left: 4px; + margin-right: 4px; +} +.create-node .search-group .input { + flex: 1; + margin-right: 4px; +} +.create-node .menus { + height: 100%; +} +.preview { + display: flex; + flex-wrap: nowrap; + flex-direction: column; +} +.preview .header { + display: flex; + align-items: center; + background-color: #141414; + width: 100%; + height: 25px; +} +.preview .title-label { + margin-left: 8px; +} +.preview .section { + flex: 1; + min-height: 0; + box-sizing: border-box; + display: flex; + justify-content: center; + flex-direction: row; + height: 100%; + width: 100%; +} +.preview .section > .loading { + position: absolute; + display: flex; + align-items: center; + top: 25px; + width: 100%; + height: calc(100% - 25px); + justify-content: center; +} +.preview .section > .tools { + position: absolute; + display: flex; + flex-direction: row; + justify-content: center; + flex-wrap: nowrap; + align-content: center; + align-items: center; + right: 20px; + top: 28px; +} +.preview .section > .tools .refresh { + opacity: 0.3; + margin-left: 2px; + margin-right: 2px; +} +.preview .section > .tools .refresh:hover { + opacity: 1; +} +.preview .section > .tools .light { + opacity: 0.3; + margin-left: 2px; + margin-right: 2px; + --ui-button-bg-color-pressed: rgba(255, 255, 255, 0); +} +.preview .section > .tools .light[pressed] { + opacity: 1; + color: white; +} +.preview .section > .tools .light:hover { + opacity: 1; +} +.preview .section > .primitive-group { + position: absolute; + bottom: 6px; + left: 25px; + display: flex; + justify-content: flex-start; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + width: 100%; +} +.preview .section > .primitive-group ui-label { + width: 50px; +} +.preview .section > .primitive-group ui-asset { + width: calc(100% - 100px); +} +.preview .close { + position: absolute; + right: 5px; + color: #8F8F8F; + cursor: pointer; +} +.preview .close:hover { + color: #cccccc; +} diff --git a/extensions/shader-graph/static/shader-graph/style.less b/extensions/shader-graph/static/shader-graph/style.less new file mode 100644 index 0000000..f0e2993 --- /dev/null +++ b/extensions/shader-graph/static/shader-graph/style.less @@ -0,0 +1,139 @@ +#shader-graph { + height: 100%; + display: flex; + flex-direction: column; + + ui-link { + margin-left: 2px; + margin-right: 2px; + } + + ui-graph-forge { + flex: 1; + background-color: #222; + } + + .foreground { + overflow: hidden; + position: absolute; + z-index: 998; + top: 0; + left: 0; + right: 0; + bottom: 0; + + .drag-area { + position: absolute; + top: 0; // graph header 的高度 + left: 0; + right: 0; + bottom: 0; + + &[disallowed-event] { + pointer-events: none; + } + } + + &[disallowed-event] { + pointer-events: none; + } + + } + + .mask[show] { + opacity: 1; + } + + .mask { + position: absolute; + z-index: 999; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + opacity: 0; + + .mask-child { + display: flex; + z-index: 999; + width: 100%; + height: 100%; + text-align: center; + align-items: center; + justify-content: center; + background-color: rgba(2, 2, 2, 0.9); + pointer-events: auto; + //font-size: 16px; + + .button { + margin: 2px; + width: 100px; + height: 24px; + //border: 1px solid var(--color-normal-fill); + border: 1px solid; + border-radius: 4px; + line-height: 24px; + //color: var(--color-normal-fill); + } + .button:hover { + border: 1px solid var(--color-success-fill); + color: var(--color-success-fill-emphasis); + } + + .asset-missing { + display: flex; + align-items: center; + } + + .need-create-new-asset { + display: flex; + align-items: center; + } + + .asset-change { + display: flex; + align-items: center; + } + + .button-group-horizontal { + padding: 4px; + display: flex; + flex-direction: row; + align-items: stretch; + } + .button-group-vertical { + padding: 4px; + display: flex; + flex-direction: column; + align-items: stretch; + } + } + } + + .right-tabs { + position: absolute; + width: 28px; + z-index: 999; + top: 28px; + right: 1px; + display: flex; + flex-wrap: wrap; + background-color: #1F1F1F; + box-shadow: inset 0 0 1px #2b2b2b; + + .tab { + width: 28px; + height: 115px; + writing-mode: tb; + text-align: center; + padding: 2px; + cursor: pointer; + } + .tab[pressed] { + background-color: #2B2B2B; + } + } +} + +@import './float-window.less';