var gdjs;(function(_){const R=new _.Logger("LayerPixiRenderer"),T=[[0,1],[1,2],[2,3],[3,0],[4,5],[5,6],[6,7],[7,4],[0,4],[1,5],[2,6],[3,7]],y=[[-1,-1,-1],[1,-1,-1],[1,1,-1],[-1,1,-1],[-1,-1,1],[1,-1,1],[1,1,1],[-1,1,1]],D=o=>{if(o.length<=2)return o;const e=o.reduce((t,i)=>t+i.x,0)/o.length,r=o.reduce((t,i)=>t+i.y,0)/o.length;return o.map(t=>({p:t,a:Math.atan2(t.y-r,t.x-e)})).sort((t,i)=>t.a-i.a).map(t=>t.p)},b=(o,e,r=1e-9)=>{const t=o.z,i=e.z,a=i-t;if(Math.abs(a)1+r?null:new THREE.Vector3(o.x+n*(e.x-o.x),o.y+n*(e.y-o.y),0)},M=(o,e=1e-6)=>{const r=[];for(const t of o)r.some(a=>Math.abs(t.x-a.x){o.updateMatrixWorld(!0);const e=y.map(i=>new THREE.Vector3(i[0],i[1],i[2]).unproject(o));if(e.length!==8)return[];const r=[];for(const i of e)Math.abs(i.z)<1e-9&&r.push(new THREE.Vector3(i.x,i.y,0));for(const[i,a]of T){const n=e[i],h=e[a],l=b(n,h);l&&r.push(l)}const t=M(r);return t.length<3?[]:D(t)},E=(o,e,r)=>{if(!o)return null;o.updateMatrixWorld(!0);const t=new THREE.Vector3,i=new THREE.Vector3,a=new THREE.Vector3(e,r,.5);o instanceof THREE.OrthographicCamera?(a.z=0,a.unproject(o),t.copy(a),o.getWorldDirection(i)):(a.unproject(o),t.copy(o.position),i.copy(a).sub(t).normalize());const n=i.z;if(Math.abs(n)<1e-8)return null;const h=-t.z/n;return h<=0?null:t.addScaledVector(i,h).setZ(0)},H=45,f=class{constructor(e,r,t){this._lightingSprite=null;this._renderTexture=null;this._oldWidth=null;this._oldHeight=null;this._threeGroup=null;this._threeScene=null;this._threeCamera=null;this._threeCameraDirty=!1;this._threeEffectComposer=null;this._basis=null;this._threePlaneTexture=null;this._threePlaneGeometry=null;this._threePlaneMaterial=null;this._threePlaneMesh=null;this._threePlaneMeshDebugOutline=null;this._2DPlaneMaxDrawingDistance=5e3;this._2DPlaneClampFreeTiltDeg=.1;this._2DPlaneClampHardTiltDeg=6;this._2DPlaneClampRampPower=1.5;this._pixiContainer=new PIXI.Container,this._pixiContainer.sortableChildren=!0,this._layer=e,this._isLightingLayer=e.isLightingLayer();const i=r.getRendererObject();i&&i.addChild(this._pixiContainer),this._pixiContainer.filters=[];const a=t.getPIXIRenderer();this._isLightingLayer?(this._clearColor=e.getClearColor(),this._setupLightingRendering(a,r)):(this._clearColor=[..._.hexNumberToRGBArray(this._layer.getRuntimeScene().getBackgroundColor()),0],this._setup3DRendering(a,r))}onCreated(){this._update3DCameraAspectAndPosition()}onGameResolutionResized(){this._update3DCameraAspectAndPosition()}_update3DCameraAspectAndPosition(){if(!!this._threeCamera){if(this._threeCamera instanceof THREE.OrthographicCamera){const e=this._layer.getWidth(),r=this._layer.getHeight();this._threeCamera.left=-e/2,this._threeCamera.right=e/2,this._threeCamera.top=r/2,this._threeCamera.bottom=-r/2}else this._threeCamera.aspect=this._layer.getWidth()/this._layer.getHeight();this._threeCamera.updateProjectionMatrix(),this.updatePosition()}}getRendererObject(){return this._pixiContainer}getThreeScene(){return this._threeScene}getThreeGroup(){return this._threeGroup}getThreeCamera(){return this._threeCamera}getThreeEffectComposer(){return this._threeEffectComposer}addPostProcessingPass(e){if(!this._threeEffectComposer)return;const r=this._layer.getRuntimeScene().getGame(),t=this._threeEffectComposer.passes.length-(r.getAntialiasingMode()==="none"?1:2);this._threeEffectComposer.insertPass(e,t)}removePostProcessingPass(e){!this._threeEffectComposer||this._threeEffectComposer.removePass(e)}hasPostProcessingPass(){if(!this._threeEffectComposer)return!1;const r=this._layer.getRuntimeScene().getGame().getAntialiasingMode()==="none"?2:3;return this._threeEffectComposer.passes.length>r}getLightingSprite(){return this._lightingSprite}_setup3DRendering(e,r){if(typeof THREE!="undefined")if(this._layer instanceof _.Layer){if(this._layer.getRenderingType()===_.RuntimeLayerRenderingType.THREE_D||this._layer.getRenderingType()===_.RuntimeLayerRenderingType.TWO_D_PLUS_THREE_D){if(this._threeScene||this._threeGroup||this._threeCamera)throw new Error("Tried to setup 3D rendering for a layer that is already set up.");if(this._threeScene=new THREE.Scene,this._threeScene.scale.y=-1,this._threeGroup=new THREE.Group,this._threeScene.add(this._threeGroup),this._layer.getCameraType()===_.RuntimeLayerCameraType.ORTHOGRAPHIC){const a=this._layer.getWidth(),n=this._layer.getHeight();this._threeCamera=new THREE.OrthographicCamera(-a/2,a/2,n/2,-n/2,this._layer.getInitialCamera3DNearPlaneDistance(),this._layer.getInitialCamera3DFarPlaneDistance())}else this._threeCamera=new THREE.PerspectiveCamera(this._layer.getInitialCamera3DFieldOfView(),1,this._layer.getInitialCamera3DNearPlaneDistance(),this._layer.getInitialCamera3DFarPlaneDistance());this._threeCamera.rotation.order="ZYX";const t=this._layer.getRuntimeScene().getGame(),i=t.getRenderer().getThreeRenderer();if(i&&(this._threeEffectComposer=new THREE_ADDONS.EffectComposer(i),this._threeEffectComposer.addPass(new THREE_ADDONS.RenderPass(this._threeScene,this._threeCamera)),t.getAntialiasingMode()!=="none"&&this._threeEffectComposer.addPass(new THREE_ADDONS.SMAAPass(t.getGameResolutionWidth(),t.getGameResolutionHeight())),this._threeEffectComposer.addPass(new THREE_ADDONS.OutputPass)),this._layer.getRenderingType()===_.RuntimeLayerRenderingType.TWO_D_PLUS_THREE_D){if(this._renderTexture||this._threePlaneGeometry||this._threePlaneMaterial||this._threePlaneTexture||this._threePlaneMesh)throw new Error("Tried to setup PixiJS plane for 2D rendering in 3D for a layer that is already set up.");this.set2DPlaneMaxDrawingDistance(this._layer.getInitialCamera2DPlaneMaxDrawingDistance()),this._createPixiRenderTexture(e),this._threePlaneGeometry=new THREE.PlaneGeometry(1,1);const a=1,n=1,h=a*n,l=new Uint8Array(4*h),c=new THREE.DataTexture(l,a,n);c.needsUpdate=!0,this._threePlaneTexture=c,this._threePlaneTexture.generateMipmaps=!1;const m=this._layer.getRuntimeScene().getGame().getScaleMode()==="nearest"?THREE.NearestFilter:THREE.LinearFilter;this._threePlaneTexture.minFilter=m,this._threePlaneTexture.magFilter=m,this._threePlaneTexture.wrapS=THREE.ClampToEdgeWrapping,this._threePlaneTexture.wrapT=THREE.ClampToEdgeWrapping;const s={vertexShader:` varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); } `,fragmentShader:` uniform sampler2D map; varying vec2 vUv; void main() { vec4 texel = texture2D(map, vUv); gl_FragColor = texel; } `,uniforms:{map:{value:this._threePlaneTexture}},side:THREE.FrontSide,transparent:!0};this._threePlaneMaterial=new THREE.ShaderMaterial(s),this._threePlaneMaterial,this._threePlaneMesh=new THREE.Mesh(this._threePlaneGeometry,this._threePlaneMaterial),this._threePlaneMesh.renderOrder=Number.MAX_SAFE_INTEGER,this._threeScene.add(this._threePlaneMesh)}}}else{const t=r.get3DRendererObject();if(!t)return;this._threeGroup||(this._threeGroup=new THREE.Group,t.add(this._threeGroup))}}setCamera3DNearPlaneDistance(e){!this._threeCamera||(this._threeCamera.near=Math.min(Math.max(e,1e-4),this._threeCamera.far),this._threeCameraDirty=!0)}getCamera3DNearPlaneDistance(){return this._threeCamera?this._threeCamera.near:0}setCamera3DFarPlaneDistance(e){!this._threeCamera||(this._threeCamera.far=Math.max(e,this._threeCamera.near),this._threeCameraDirty=!0)}getCamera3DFarPlaneDistance(){return this._threeCamera?this._threeCamera.far:0}setCamera3DFieldOfView(e){!this._threeCamera||this._threeCamera instanceof THREE.OrthographicCamera||(this._threeCamera.fov=Math.min(Math.max(e,0),180),this._threeCameraDirty=!0)}getCamera3DFieldOfView(){return this._threeCamera?this._threeCamera?this._threeCamera instanceof THREE.OrthographicCamera?0:this._threeCamera.fov:H:0}show2DRenderingPlane(e){!this._threePlaneMesh||this._threePlaneMesh.visible!==e&&(this._threePlaneMesh.visible=e)}show2DRenderingPlaneDebugOutline(e){if(!!this._threePlaneMesh){if(e&&!this._threePlaneMeshDebugOutline){const r=new THREE.EdgesGeometry(this._threePlaneGeometry),t=new THREE.LineBasicMaterial({color:16711680});this._threePlaneMeshDebugOutline=new THREE.LineSegments(r,t),this._threePlaneMesh.add(this._threePlaneMeshDebugOutline)}!e&&this._threePlaneMeshDebugOutline&&(this._threePlaneMesh.remove(this._threePlaneMeshDebugOutline),this._threePlaneMeshDebugOutline=null)}}set2DPlaneMaxDrawingDistance(e){this._2DPlaneMaxDrawingDistance=Math.max(0,e)}get2DPlaneMaxDrawingDistance(){return this._2DPlaneMaxDrawingDistance}set2DPlaneClampFreeTiltDegrees(e){this._2DPlaneClampFreeTiltDeg=Math.max(0,e)}set2DPlaneClampHardTiltDegrees(e){this._2DPlaneClampHardTiltDeg=Math.max(0,e)}set2DPlaneClampRampPower(e){this._2DPlaneClampRampPower=Math.max(.1,e)}_get2DPlaneSize(){if(!this._threeCamera)return[0,0];const e=v(this._threeCamera);if(e.length===0)return[0,0];let r=1/0,t=-1/0,i=1/0,a=-1/0;for(const g of e)g.xt&&(t=g.x),g.ya&&(a=g.y);let n=Math.max(1e-8,t-r),h=Math.max(1e-8,a-i);const l=this._layer.getWidth()/this._layer.getHeight();n/h=s?p=0:p=(s-d)/(s-u),p=Math.pow(p,this._2DPlaneClampRampPower);const C=1e12,I=Math.max(p,1e-6),P=Math.min(C,this._2DPlaneMaxDrawingDistance/I);if(P0}has2DObjects(){return this._pixiContainer.children.length>0}add3DRendererObject(e){!this._threeGroup||this._threeGroup.add(e)}remove3DRendererObject(e){!this._threeGroup||this._threeGroup.remove(e)}updateClearColor(){this._clearColor=this._layer.getClearColor()}_createPixiRenderTexture(e){if(!e||e.type!==PIXI.RENDERER_TYPE.WEBGL)return;if(this._renderTexture){R.error("Tried to create a PixiJS RenderTexture for a layer that already has one.");return}this._oldWidth=e.screen.width,this._oldHeight=e.screen.height;const r=this._oldWidth,t=this._oldHeight,i=e.resolution;this._renderTexture=PIXI.RenderTexture.create({width:r||100,height:t||100,resolution:i}),this._renderTexture.baseTexture.scaleMode=PIXI.SCALE_MODES.LINEAR,R.info(`RenderTexture created for layer ${this._layer.getName()}.`)}renderOnPixiRenderTexture(e){if(!this._renderTexture)return;(this._oldWidth!==e.screen.width||this._oldHeight!==e.screen.height)&&(this._renderTexture.resize(e.screen.width||100,e.screen.height||100),this._oldWidth=e.screen.width,this._oldHeight=e.screen.height);const r=e.renderTexture.current||void 0,t=e.renderTexture.sourceFrame;e.renderTexture.bind(this._renderTexture),this._clearColor[3]=this._isLightingLayer?1:0,e.renderTexture.clear(this._clearColor),e.render(this._pixiContainer,{renderTexture:this._renderTexture,clear:!1}),e.renderTexture.bind(r,t,void 0)}updateThreePlaneTextureFromPixiRenderTexture(e,r){if(!this._threePlaneTexture||!this._renderTexture)return;const t=this._renderTexture.baseTexture._glTextures[r.CONTEXT_UID];if(t){const i=e.properties.get(this._threePlaneTexture);i.__webglTexture=t.texture}}_setupLightingRendering(e,r){if(this._createPixiRenderTexture(e),!this._renderTexture)return;this._lightingSprite=new PIXI.Sprite(this._renderTexture),this._lightingSprite.blendMode=PIXI.BLEND_MODES.MULTIPLY;const t=r.getRendererObject();if(t){const i=t.getChildIndex(this._pixiContainer);t.addChildAt(this._lightingSprite,i),t.removeChild(this._pixiContainer)}}};let x=f;x.matrix4=null,x.zeroZOrderForPixi=Math.pow(2,-24),x.vectorForProjections=null,_.LayerPixiRenderer=x;class w{constructor(){this.isDirty=!0;this.forwardX=0;this.forwardY=0;this.forwardZ=0;this.upX=0;this.upY=0;this.upZ=0;this.rightX=0;this.rightY=0;this.rightZ=0}}_.LayerRenderer=_.LayerPixiRenderer})(gdjs||(gdjs={})); //# sourceMappingURL=layer-pixi-renderer.js.map