Files
GdevelopMMOTestv1/Export/pixi-renderers/layer-pixi-renderer.js
T

16 lines
17 KiB
JavaScript
Raw Normal View History

2026-07-28 10:47:32 -04:00
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)<r)return Math.abs(t)<r&&Math.abs(i)<r,null;const n=-t/a;return n<-r||n>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)<e&&Math.abs(t.y-a.y)<e)||r.push(t);return r},v=o=>{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
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.x<r&&(r=g.x),g.x>t&&(t=g.x),g.y<i&&(i=g.y),g.y>a&&(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<l?n=l*h:h=n/l;const m=new THREE.Vector3;this._threeCamera.getWorldDirection(m);const s=Math.cos(THREE.MathUtils.degToRad(this._2DPlaneClampFreeTiltDeg)),u=Math.cos(THREE.MathUtils.degToRad(this._2DPlaneClampHardTiltDeg)),d=Math.abs(m.z);let p=0;d<=u?p=1:d>=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(P<C){const g=Math.max(1e-8,Math.min(h,P));g!==h&&(h=g,n=l*h)}return[n,h]}_get2DPlanePosition(e){if(!this._threeCamera)return[0,0];const r=E(this._threeCamera,-1,-1),t=E(this._threeCamera,1,-1);let i,a;if(r&&t){const n=.5*(r.x+t.x),h=.5*(r.y+t.y);let l=t.x-r.x,c=t.y-r.y;const m=Math.hypot(l,c)||1;l/=m,c/=m;let s=-c,u=l;const d=E(this._threeCamera,0,-.5);if(d){const p=d.x-n,C=d.y-h;p*s+C*u<0&&(s=-s,u=-u)}i=n+s*(e*.5),a=h+u*(e*.5)}else{const n=E(this._threeCamera,0,0);n?(i=n.x,a=n.y):(i=this._threeCamera.position.x,a=this._threeCamera.position.y)}return[i,a]}updatePosition(){const e=this._layer.getInstanceContainer(),r=e.getGame();if(this._threeCamera){const l=-_.toRad(this._layer.getCameraRotation());this._threeCamera.position.x=this._layer.getCameraX(),this._threeCamera.position.y=-this._layer.getCameraY(),this._threeCamera.rotation.z=l,this._threeCamera instanceof THREE.OrthographicCamera?(this._threeCamera.zoom=this._layer.getCameraZoom(),this._threeCamera.updateProjectionMatrix(),this._threeCamera.position.z=this._layer.getCameraZ(null)):this._threeCamera.position.z=this._layer.getCameraZ(this._threeCamera.fov)}let t=1;c
//# sourceMappingURL=layer-pixi-renderer.js.map