UNPKG

ecspresso

Version:

A minimal Entity-Component-System library for typescript and javascript.

5 lines (3 loc) 6.21 kB
var E=((K)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(K,{get:(Y,Z)=>(typeof require<"u"?require:Y)[Z]}):K)(function(K){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+K+'" is not supported')});import{definePlugin as w}from"ecspresso";import{createTransform3DPlugin as u,createTransform3D as m,DEFAULT_LOCAL_TRANSFORM_3D as D}from"ecspresso/plugins/spatial/transform3D";import{createTransform3D as t,createLocalTransform3D as o,createWorldTransform3D as e,DEFAULT_LOCAL_TRANSFORM_3D as xx,DEFAULT_WORLD_TRANSFORM_3D as Bx}from"ecspresso/plugins/spatial/transform3D";function v(K,Y){let Z=Y?.scale,A=typeof Z==="number"?{scale:Z}:Z?{scaleX:Z.x,scaleY:Z.y,scaleZ:Z.z}:void 0;return m(K?.x??0,K?.y??0,K?.z??0,{rotation:Y?.rotation,...A})}function l(K,Y,Z){return{mesh:K,...v(Y,Z),visible3d:{visible:Z?.visible??!0}}}function i(K,Y,Z){return{group:K,...v(Y,Z),visible3d:{visible:Z?.visible??!0}}}function s(K,Y,Z){return{object3d:K,...v(Y,Z),visible3d:{visible:Z?.visible??!0}}}function f(K,Y,Z,A,L,W,_){A.set(Y.x,Y.y,Y.z),L.set(Y.rx,Y.ry,Y.rz,"XYZ"),W.setFromEuler(L),_.set(Y.sx,Y.sy,Y.sz),K.matrix.compose(A,W,_),K.matrixWorld.copy(K.matrix),K.visible=Z.visible}function n(K){let{systemGroup:Y="renderer3d",renderSyncPriority:Z=500,transform:A,startLoop:L=!0}=K,W=new Map,_=null,g=null,S=null,C=null,j=null,T=null,y=null,h=!(("renderer"in K)&&K.renderer!==void 0);return w("renderer3d").withComponentTypes().withEventTypes().withResourceTypes().withLabels().withGroups().withReactiveQueryNames().install((z)=>{if(z.installPlugin(u(A)),h){let B=K,{background:M,width:F,height:H,antialias:U=!0,shadows:Q=!1,cameraOptions:J,threeInit:G}=B,k=B.container??document.body;z.addResource("threeRenderer",async()=>{let{WebGLRenderer:x}=await import("three"),X=typeof k==="string"?document.querySelector(k):k,$={antialias:U,powerPreference:"high-performance",...G},N=new x($);if(Q)N.shadowMap.enabled=!0;let P=F??X?.clientWidth??window.innerWidth,V=H??X?.clientHeight??window.innerHeight;if(N.setSize(P,V),X)X.appendChild(N.domElement);else if(typeof k==="string")console.warn(`Renderer3D plugin: container selector "${k}" not found`);return N}),z.addResource("scene",{dependsOn:["threeRenderer"],factory:async()=>{let{Scene:x,Color:X}=await import("three"),$=new x;if(M!==void 0)$.background=new X(M);return $}}),z.addResource("camera",{dependsOn:["threeRenderer"],factory:async(x)=>{let X=x.getResource("threeRenderer"),$=X.domElement.width/X.domElement.height,N=J?.near??0.1,P=J?.far??1000,V;if(J?.projection==="orthographic"){let{OrthographicCamera:q}=await import("three"),I=(J.viewSize??10)/2,b=I*$,R=new q(-b,b,I,-I,N,P);R.zoom=J.zoom??1,R.updateProjectionMatrix(),V=R}else{let{PerspectiveCamera:q}=await import("three"),O=J?.fov??75;V=new q(O,$,N,P)}if(J?.position)V.position.set(J.position.x,J.position.y,J.position.z);if(J?.lookAt)V.lookAt(J.lookAt.x,J.lookAt.y,J.lookAt.z);return V}})}else{let B=K;z.addResource("threeRenderer",B.renderer),z.addResource("scene",B.scene),z.addResource("camera",B.camera)}z.registerDispose("mesh",({value:B})=>{if(B.parent)B.parent.remove(B)}),z.registerDispose("group",({value:B})=>{if(B.parent)B.parent.remove(B)}),z.registerDispose("object3d",({value:B})=>{if(B.parent)B.parent.remove(B)}),z.registerRequired("mesh","localTransform3D",()=>({...D})),z.registerRequired("mesh","visible3d",()=>({visible:!0})),z.registerRequired("group","localTransform3D",()=>({...D})),z.registerRequired("group","visible3d",()=>({visible:!0})),z.registerRequired("object3d","localTransform3D",()=>({...D})),z.registerRequired("object3d","visible3d",()=>({visible:!0})),z.addSystem("renderer3d-sync").setPriority(Z).inPhase("render").inGroup(Y).addQuery("meshes",{with:["mesh","worldTransform3D","visible3d"],changed:["worldTransform3D"]}).addQuery("groups",{with:["group","worldTransform3D","visible3d"],changed:["worldTransform3D"]}).addQuery("objects",{with:["object3d","worldTransform3D","visible3d"],changed:["worldTransform3D"]}).setProcess(({queries:B})=>{let M=C,F=j,H=T,U=y;if(!M||!F||!H||!U)return;for(let Q of B.meshes){let{mesh:J,worldTransform3D:G,visible3d:k}=Q.components;f(J,G,k,M,F,H,U)}for(let Q of B.groups){let{group:J,worldTransform3D:G,visible3d:k}=Q.components;f(J,G,k,M,F,H,U)}for(let Q of B.objects){let{object3d:J,worldTransform3D:G,visible3d:k}=Q.components;f(J,G,k,M,F,H,U)}}),z.addSystem("renderer3d-scene-graph").setPriority(9999).inGroup(Y).setOnInitialize(async(B)=>{let{Vector3:M,Euler:F,Quaternion:H}=await import("three");C=new M,j=new F,T=new H,y=new M;let U=B.getResource("scene"),Q=B.getResource("threeRenderer"),J=B.getResource("camera");_=Q,g=U,S=J;function G(x,X){X.matrixAutoUpdate=!1,X.matrixWorldAutoUpdate=!1,W.set(x,X),U.add(X)}B.addReactiveQuery("renderer3d-meshes",{with:["mesh"],onEnter:(x)=>{G(x.id,x.components.mesh)},onExit:(x)=>{W.delete(x)}}),B.addReactiveQuery("renderer3d-groups",{with:["group"],onEnter:(x)=>{G(x.id,x.components.group)},onExit:(x)=>{W.delete(x)}}),B.addReactiveQuery("renderer3d-objects",{with:["object3d"],onEnter:(x)=>{G(x.id,x.components.object3d)},onExit:(x)=>{W.delete(x)}}),B.on("hierarchyChanged",({entityId:x})=>{let X=W.get(x);if(!X)return;if(X.parent!==U)U.add(X)});let k=()=>{let x=Q.domElement.parentElement?.clientWidth??window.innerWidth,X=Q.domElement.parentElement?.clientHeight??window.innerHeight;if(Q.setSize(x,X),J.isPerspectiveCamera){let $=J;$.aspect=x/X,$.updateProjectionMatrix()}else if(J.isOrthographicCamera){let $=J,N=($.top-$.bottom)/2,P=N*(x/X);$.left=-P,$.right=P,$.top=N,$.bottom=-N,$.updateProjectionMatrix()}};if(window.addEventListener("resize",k),L){let x=0,X=($)=>{requestAnimationFrame(X);let N=x===0?0:($-x)/1000;x=$,B.update(N)};requestAnimationFrame(X)}}),z.addSystem("renderer3d-render").setPriority(0).inPhase("render").inGroup(Y).setProcess(()=>{if(_&&g&&S)_.render(g,S)})})}export{e as createWorldTransform3D,t as createTransform3D,n as createRenderer3DPlugin,s as createObject3DComponents,l as createMeshComponents,o as createLocalTransform3D,i as createGroupComponents,Bx as DEFAULT_WORLD_TRANSFORM_3D,xx as DEFAULT_LOCAL_TRANSFORM_3D}; //# debugId=4D8B1BD0246DFAAD64756E2164756E21 //# sourceMappingURL=renderer3D.js.map