@anov/3d 0.0.289 → 0.0.291
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/anov3d.js +43 -40
- package/dist/anov3d.js.map +1 -1
- package/dist/applicationApi.js +118 -94
- package/dist/applicationApi.js.map +1 -1
- package/dist/hooksManager.js +10 -10
- package/dist/hooksManager.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/messageStatus.js +3 -3
- package/dist/messageStatus.js.map +1 -1
- package/dist/module/animation/index.js +113 -61
- package/dist/module/animation/index.js.map +1 -1
- package/dist/module/animation/motion/index.js +91 -58
- package/dist/module/animation/motion/index.js.map +1 -1
- package/dist/module/animation/strategy.js +21 -7
- package/dist/module/animation/strategy.js.map +1 -1
- package/dist/module/camera/index.js +278 -216
- package/dist/module/camera/index.js.map +1 -1
- package/dist/module/develop/index.js +35 -27
- package/dist/module/develop/index.js.map +1 -1
- package/dist/module/entity/area/index.js +87 -29
- package/dist/module/entity/area/index.js.map +1 -1
- package/dist/module/entity/bar/index.js +24 -5
- package/dist/module/entity/bar/index.js.map +1 -1
- package/dist/module/entity/bar/style/bar_01.js +52 -13
- package/dist/module/entity/bar/style/bar_01.js.map +1 -1
- package/dist/module/entity/bar/style/index.js +21 -7
- package/dist/module/entity/bar/style/index.js.map +1 -1
- package/dist/module/entity/baseEntity.js +66 -43
- package/dist/module/entity/baseEntity.js.map +1 -1
- package/dist/module/entity/batch/index.js +168 -77
- package/dist/module/entity/batch/index.js.map +1 -1
- package/dist/module/entity/dispose.js +16 -14
- package/dist/module/entity/dispose.js.map +1 -1
- package/dist/module/entity/flyline/index.js +90 -34
- package/dist/module/entity/flyline/index.js.map +1 -1
- package/dist/module/entity/group/index.js +75 -59
- package/dist/module/entity/group/index.js.map +1 -1
- package/dist/module/entity/heatmap/index.js +79 -62
- package/dist/module/entity/heatmap/index.js.map +1 -1
- package/dist/module/entity/hybridList.js +67 -49
- package/dist/module/entity/hybridList.js.map +1 -1
- package/dist/module/entity/index.js +644 -442
- package/dist/module/entity/index.js.map +1 -1
- package/dist/module/entity/infoPanel/index.js +76 -23
- package/dist/module/entity/infoPanel/index.js.map +1 -1
- package/dist/module/entity/light/pointLight/index.js +84 -48
- package/dist/module/entity/light/pointLight/index.js.map +1 -1
- package/dist/module/entity/mark/index.js +101 -51
- package/dist/module/entity/mark/index.js.map +1 -1
- package/dist/module/entity/model/index.js +151 -108
- package/dist/module/entity/model/index.js.map +1 -1
- package/dist/module/entity/model/load/loadFbx.js +8 -8
- package/dist/module/entity/model/load/loadFbx.js.map +1 -1
- package/dist/module/entity/model/load/loadGlb.js +11 -13
- package/dist/module/entity/model/load/loadGlb.js.map +1 -1
- package/dist/module/entity/model/load.js +57 -19
- package/dist/module/entity/model/load.js.map +1 -1
- package/dist/module/entity/poi/index.js +90 -34
- package/dist/module/entity/poi/index.js.map +1 -1
- package/dist/module/entity/shape/index.js +136 -67
- package/dist/module/entity/shape/index.js.map +1 -1
- package/dist/module/entity/spline/index.js +75 -22
- package/dist/module/entity/spline/index.js.map +1 -1
- package/dist/module/entity/strategy.js +274 -92
- package/dist/module/entity/strategy.js.map +1 -1
- package/dist/module/entity/traffic/realismTraffic/index.js +88 -59
- package/dist/module/entity/traffic/realismTraffic/index.js.map +1 -1
- package/dist/module/entity/traffic/streamerTraffic/index.js +81 -50
- package/dist/module/entity/traffic/streamerTraffic/index.js.map +1 -1
- package/dist/module/entity/utils.js +13 -11
- package/dist/module/entity/utils.js.map +1 -1
- package/dist/module/entity/videoPanel/index.js +76 -23
- package/dist/module/entity/videoPanel/index.js.map +1 -1
- package/dist/module/environment/index.js +73 -54
- package/dist/module/environment/index.js.map +1 -1
- package/dist/module/environment/season/index.js +184 -342
- package/dist/module/environment/season/index.js.map +1 -1
- package/dist/module/eventBus/entityEvents.js +1 -1
- package/dist/module/eventBus/entityEvents.js.map +1 -1
- package/dist/module/eventBus/index.js +93 -79
- package/dist/module/eventBus/index.js.map +1 -1
- package/dist/module/material/index.js +334 -279
- package/dist/module/material/index.js.map +1 -1
- package/dist/module/scene/fileParse.js +369 -276
- package/dist/module/scene/fileParse.js.map +1 -1
- package/dist/module/scene/index.js +161 -106
- package/dist/module/scene/index.js.map +1 -1
- package/dist/module/tool/index.js +33 -26
- package/dist/module/tool/index.js.map +1 -1
- package/dist/sdkEntry.js +23 -2
- package/dist/sdkEntry.js.map +1 -1
- package/dist/utils/abstract.js +15 -12
- package/dist/utils/abstract.js.map +1 -1
- package/dist/utils/index.js +24 -23
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/messageFn.js +18 -17
- package/dist/utils/messageFn.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DoubleSide","MeshPhysicalMaterial","RepeatWrapping","SRGBColorSpace","TextureLoader","use","SeasonEnum","PresetValue","Spring","treeSize","landSnowSize","noGran","treeColor1","targetColor","changeColor","Summer","Autumn","Winter","Snow","Season","constructor","app","_defineProperty","init","path","caseInstance","usePath","textureLoader","textureLeaf","load","colorSpace","textureNoise","textureBole","uniforms","time","value","texture1","texture2","wrapS","wrapT","setSeason","type","duration","haveSetMaterial","setLeafMaterial","setLandMaterial","setMassifMaterial","useframe","Object","keys","forEach","key","leafMaterial","map","alphaTest","roughness","metalness","emissive","side","transparent","depthWrite","onBeforeCompile","shader","renderer","vertexShader","replace","fragmentShader","treesMesh","object","material","landMaterial","envMapIntensity","textureLand","grasslandMesh","massifMaterial","textureMassif","massifMesh"],"sources":["../../../../src/module/environment/season/index.ts"],"sourcesContent":["import type { Material, Texture } from '@anov/3d-core'\nimport { DoubleSide, MeshPhysicalMaterial, RepeatWrapping, SRGBColorSpace, TextureLoader, use } from '@anov/3d-core'\nimport type Anov3D from '../../../sdkEntry'\n\nenum SeasonEnum {\n Spring = 'Spring', // 春\n Summer = 'Summer', // 夏\n Autumn = 'Autumn', // 秋\n Winter = 'Winter', // 冬\n}\n\nconst PresetValue = {\n Spring: {\n treeSize: 1.0, landSnowSize: 0.0, noGran: 0.9, treeColor1: [0, 1, 0.1647], targetColor: [0.0, 0.58, 0.0], changeColor: [0.7059, 0.9686, 0.5294],\n },\n Summer: {\n treeSize: 0.2, landSnowSize: 0.0, noGran: 0.9, treeColor1: [0.4314, 0.8588, 0.0], targetColor: [0.0, 0.58, 0.0], changeColor: [0.4314, 0.8588, 0.0],\n },\n Autumn: {\n treeSize: 0.1, landSnowSize: 0.0, noGran: 0.9, treeColor1: [0.8784, 0.5255, 0.1216], targetColor: [0.0, 0.58, 0.0], changeColor: [0.8667, 0.8784, 0.0],\n },\n Winter: {\n treeSize: 4.0, landSnowSize: 4.0, noGran: 0.9, treeColor1: [0.8784, 0.5255, 0.1216], targetColor: [0.0, 0.58, 0.0], changeColor: [0.996, 0.960, 0.764],\n },\n Snow: {\n treeSize: 1.3, landSnowSize: 8.8, noGran: 0.9, treeColor1: [0.8784, 0.5255, 0.1216], targetColor: [0.0, 0.58, 0.0], changeColor: [0.996, 0.960, 0.764],\n },\n}\n\nclass Season {\n app: Anov3D\n textureLeaf: Texture\n textureBole: Texture\n textureLand: Texture\n textureMassif: Texture\n textureNoise: Texture\n uniforms: any\n leafMaterial: Material\n landMaterial: Material\n massifMaterial: Material\n haveSetMaterial = false\n\n constructor(app: Anov3D) {\n this.app = app\n this.init()\n }\n\n init() {\n const path = this.app.caseInstance.usePath\n const textureLoader = new TextureLoader()\n this.textureLeaf = textureLoader.load(`${path}season/Image_tree2.png`)\n this.textureLeaf.colorSpace = SRGBColorSpace\n this.textureNoise = textureLoader.load(`${path}season/T_TileNoise.png`)\n this.textureNoise.colorSpace = SRGBColorSpace\n this.textureBole = textureLoader.load(`${path}season/Image_tree3.png`)\n this.textureBole.colorSpace = SRGBColorSpace\n\n this.uniforms = {\n time: { value: 1.0 },\n treeSize: { value: 0.3 },\n noGran: { value: 0.9 },\n landSnowSize: { value: 0.0 },\n treeColor1: { value: [0.0, 0.58, 0.0] },\n targetColor: { value: [0.0, 0.58, 0.0] },\n changeColor: { value: [0.5, 0.58, 0.5] },\n texture1: { value: this.textureLeaf },\n texture2: { value: this.textureNoise },\n }\n this.uniforms.texture1.value.wrapS = this.uniforms.texture1.value.wrapT = RepeatWrapping\n this.uniforms.texture2.value.wrapS = this.uniforms.texture2.value.wrapT = RepeatWrapping\n }\n\n setSeason(type, duration = 2.0) {\n if (!this.haveSetMaterial) {\n this.haveSetMaterial = true\n this.setLeafMaterial()\n this.setLandMaterial()\n this.setMassifMaterial()\n\n use.useframe(() => {\n this.uniforms.time.value += 0.2\n })\n }\n\n PresetValue[type] && Object.keys(PresetValue[type]).forEach((key) => {\n this.uniforms[key].value = PresetValue[type][key]\n })\n }\n\n setLeafMaterial() {\n this.leafMaterial = new MeshPhysicalMaterial(\n {\n map: this.textureBole,\n alphaTest: 0.2,\n roughness: 1,\n metalness: 0,\n emissive: 0,\n side: DoubleSide,\n transparent: true,\n depthWrite: true,\n })\n this.leafMaterial.onBeforeCompile = (shader, renderer) => {\n shader.vertexShader = `\n \n uniform float time;\n varying vec3 vWorldPosition;\n varying vec2 vUv;\n \n float hash( vec2 p ) {\n return fract( sin( dot( p, vec2( 127.1, 311.7 ) ) ) * 43758.5453123 );\n }\n \n float noise( vec2 p ) {\n vec2 i = floor( p );\n vec2 f = fract( p );\n vec2 u = f * f * ( 3.0 - 2.0 * f );\n \n return mix( mix( hash( i + vec2( 0.0, 0.0 ) ), \n hash( i + vec2( 1.0, 0.0 ) ), u.x),\n mix( hash( i + vec2( 0.0, 1.0 ) ), \n hash( i + vec2( 1.0, 1.0 ) ), u.x), u.y);\n }\n \n ${shader.vertexShader}`\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>',\n `#include <begin_vertex>\n vUv = uv;\n vNormal = normalize(normal);\n vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;\n \n vec3 wind = vec3(\n noise(position.xy * 0.5 + time * 0.1),\n noise(position.yz * 0.5 + time * 0.1),\n noise(position.zx * 0.5 + time * 0.1)\n );\n float strength = 0.5; // Adjust the strength of the wind effect\n vec3 displacedPosition = position + wind * strength;\n transformed = displacedPosition;\n `,\n )\n shader.fragmentShader = `\n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform float treeSize;\n uniform vec3 treeColor1;\n uniform float landSnowSize;\n varying vec3 vWorldPosition;\n varying vec2 vUv;\n \n vec4 T3dPoi (sampler2D T,vec3 Position,vec3 normal, float loop){\n vec2 xy = vec2(Position.x,Position.y);\n vec2 xz = vec2(Position.x,Position.z);\n vec2 yz = vec2(Position.y,Position.z);\n float ix =clamp((abs(normal.x)-0.4)*2.,0.,1.);\n float iy =clamp((abs(normal.y)-0.4)*2.,0.,1.);\n return mix((mix(texture2D( T, xy*loop),texture2D( T, yz*loop),ix)),texture2D( T, xz*loop),iy);\n }\n ${shader.fragmentShader}\n `\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>',\n ` \n #include <map_fragment> \n vec4 T1 = texture2D(texture1, vUv)*vec4(treeColor1,1.);\n vec4 nT = texture2D(texture2, vUv);\n \n vec4 noiseT=T3dPoi(texture2,vWorldPosition,vNormal,0.02);\n \n diffuseColor = mix(diffuseColor, T1,pow(nT.r,treeSize) ); // 叠加效果,调整混合方式\n float Si= clamp(pow(noiseT.r,(10.-landSnowSize))*landSnowSize*0.1,0.,1.);\n diffuseColor = mix(diffuseColor,vec4(1.,1.,1.,diffuseColor.a), Si);\n \n \n // diffuseColor =vec4(Si,Si,Si,1.) ;\n \n `,\n )\n\n shader.uniforms.time = this.uniforms.time\n shader.uniforms.texture1 = { value: this.textureLeaf }\n shader.uniforms.texture2 = { value: this.textureNoise }\n shader.uniforms.treeSize = this.uniforms.treeSize\n shader.uniforms.treeColor1 = this.uniforms.treeColor1\n shader.uniforms.landSnowSize = this.uniforms.landSnowSize\n\n // material.userData.shader = shader;\n }\n this.app.caseInstance.treesMesh.forEach((object) => {\n object.material = this.leafMaterial\n })\n }\n\n setLandMaterial() {\n this.landMaterial = new MeshPhysicalMaterial(\n {\n // alphaTest: 0.2,\n roughness: 1,\n metalness: 0,\n emissive: 0,\n envMapIntensity: 0.2,\n side: DoubleSide,\n // transparent: true,\n depthWrite: false,\n })\n this.landMaterial.onBeforeCompile = (shader, renderer) => {\n shader.vertexShader = ` \n varying vec3 vWorldPosition;\n varying vec2 vUv;\n ${shader.vertexShader}`\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>',\n `#include <begin_vertex>\n vUv = uv;\n vNormal = normalize(normal);\n vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;\n `,\n )\n shader.fragmentShader = `\n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform float treeSize;\n uniform float noGran;\n uniform vec3 treeColor1;\n uniform vec3 targetColor;\n uniform vec3 changeColor;\n uniform float landSnowSize;\n varying vec3 vWorldPosition;\n varying vec2 vUv;\n //varying vec2 vUv;\n vec4 T3dPoi (sampler2D T,vec3 Position,vec3 normal, float loop){\n vec2 xy = vec2(Position.x,Position.y);\n vec2 xz = vec2(Position.x,Position.z);\n vec2 yz = vec2(Position.y,Position.z);\n float ix =clamp((abs(normal.x)-0.4)*2.,0.,1.);\n float iy =clamp((abs(normal.y)-0.4)*2.,0.,1.);\n return mix((mix(texture2D( T, xy*loop),texture2D( T, yz*loop),ix)),texture2D( T, xz*loop),iy);\n }\n \n ${shader.fragmentShader}\n `\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>',\n ` \n #include <map_fragment> \n vec4 T1 = texture2D(texture1, vUv);\n \n float d = distance(T1.rgb, targetColor);\n float factor = smoothstep(0.4, 0.6, d);\n // T1.rgb = mix(treeColor1, T1.rgb, factor);\n \n float gray = dot(T1.rgb, vec3(0.299, 0.587, 0.114));\n vec4 T1_gray =vec4(vec3(gray)*changeColor,1.);\n \n T1.rgb = mix(T1_gray.rgb, T1.rgb, factor);\n \n \n vec4 nT = texture2D(texture2, vUv);\n \n vec4 noiseT2d=pow(texture2D(texture2, vWorldPosition.xz*0.002),vec4(10.-landSnowSize));\n \n diffuseColor = mix(diffuseColor, T1,pow(nT.r,treeSize) ); // 叠加效果,调整混合方式\n diffuseColor=T1;\n \n vec3 upDirection = vec3(0.0, 1.0, 0.0);\n float dotProduct = dot(vNormal, upDirection);\n float snowAmount = smoothstep(0.5, 1.0, dotProduct);\n diffuseColor = mix(diffuseColor, vec4(1.0, 1., 1.,1.), snowAmount*landSnowSize*noiseT2d*0.1);\n \n \n `,\n )\n\n shader.uniforms.time = this.uniforms.time\n // shader.uniforms.texture1 = { value: matLandT0 };\n shader.uniforms.texture1 = { value: this.textureLand }\n shader.uniforms.texture2 = { value: this.textureNoise }\n shader.uniforms.treeSize = this.uniforms.treeSize\n shader.uniforms.noGran = this.uniforms.noGran\n shader.uniforms.treeColor1 = this.uniforms.treeColor1\n shader.uniforms.targetColor = this.uniforms.targetColor\n shader.uniforms.changeColor = this.uniforms.changeColor\n shader.uniforms.landSnowSize = this.uniforms.landSnowSize\n }\n this.app.caseInstance.grasslandMesh.forEach((object) => {\n this.textureLand = object.material.map\n object.material = this.landMaterial\n })\n }\n\n setMassifMaterial() {\n this.massifMaterial = new MeshPhysicalMaterial(\n {\n alphaTest: 0.2,\n roughness: 1,\n metalness: 0,\n emissive: 0,\n envMapIntensity: 0.2,\n side: DoubleSide,\n transparent: true,\n depthWrite: false,\n })\n\n this.massifMaterial.onBeforeCompile = (shader, renderer) => {\n // console.log(shader.vertexShader);\n shader.vertexShader = ` \n varying vec3 vWorldPosition;\n varying vec2 vUv;\n ${shader.vertexShader}`\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>',\n `#include <begin_vertex>\n vUv = uv;\n \n vNormal = normalize(normal);\n vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;\n `,\n )\n shader.fragmentShader = `\n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform float treeSize;\n uniform float noGran;\n uniform vec3 treeColor1;\n uniform vec3 targetColor;\n uniform vec3 changeColor;\n uniform float landSnowSize;\n varying vec3 vWorldPosition;\n varying vec2 vUv;\n \n vec4 T3dPoi (sampler2D T,vec3 Position,vec3 normal, float loop){\n vec2 xy = vec2(Position.x,Position.y);\n vec2 xz = vec2(Position.x,Position.z);\n vec2 yz = vec2(Position.y,Position.z);\n float ix =clamp((abs(normal.x)-0.4)*2.,0.,1.);\n float iy =clamp((abs(normal.y)-0.4)*2.,0.,1.);\n return mix((mix(texture2D( T, xy*loop),texture2D( T, yz*loop),ix)),texture2D( T, xz*loop),iy);\n }\n \n ${shader.fragmentShader}\n `\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>',\n ` \n #include <map_fragment> \n vec4 T1 = texture2D(texture1, vUv);\n \n float d = distance(T1.rgb, targetColor);\n float factor = smoothstep(0.4, 0.6, d);\n // T1.rgb = mix(treeColor1, T1.rgb, factor);\n \n float gray = dot(T1.rgb, vec3(0.299, 0.587, 0.114));\n vec4 T1_gray =vec4(vec3(gray)*changeColor,1.);\n \n T1.rgb = mix(T1_gray.rgb, T1.rgb, factor);\n \n diffuseColor=T1;\n vec4 nT = texture2D(texture2, vUv);\n \n float noiseT=pow( clamp(texture2D(texture2, vWorldPosition.xz*0.002).r,0.,1.),(10.0-landSnowSize));\n vec4 noiseT2d=pow(texture2D(texture2, vWorldPosition.xz*0.002),vec4(10.0-landSnowSize));\n \n //diffuseColor = mix(diffuseColor, T1,pow(nT.r,1.) ); // 叠加效果,调整混合方式\n \n \n vec3 upDirection = vec3(0.0, 1.0, 0.0);\n float dotProduct = dot(vNormal, upDirection);\n float snowAmount = smoothstep(0.5, 1.0, dotProduct);\n diffuseColor = mix(diffuseColor, vec4(5.0, 5., 5.,5.),snowAmount* noiseT*0.5*landSnowSize);\n //diffuseColor=nT;\n \n `,\n )\n\n shader.uniforms.time = this.uniforms.time\n // shader.uniforms.texture1 = { value: matLandT0 };\n shader.uniforms.texture1 = { value: this.textureMassif }\n shader.uniforms.texture2 = { value: this.textureNoise }\n shader.uniforms.treeSize = this.uniforms.treeSize\n shader.uniforms.noGran = this.uniforms.noGran\n shader.uniforms.treeColor1 = this.uniforms.treeColor1\n shader.uniforms.targetColor = this.uniforms.targetColor\n shader.uniforms.changeColor = this.uniforms.changeColor\n shader.uniforms.landSnowSize = this.uniforms.landSnowSize\n\n // material.userData.shader = shader;\n }\n\n this.app.caseInstance.massifMesh.forEach((object) => {\n this.textureMassif = object.material.map\n object.material = this.massifMaterial\n })\n }\n}\n\nexport default Season"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["DoubleSide","MeshPhysicalMaterial","RepeatWrapping","SRGBColorSpace","TextureLoader","use","SeasonEnum","PresetValue","Spring","treeSize","landSnowSize","noGran","treeColor1","targetColor","changeColor","Summer","Autumn","Winter","Snow","Season","app","_classCallCheck","_defineProperty","init","_createClass","key","value","path","caseInstance","usePath","textureLoader","textureLeaf","load","concat","colorSpace","textureNoise","textureBole","uniforms","time","texture1","texture2","wrapS","wrapT","setSeason","type","_this","duration","arguments","length","undefined","haveSetMaterial","setLeafMaterial","setLandMaterial","setMassifMaterial","useframe","Object","keys","forEach","_this2","leafMaterial","map","alphaTest","roughness","metalness","emissive","side","transparent","depthWrite","onBeforeCompile","shader","renderer","vertexShader","replace","fragmentShader","treesMesh","object","material","_this3","landMaterial","envMapIntensity","textureLand","grasslandMesh","_this4","massifMaterial","textureMassif","massifMesh"],"sources":["../../../../src/module/environment/season/index.ts"],"sourcesContent":["import type { Material, Texture } from '@anov/3d-core'\nimport { DoubleSide, MeshPhysicalMaterial, RepeatWrapping, SRGBColorSpace, TextureLoader, use } from '@anov/3d-core'\nimport type Anov3D from '../../../sdkEntry'\n\nenum SeasonEnum {\n Spring = 'Spring', // 春\n Summer = 'Summer', // 夏\n Autumn = 'Autumn', // 秋\n Winter = 'Winter', // 冬\n}\n\nconst PresetValue = {\n Spring: {\n treeSize: 1.0, landSnowSize: 0.0, noGran: 0.9, treeColor1: [0, 1, 0.1647], targetColor: [0.0, 0.58, 0.0], changeColor: [0.7059, 0.9686, 0.5294],\n },\n Summer: {\n treeSize: 0.2, landSnowSize: 0.0, noGran: 0.9, treeColor1: [0.4314, 0.8588, 0.0], targetColor: [0.0, 0.58, 0.0], changeColor: [0.4314, 0.8588, 0.0],\n },\n Autumn: {\n treeSize: 0.1, landSnowSize: 0.0, noGran: 0.9, treeColor1: [0.8784, 0.5255, 0.1216], targetColor: [0.0, 0.58, 0.0], changeColor: [0.8667, 0.8784, 0.0],\n },\n Winter: {\n treeSize: 4.0, landSnowSize: 4.0, noGran: 0.9, treeColor1: [0.8784, 0.5255, 0.1216], targetColor: [0.0, 0.58, 0.0], changeColor: [0.996, 0.960, 0.764],\n },\n Snow: {\n treeSize: 1.3, landSnowSize: 8.8, noGran: 0.9, treeColor1: [0.8784, 0.5255, 0.1216], targetColor: [0.0, 0.58, 0.0], changeColor: [0.996, 0.960, 0.764],\n },\n}\n\nclass Season {\n app: Anov3D\n textureLeaf: Texture\n textureBole: Texture\n textureLand: Texture\n textureMassif: Texture\n textureNoise: Texture\n uniforms: any\n leafMaterial: Material\n landMaterial: Material\n massifMaterial: Material\n haveSetMaterial = false\n\n constructor(app: Anov3D) {\n this.app = app\n this.init()\n }\n\n init() {\n const path = this.app.caseInstance.usePath\n const textureLoader = new TextureLoader()\n this.textureLeaf = textureLoader.load(`${path}season/Image_tree2.png`)\n this.textureLeaf.colorSpace = SRGBColorSpace\n this.textureNoise = textureLoader.load(`${path}season/T_TileNoise.png`)\n this.textureNoise.colorSpace = SRGBColorSpace\n this.textureBole = textureLoader.load(`${path}season/Image_tree3.png`)\n this.textureBole.colorSpace = SRGBColorSpace\n\n this.uniforms = {\n time: { value: 1.0 },\n treeSize: { value: 0.3 },\n noGran: { value: 0.9 },\n landSnowSize: { value: 0.0 },\n treeColor1: { value: [0.0, 0.58, 0.0] },\n targetColor: { value: [0.0, 0.58, 0.0] },\n changeColor: { value: [0.5, 0.58, 0.5] },\n texture1: { value: this.textureLeaf },\n texture2: { value: this.textureNoise },\n }\n this.uniforms.texture1.value.wrapS = this.uniforms.texture1.value.wrapT = RepeatWrapping\n this.uniforms.texture2.value.wrapS = this.uniforms.texture2.value.wrapT = RepeatWrapping\n }\n\n setSeason(type, duration = 2.0) {\n if (!this.haveSetMaterial) {\n this.haveSetMaterial = true\n this.setLeafMaterial()\n this.setLandMaterial()\n this.setMassifMaterial()\n\n use.useframe(() => {\n this.uniforms.time.value += 0.2\n })\n }\n\n PresetValue[type] && Object.keys(PresetValue[type]).forEach((key) => {\n this.uniforms[key].value = PresetValue[type][key]\n })\n }\n\n setLeafMaterial() {\n this.leafMaterial = new MeshPhysicalMaterial(\n {\n map: this.textureBole,\n alphaTest: 0.2,\n roughness: 1,\n metalness: 0,\n emissive: 0,\n side: DoubleSide,\n transparent: true,\n depthWrite: true,\n })\n this.leafMaterial.onBeforeCompile = (shader, renderer) => {\n shader.vertexShader = `\n \n uniform float time;\n varying vec3 vWorldPosition;\n varying vec2 vUv;\n \n float hash( vec2 p ) {\n return fract( sin( dot( p, vec2( 127.1, 311.7 ) ) ) * 43758.5453123 );\n }\n \n float noise( vec2 p ) {\n vec2 i = floor( p );\n vec2 f = fract( p );\n vec2 u = f * f * ( 3.0 - 2.0 * f );\n \n return mix( mix( hash( i + vec2( 0.0, 0.0 ) ), \n hash( i + vec2( 1.0, 0.0 ) ), u.x),\n mix( hash( i + vec2( 0.0, 1.0 ) ), \n hash( i + vec2( 1.0, 1.0 ) ), u.x), u.y);\n }\n \n ${shader.vertexShader}`\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>',\n `#include <begin_vertex>\n vUv = uv;\n vNormal = normalize(normal);\n vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;\n \n vec3 wind = vec3(\n noise(position.xy * 0.5 + time * 0.1),\n noise(position.yz * 0.5 + time * 0.1),\n noise(position.zx * 0.5 + time * 0.1)\n );\n float strength = 0.5; // Adjust the strength of the wind effect\n vec3 displacedPosition = position + wind * strength;\n transformed = displacedPosition;\n `,\n )\n shader.fragmentShader = `\n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform float treeSize;\n uniform vec3 treeColor1;\n uniform float landSnowSize;\n varying vec3 vWorldPosition;\n varying vec2 vUv;\n \n vec4 T3dPoi (sampler2D T,vec3 Position,vec3 normal, float loop){\n vec2 xy = vec2(Position.x,Position.y);\n vec2 xz = vec2(Position.x,Position.z);\n vec2 yz = vec2(Position.y,Position.z);\n float ix =clamp((abs(normal.x)-0.4)*2.,0.,1.);\n float iy =clamp((abs(normal.y)-0.4)*2.,0.,1.);\n return mix((mix(texture2D( T, xy*loop),texture2D( T, yz*loop),ix)),texture2D( T, xz*loop),iy);\n }\n ${shader.fragmentShader}\n `\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>',\n ` \n #include <map_fragment> \n vec4 T1 = texture2D(texture1, vUv)*vec4(treeColor1,1.);\n vec4 nT = texture2D(texture2, vUv);\n \n vec4 noiseT=T3dPoi(texture2,vWorldPosition,vNormal,0.02);\n \n diffuseColor = mix(diffuseColor, T1,pow(nT.r,treeSize) ); // 叠加效果,调整混合方式\n float Si= clamp(pow(noiseT.r,(10.-landSnowSize))*landSnowSize*0.1,0.,1.);\n diffuseColor = mix(diffuseColor,vec4(1.,1.,1.,diffuseColor.a), Si);\n \n \n // diffuseColor =vec4(Si,Si,Si,1.) ;\n \n `,\n )\n\n shader.uniforms.time = this.uniforms.time\n shader.uniforms.texture1 = { value: this.textureLeaf }\n shader.uniforms.texture2 = { value: this.textureNoise }\n shader.uniforms.treeSize = this.uniforms.treeSize\n shader.uniforms.treeColor1 = this.uniforms.treeColor1\n shader.uniforms.landSnowSize = this.uniforms.landSnowSize\n\n // material.userData.shader = shader;\n }\n this.app.caseInstance.treesMesh.forEach((object) => {\n object.material = this.leafMaterial\n })\n }\n\n setLandMaterial() {\n this.landMaterial = new MeshPhysicalMaterial(\n {\n // alphaTest: 0.2,\n roughness: 1,\n metalness: 0,\n emissive: 0,\n envMapIntensity: 0.2,\n side: DoubleSide,\n // transparent: true,\n depthWrite: false,\n })\n this.landMaterial.onBeforeCompile = (shader, renderer) => {\n shader.vertexShader = ` \n varying vec3 vWorldPosition;\n varying vec2 vUv;\n ${shader.vertexShader}`\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>',\n `#include <begin_vertex>\n vUv = uv;\n vNormal = normalize(normal);\n vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;\n `,\n )\n shader.fragmentShader = `\n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform float treeSize;\n uniform float noGran;\n uniform vec3 treeColor1;\n uniform vec3 targetColor;\n uniform vec3 changeColor;\n uniform float landSnowSize;\n varying vec3 vWorldPosition;\n varying vec2 vUv;\n //varying vec2 vUv;\n vec4 T3dPoi (sampler2D T,vec3 Position,vec3 normal, float loop){\n vec2 xy = vec2(Position.x,Position.y);\n vec2 xz = vec2(Position.x,Position.z);\n vec2 yz = vec2(Position.y,Position.z);\n float ix =clamp((abs(normal.x)-0.4)*2.,0.,1.);\n float iy =clamp((abs(normal.y)-0.4)*2.,0.,1.);\n return mix((mix(texture2D( T, xy*loop),texture2D( T, yz*loop),ix)),texture2D( T, xz*loop),iy);\n }\n \n ${shader.fragmentShader}\n `\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>',\n ` \n #include <map_fragment> \n vec4 T1 = texture2D(texture1, vUv);\n \n float d = distance(T1.rgb, targetColor);\n float factor = smoothstep(0.4, 0.6, d);\n // T1.rgb = mix(treeColor1, T1.rgb, factor);\n \n float gray = dot(T1.rgb, vec3(0.299, 0.587, 0.114));\n vec4 T1_gray =vec4(vec3(gray)*changeColor,1.);\n \n T1.rgb = mix(T1_gray.rgb, T1.rgb, factor);\n \n \n vec4 nT = texture2D(texture2, vUv);\n \n vec4 noiseT2d=pow(texture2D(texture2, vWorldPosition.xz*0.002),vec4(10.-landSnowSize));\n \n diffuseColor = mix(diffuseColor, T1,pow(nT.r,treeSize) ); // 叠加效果,调整混合方式\n diffuseColor=T1;\n \n vec3 upDirection = vec3(0.0, 1.0, 0.0);\n float dotProduct = dot(vNormal, upDirection);\n float snowAmount = smoothstep(0.5, 1.0, dotProduct);\n diffuseColor = mix(diffuseColor, vec4(1.0, 1., 1.,1.), snowAmount*landSnowSize*noiseT2d*0.1);\n \n \n `,\n )\n\n shader.uniforms.time = this.uniforms.time\n // shader.uniforms.texture1 = { value: matLandT0 };\n shader.uniforms.texture1 = { value: this.textureLand }\n shader.uniforms.texture2 = { value: this.textureNoise }\n shader.uniforms.treeSize = this.uniforms.treeSize\n shader.uniforms.noGran = this.uniforms.noGran\n shader.uniforms.treeColor1 = this.uniforms.treeColor1\n shader.uniforms.targetColor = this.uniforms.targetColor\n shader.uniforms.changeColor = this.uniforms.changeColor\n shader.uniforms.landSnowSize = this.uniforms.landSnowSize\n }\n this.app.caseInstance.grasslandMesh.forEach((object) => {\n this.textureLand = object.material.map\n object.material = this.landMaterial\n })\n }\n\n setMassifMaterial() {\n this.massifMaterial = new MeshPhysicalMaterial(\n {\n alphaTest: 0.2,\n roughness: 1,\n metalness: 0,\n emissive: 0,\n envMapIntensity: 0.2,\n side: DoubleSide,\n transparent: true,\n depthWrite: false,\n })\n\n this.massifMaterial.onBeforeCompile = (shader, renderer) => {\n // console.log(shader.vertexShader);\n shader.vertexShader = ` \n varying vec3 vWorldPosition;\n varying vec2 vUv;\n ${shader.vertexShader}`\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>',\n `#include <begin_vertex>\n vUv = uv;\n \n vNormal = normalize(normal);\n vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;\n `,\n )\n shader.fragmentShader = `\n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform float treeSize;\n uniform float noGran;\n uniform vec3 treeColor1;\n uniform vec3 targetColor;\n uniform vec3 changeColor;\n uniform float landSnowSize;\n varying vec3 vWorldPosition;\n varying vec2 vUv;\n \n vec4 T3dPoi (sampler2D T,vec3 Position,vec3 normal, float loop){\n vec2 xy = vec2(Position.x,Position.y);\n vec2 xz = vec2(Position.x,Position.z);\n vec2 yz = vec2(Position.y,Position.z);\n float ix =clamp((abs(normal.x)-0.4)*2.,0.,1.);\n float iy =clamp((abs(normal.y)-0.4)*2.,0.,1.);\n return mix((mix(texture2D( T, xy*loop),texture2D( T, yz*loop),ix)),texture2D( T, xz*loop),iy);\n }\n \n ${shader.fragmentShader}\n `\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>',\n ` \n #include <map_fragment> \n vec4 T1 = texture2D(texture1, vUv);\n \n float d = distance(T1.rgb, targetColor);\n float factor = smoothstep(0.4, 0.6, d);\n // T1.rgb = mix(treeColor1, T1.rgb, factor);\n \n float gray = dot(T1.rgb, vec3(0.299, 0.587, 0.114));\n vec4 T1_gray =vec4(vec3(gray)*changeColor,1.);\n \n T1.rgb = mix(T1_gray.rgb, T1.rgb, factor);\n \n diffuseColor=T1;\n vec4 nT = texture2D(texture2, vUv);\n \n float noiseT=pow( clamp(texture2D(texture2, vWorldPosition.xz*0.002).r,0.,1.),(10.0-landSnowSize));\n vec4 noiseT2d=pow(texture2D(texture2, vWorldPosition.xz*0.002),vec4(10.0-landSnowSize));\n \n //diffuseColor = mix(diffuseColor, T1,pow(nT.r,1.) ); // 叠加效果,调整混合方式\n \n \n vec3 upDirection = vec3(0.0, 1.0, 0.0);\n float dotProduct = dot(vNormal, upDirection);\n float snowAmount = smoothstep(0.5, 1.0, dotProduct);\n diffuseColor = mix(diffuseColor, vec4(5.0, 5., 5.,5.),snowAmount* noiseT*0.5*landSnowSize);\n //diffuseColor=nT;\n \n `,\n )\n\n shader.uniforms.time = this.uniforms.time\n // shader.uniforms.texture1 = { value: matLandT0 };\n shader.uniforms.texture1 = { value: this.textureMassif }\n shader.uniforms.texture2 = { value: this.textureNoise }\n shader.uniforms.treeSize = this.uniforms.treeSize\n shader.uniforms.noGran = this.uniforms.noGran\n shader.uniforms.treeColor1 = this.uniforms.treeColor1\n shader.uniforms.targetColor = this.uniforms.targetColor\n shader.uniforms.changeColor = this.uniforms.changeColor\n shader.uniforms.landSnowSize = this.uniforms.landSnowSize\n\n // material.userData.shader = shader;\n }\n\n this.app.caseInstance.massifMesh.forEach((object) => {\n this.textureMassif = object.material.map\n object.material = this.massifMaterial\n })\n }\n}\n\nexport default Season"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export var entityEvents = ['onclick', 'ondblclick', 'oncontextmenu', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout'];
|
|
2
2
|
//# sourceMappingURL=entityEvents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["entityEvents"],"sources":["../../../src/module/eventBus/entityEvents.ts"],"sourcesContent":["export const entityEvents = [\n 'onclick',\n 'ondblclick',\n 'oncontextmenu',\n 'onmousedown',\n 'onmouseup',\n 'onmouseover',\n 'onmouseout',\n]"],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"names":["entityEvents"],"sources":["../../../src/module/eventBus/entityEvents.ts"],"sourcesContent":["export const entityEvents = [\n 'onclick',\n 'ondblclick',\n 'oncontextmenu',\n 'onmousedown',\n 'onmouseup',\n 'onmouseover',\n 'onmouseout',\n]"],"mappings":"AAAA,OAAO,IAAMA,YAAY,GAAG,CAC1B,SAAS,EACT,YAAY,EACZ,eAAe,EACf,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,CACb"}
|
|
@@ -1,29 +1,31 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
3
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
4
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
1
5
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" ==
|
|
3
|
-
function _toPrimitive(t, r) { if ("object" !=
|
|
6
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
7
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
8
|
import { utils } from '@anov/3d-core';
|
|
5
9
|
import { hybridList } from "../entity";
|
|
6
10
|
import { entityEvents } from "./entityEvents";
|
|
7
|
-
|
|
8
|
-
emitter
|
|
9
|
-
} = utils;
|
|
11
|
+
var emitter = utils.emitter;
|
|
10
12
|
|
|
11
13
|
/**
|
|
12
14
|
* notes: 区别于前端概念,3端统一API特定
|
|
13
15
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
var EventBus = /*#__PURE__*/function () {
|
|
17
|
+
function EventBus(app) {
|
|
18
|
+
var _this = this;
|
|
19
|
+
_classCallCheck(this, EventBus);
|
|
17
20
|
_defineProperty(this, "eventMap", new Map());
|
|
18
21
|
_defineProperty(this, "eventTimesMap", new Map());
|
|
19
22
|
_defineProperty(this, "app", void 0);
|
|
20
23
|
this.app = app;
|
|
21
24
|
|
|
22
25
|
// @ts-ignore
|
|
23
|
-
emitter.on('onEntityLoaded', ({
|
|
24
|
-
id
|
|
25
|
-
|
|
26
|
-
this.handleUseOnAfter(id);
|
|
26
|
+
emitter.on('onEntityLoaded', function (_ref) {
|
|
27
|
+
var id = _ref.id;
|
|
28
|
+
_this.handleUseOnAfter(id);
|
|
27
29
|
});
|
|
28
30
|
}
|
|
29
31
|
|
|
@@ -31,83 +33,95 @@ class EventBus {
|
|
|
31
33
|
* handle entity event, but only handle the last one use on event
|
|
32
34
|
* @param entityId
|
|
33
35
|
*/
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
entityId
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* handle entity event
|
|
51
|
-
* @param eventName
|
|
52
|
-
*/
|
|
53
|
-
handleUseOnBefore(eventName) {
|
|
54
|
-
if (hybridList.map.size > 0) {
|
|
55
|
-
hybridList.map.forEach((entity, key) => {
|
|
56
|
-
var _entity$value$userDat;
|
|
57
|
-
if ((_entity$value$userDat = entity.value.userData) !== null && _entity$value$userDat !== void 0 && (_entity$value$userDat = _entity$value$userDat.entityParams) !== null && _entity$value$userDat !== void 0 && _entity$value$userDat.interactable) {
|
|
58
|
-
this.app.entity.unregisterEvents({
|
|
59
|
-
eventName,
|
|
60
|
-
entityId: key
|
|
36
|
+
_createClass(EventBus, [{
|
|
37
|
+
key: "handleUseOnAfter",
|
|
38
|
+
value: function handleUseOnAfter(entityId) {
|
|
39
|
+
var _this2 = this;
|
|
40
|
+
this.eventMap.forEach(function (value, key) {
|
|
41
|
+
if (value && entityEvents.includes(key.toLowerCase())) {
|
|
42
|
+
_this2.app.entity.unregisterEvents({
|
|
43
|
+
eventName: key,
|
|
44
|
+
entityId: entityId
|
|
61
45
|
});
|
|
62
|
-
|
|
63
|
-
eventName,
|
|
64
|
-
entityId:
|
|
46
|
+
_this2.app.entity.registerEvents({
|
|
47
|
+
eventName: key,
|
|
48
|
+
entityId: entityId
|
|
65
49
|
});
|
|
66
50
|
}
|
|
67
51
|
});
|
|
68
52
|
}
|
|
69
|
-
}
|
|
70
53
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
54
|
+
/**
|
|
55
|
+
* handle entity event
|
|
56
|
+
* @param eventName
|
|
57
|
+
*/
|
|
58
|
+
}, {
|
|
59
|
+
key: "handleUseOnBefore",
|
|
60
|
+
value: function handleUseOnBefore(eventName) {
|
|
61
|
+
var _this3 = this;
|
|
62
|
+
if (hybridList.map.size > 0) {
|
|
63
|
+
hybridList.map.forEach(function (entity, key) {
|
|
64
|
+
var _entity$value$userDat;
|
|
65
|
+
if ((_entity$value$userDat = entity.value.userData) !== null && _entity$value$userDat !== void 0 && (_entity$value$userDat = _entity$value$userDat.entityParams) !== null && _entity$value$userDat !== void 0 && _entity$value$userDat.interactable) {
|
|
66
|
+
_this3.app.entity.unregisterEvents({
|
|
67
|
+
eventName: eventName,
|
|
68
|
+
entityId: key
|
|
69
|
+
});
|
|
70
|
+
_this3.app.entity.registerEvents({
|
|
71
|
+
eventName: eventName,
|
|
72
|
+
entityId: key
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* open event
|
|
81
|
+
* @param params
|
|
82
|
+
*/
|
|
83
|
+
}, {
|
|
84
|
+
key: "on",
|
|
85
|
+
value: function on(params) {
|
|
86
|
+
// 单实体事件注册
|
|
87
|
+
if (params.id) {
|
|
88
|
+
// @ts-ignore
|
|
89
|
+
this.app.entity.registerEvents({
|
|
90
|
+
eventName: params.eventName,
|
|
91
|
+
entityId: params.id
|
|
92
|
+
});
|
|
93
|
+
return {
|
|
94
|
+
eventName: params.eventName,
|
|
95
|
+
id: params.id
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// 全局事件注册
|
|
99
|
+
else {
|
|
100
|
+
this.eventMap.set("".concat(params.eventName), true);
|
|
101
|
+
if (entityEvents.includes(params.eventName.toLowerCase())) this.handleUseOnBefore(params.eventName);
|
|
102
|
+
return {
|
|
103
|
+
eventName: params.eventName
|
|
104
|
+
};
|
|
105
|
+
}
|
|
87
106
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (
|
|
107
|
+
}, {
|
|
108
|
+
key: "off",
|
|
109
|
+
value: function off(params) {
|
|
110
|
+
if (params.entityId) {
|
|
111
|
+
// @ts-ignore
|
|
112
|
+
this.app.entity.unregisterEvents({
|
|
113
|
+
eventName: params.eventName,
|
|
114
|
+
entityId: params.entityId
|
|
115
|
+
});
|
|
116
|
+
} else {
|
|
117
|
+
this.eventMap.set("".concat(params.eventName), false);
|
|
118
|
+
}
|
|
92
119
|
return {
|
|
93
120
|
eventName: params.eventName
|
|
94
121
|
};
|
|
95
122
|
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
// @ts-ignore
|
|
100
|
-
this.app.entity.unregisterEvents({
|
|
101
|
-
eventName: params.eventName,
|
|
102
|
-
entityId: params.entityId
|
|
103
|
-
});
|
|
104
|
-
} else {
|
|
105
|
-
this.eventMap.set(`${params.eventName}`, false);
|
|
106
|
-
}
|
|
107
|
-
return {
|
|
108
|
-
eventName: params.eventName
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
}
|
|
123
|
+
}]);
|
|
124
|
+
return EventBus;
|
|
125
|
+
}();
|
|
112
126
|
export default EventBus;
|
|
113
127
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["utils","hybridList","entityEvents","emitter","EventBus","
|
|
1
|
+
{"version":3,"names":["utils","hybridList","entityEvents","emitter","EventBus","app","_this","_classCallCheck","_defineProperty","Map","on","_ref","id","handleUseOnAfter","_createClass","key","value","entityId","_this2","eventMap","forEach","includes","toLowerCase","entity","unregisterEvents","eventName","registerEvents","handleUseOnBefore","_this3","map","size","_entity$value$userDat","userData","entityParams","interactable","params","set","concat","off"],"sources":["../../../src/module/eventBus/index.ts"],"sourcesContent":["import { utils } from '@anov/3d-core'\nimport type { BaseModule } from '../../utils/abstract'\nimport type Anov3D from '../../sdkEntry'\nimport type Entity from '../entity'\nimport { hybridList } from '../entity'\nimport { entityEvents } from './entityEvents'\n\nconst { emitter } = utils\n\n/**\n * notes: 区别于前端概念,3端统一API特定\n */\n\nclass EventBus implements BaseModule {\n eventMap: Map<string, boolean> = new Map()\n eventTimesMap: Map<string, number> = new Map()\n app: Anov3D & { entity: Entity }\n\n constructor(app: Anov3D & { entity: Entity }) {\n this.app = app\n\n // @ts-ignore\n emitter.on('onEntityLoaded', ({ id }) => {\n this.handleUseOnAfter(id)\n })\n }\n\n /**\n * handle entity event, but only handle the last one use on event\n * @param entityId\n */\n private handleUseOnAfter(entityId: string) {\n this.eventMap.forEach((value, key) => {\n if (value && entityEvents.includes(key.toLowerCase())) {\n this.app.entity.unregisterEvents({\n eventName: key,\n entityId,\n })\n\n this.app.entity.registerEvents({\n eventName: key,\n entityId,\n })\n }\n })\n }\n\n /**\n * handle entity event\n * @param eventName\n */\n private handleUseOnBefore(eventName: string) {\n if (hybridList.map.size > 0) {\n hybridList.map.forEach((entity, key: string) => {\n if (entity.value.userData?.entityParams?.interactable) {\n this.app.entity.unregisterEvents({\n eventName,\n entityId: key,\n })\n\n this.app.entity.registerEvents({\n eventName,\n entityId: key,\n })\n }\n })\n }\n }\n\n /**\n * open event\n * @param params\n */\n on(params: { eventName: string; id?: string }) {\n // 单实体事件注册\n if (params.id) {\n // @ts-ignore\n this.app.entity.registerEvents({\n eventName: params.eventName,\n entityId: params.id,\n })\n return {\n eventName: params.eventName,\n id: params.id,\n }\n }\n // 全局事件注册\n else {\n this.eventMap.set(`${params.eventName}`, true)\n\n if (entityEvents.includes(params.eventName.toLowerCase()))\n this.handleUseOnBefore(params.eventName)\n\n return {\n eventName: params.eventName,\n }\n }\n }\n\n off(params: { eventName: string; entityId?: string }) {\n if (params.entityId) {\n // @ts-ignore\n this.app.entity.unregisterEvents({\n eventName: params.eventName,\n entityId: params.entityId,\n })\n }\n else {\n this.eventMap.set(`${params.eventName}`, false)\n }\n\n return {\n eventName: params.eventName,\n }\n }\n}\n\nexport default EventBus"],"mappings":"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"}
|