UNPKG

@wonderlandengine/api

Version:

Wonderland Engine's JavaScript API.

1 lines 154 kB
var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __decorateClass=(decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp(target,key,result),result};var threads=()=>(async e=>{try{return typeof MessageChannel<"u"&&new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(e)}catch{return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]));var Type=(Type2=>(Type2[Type2.Native=0]="Native",Type2[Type2.Bool=1]="Bool",Type2[Type2.Int=2]="Int",Type2[Type2.Float=3]="Float",Type2[Type2.String=4]="String",Type2[Type2.Enum=5]="Enum",Type2[Type2.Object=6]="Object",Type2[Type2.Mesh=7]="Mesh",Type2[Type2.Texture=8]="Texture",Type2[Type2.Material=9]="Material",Type2[Type2.Animation=10]="Animation",Type2[Type2.Skin=11]="Skin",Type2[Type2.Color=12]="Color",Type2[Type2.Vector2=13]="Vector2",Type2[Type2.Vector3=14]="Vector3",Type2[Type2.Vector4=15]="Vector4",Type2[Type2.Array=16]="Array",Type2[Type2.Record=17]="Record",Type2[Type2.ParticleEffect=18]="ParticleEffect",Type2[Type2.Count=19]="Count",Type2))(Type||{}),DefaultPropertyCloner=class{clone(type,value){switch(type){case 12:case 13:case 14:case 15:case 16:return value.slice();case 17:{if(!value||!value.constructor)return value;let RecordClass=value.constructor,result=new RecordClass;for(let key in RecordClass.Properties){let prop=RecordClass.Properties[key];result[key]=this.clone(prop.type,value[key])}return result}default:return value}}},defaultPropertyCloner=new DefaultPropertyCloner,Property={bool(defaultValue=!1){return{type:1,default:defaultValue}},int(defaultValue=0){return{type:2,default:defaultValue}},float(defaultValue=0){return{type:3,default:defaultValue}},string(defaultValue=""){return{type:4,default:defaultValue}},enum(values,defaultValue){return{type:5,values,default:defaultValue}},object(opts){return{type:6,default:null,required:opts?.required??!1}},mesh(opts){return{type:7,default:null,required:opts?.required??!1}},texture(opts){return{type:8,default:null,required:opts?.required??!1}},material(opts){return{type:9,default:null,required:opts?.required??!1}},animation(opts){return{type:10,default:null,required:opts?.required??!1}},skin(opts){return{type:11,default:null,required:opts?.required??!1}},particleEffect(opts){return{type:18,default:null,required:opts?.required??!1}},color(r=0,g=0,b=0,a=1){return{type:12,default:[r,g,b,a]}},vector2(x=0,y=0){return{type:13,default:[x,y]}},vector3(x=0,y=0,z=0){return{type:14,default:[x,y,z]}},vector4(x=0,y=0,z=0,w=0){return{type:15,default:[x,y,z,w]}},record(definition){return{type:17,record:definition,default:new definition}},array(element){return{type:16,element,default:void 0}}};function propertyDecorator(data){return function(target,propertyKey){let ctor=target.constructor;ctor.Properties=ctor.hasOwnProperty("Properties")?ctor.Properties:{},ctor.Properties[propertyKey]=data}}function enumerable(){return function(_,__,descriptor){descriptor.enumerable=!0}}function nativeProperty(){return function(target,propertyKey,descriptor){enumerable()(target,propertyKey,descriptor),propertyDecorator({type:0})(target,propertyKey)}}var property={};for(let name in Property)property[name]=(...args)=>{let functor=Property[name];return propertyDecorator(functor(...args))};function isString(value){return value===""?!0:value&&(typeof value=="string"||value.constructor===String)}function isNumber(value){return value==null?!1:typeof value=="number"||value.constructor===Number}function isImageLike(value){return value instanceof HTMLImageElement||value instanceof HTMLVideoElement||value instanceof HTMLCanvasElement}var Emitter=class{_listeners=[];_notifying=!1;_transactions=[];add(listener,opts={}){let{once=!1,id=void 0}=opts,data={id,once,callback:listener};return this._notifying?(this._transactions.push({type:1,data}),this):(this._listeners.push(data),this)}push(...listeners){for(let cb of listeners)this.add(cb);return this}once(listener){return this.add(listener,{once:!0})}remove(listener){if(this._notifying)return this._transactions.push({type:2,data:listener}),this;let listeners=this._listeners;for(let i=0;i<listeners.length;++i){let target=listeners[i];(target.callback===listener||target.id===listener)&&listeners.splice(i--,1)}return this}has(listener){let listeners=this._listeners;for(let i=0;i<listeners.length;++i){let target=listeners[i];if(target.callback===listener||target.id===listener)return!0}return!1}notify(...data){let listeners=this._listeners;this._notifying=!0;for(let i=0;i<listeners.length;++i){let listener=listeners[i];listener.once&&listeners.splice(i--,1);try{listener.callback(...data)}catch(e){console.error(e)}}this._notifying=!1,this._flushTransactions()}notifyUnsafe(...data){let listeners=this._listeners;for(let i=0;i<listeners.length;++i){let listener=listeners[i];listener.once&&listeners.splice(i--,1),listener.callback(...data)}this._flushTransactions()}promise(){return new Promise((res,_)=>{this.once((...args)=>{args.length>1?res(args):res(args[0])})})}get listenerCount(){return this._listeners.length}get isEmpty(){return this.listenerCount===0}_flushTransactions(){let listeners=this._listeners;for(let transaction of this._transactions)transaction.type===1?listeners.push(transaction.data):this.remove(transaction.data);this._transactions.length=0}},RetainEmitterUndefined={},RetainEmitter=class extends Emitter{_event=RetainEmitterUndefined;_reset;add(listener,opts){let immediate=opts?.immediate??!0;return this._event!==RetainEmitterUndefined&&immediate&&listener(...this._event),super.add(listener,opts),this}once(listener,immediate){return this.add(listener,{once:!0,immediate})}notify(...data){this._event=data,super.notify(...data)}notifyUnsafe(...data){this._event=data,super.notifyUnsafe(...data)}reset(){return this._event=RetainEmitterUndefined,this}get data(){return this.isDataRetained?this._event:void 0}get isDataRetained(){return this._event!==RetainEmitterUndefined}};function createDestroyedProxy(host,type){return new Proxy({},{get(_,param){if(param==="isDestroyed")return!0;throw new Error(`Cannot read '${param}' of destroyed '${type.name}' resource from ${host}`)},set(_,param){throw new Error(`Cannot write '${param}' of destroyed '${type.name}' resource from ${host}`)}})}var Resource=class{_index=-1;_id=-1;_engine;constructor(engine,index){this._engine=engine,this._index=index,this._id=index}get engine(){return this._engine}get index(){return this._index}equals(other){return other?this._index===other._index:!1}get isDestroyed(){return this._index<=0}},SceneResource=class _SceneResource{static _pack(scene,index){return scene<<22|index}_index=-1;_id=-1;_scene;constructor(scene,index){this._scene=scene,this._index=index,this._id=_SceneResource._pack(scene._index,index)}equals(other){return other?this._id===other._id:!1}get scene(){return this._scene}get engine(){return this._scene.engine}get index(){return this._index}get isDestroyed(){return this._id<=0}},ResourceManager=class{_host;_cache=[];_template;_destructor=null;_engine;constructor(host,Class){this._host=host,this._template=Class,this._engine=host.engine??host}wrap(index){return index<=0?null:this._cache[index]??(this._cache[index]=new this._template(this._host,index))}get(index){return this._cache[index]??null}get allocatedCount(){return this._cache.length}get count(){let count=0;for(let res of this._cache)res&&res.index>=0&&++count;return count}get engine(){return this._engine}_destroy(instance){let index=instance.index;instance._index=-1,instance._id=-1,this._cache[index]=null,this.engine.erasePrototypeOnDestroy&&(this._destructor||(this._destructor=createDestroyedProxy(this._host,this._template)),Object.setPrototypeOf(instance,this._destructor))}_clear(){if(this.engine.erasePrototypeOnDestroy){for(let i=0;i<this._cache.length;++i){let instance=this._cache[i];instance&&this._destroy(instance)}this._cache.length=0}}};function decode(data,tagger=(_,value)=>value,options={}){let reader=new CBORReader(data);reader.tagger=tagger,options.dictionary&&(reader.dictionary=options.dictionary);let ret=reader.decodeItem();if(reader.offset!==data.byteLength)throw new Error("CBORError: Remaining bytes");return ret}var CBORType=(CBORType2=>(CBORType2[CBORType2.Array=0]="Array",CBORType2[CBORType2.Record=1]="Record",CBORType2[CBORType2.Constant=2]="Constant",CBORType2[CBORType2.Native=3]="Native",CBORType2))(CBORType||{});function getType(typeInfo){let majorType=typeInfo>>5,additionalInformation=typeInfo&31;switch(majorType){case 4:return 0;case 5:return 1;case 7:return 2}return 3}function isUndefined(type,length){return type===2&&length===23}var CBORReader=class{dataView;data;offset;tagger=(_,value)=>value;dictionary="object";constructor(data){this.dataView=new DataView(data.buffer,data.byteOffset,data.byteLength),this.data=data,this.offset=0}readTypeInfo(){return this.readUint8()}readArrayLength(typeInfo){let majorType=typeInfo>>5,additionalInformation=typeInfo&31,length=this.readLength(additionalInformation);if(length<0&&(majorType<2||6<majorType))throw new Error("CBORError: Invalid length");return length}readItem(typeInfo,inputLen=null){let majorType=typeInfo>>5,additionalInformation=typeInfo&31,i;if(majorType===7)switch(additionalInformation){case 25:return this.readFloat16();case 26:return this.readFloat32();case 27:return this.readFloat64()}let length=inputLen===null?this.readLength(additionalInformation):inputLen;if(length<0&&(majorType<2||6<majorType))throw new Error("CBORError: Invalid length");switch(majorType){case 0:return length;case 1:return typeof length=="number"?-1-length:-1n-length;case 2:{if(length<0){let elements=[],fullArrayLength=0;for(;(length=this.readIndefiniteStringLength(majorType))>=0;)fullArrayLength+=length,elements.push(this.readArrayBuffer(length));let fullArray=new Uint8Array(fullArrayLength),fullArrayOffset=0;for(i=0;i<elements.length;++i)fullArray.set(elements[i],fullArrayOffset),fullArrayOffset+=elements[i].length;return fullArray}return this.readArrayBuffer(length).slice()}case 3:{let utf16data=[];if(length<0)for(;(length=this.readIndefiniteStringLength(majorType))>=0;)this.appendUtf16Data(utf16data,length);else this.appendUtf16Data(utf16data,length);let string="",DECODE_CHUNK_SIZE=8192;for(i=0;i<utf16data.length;i+=DECODE_CHUNK_SIZE)string+=String.fromCharCode.apply(null,utf16data.slice(i,i+DECODE_CHUNK_SIZE));return string}case 4:{let retArray;if(length<0)for(retArray=[];!this.readBreak();)retArray.push(this.decodeItem());else for(retArray=new Array(length),i=0;i<length;++i)retArray[i]=this.decodeItem();return retArray}case 5:{if(this.dictionary==="map"){let retMap=new Map;for(i=0;i<length||length<0&&!this.readBreak();++i){let key=this.decodeItem();if(retMap.has(key))throw new Error("CBORError: Duplicate key encountered");retMap.set(key,this.decodeItem())}return retMap}let retObject={};for(i=0;i<length||length<0&&!this.readBreak();++i){let key=this.decodeItem();if(Object.prototype.hasOwnProperty.call(retObject,key))throw new Error("CBORError: Duplicate key encountered");retObject[key]=this.decodeItem()}return retObject}case 6:{let value=this.decodeItem(),tag=length;if(value instanceof Uint8Array)switch(tag){case 2:case 3:let num=value.reduce((acc,n)=>(acc<<8n)+BigInt(n),0n);return tag==3&&(num=-1n-num),num;case 64:return value;case 72:return new Int8Array(value.buffer);case 69:return new Uint16Array(value.buffer);case 77:return new Int16Array(value.buffer);case 70:return new Uint32Array(value.buffer);case 78:return new Int32Array(value.buffer);case 71:return new BigUint64Array(value.buffer);case 79:return new BigInt64Array(value.buffer);case 85:return new Float32Array(value.buffer);case 86:return new Float64Array(value.buffer)}return this.tagger(tag,value)}case 7:switch(length){case 20:return!1;case 21:return!0;case 22:return null;case 23:return;default:return length}}}decodeItem(){let initialByte=this.readUint8();return this.readItem(initialByte)}readArrayBuffer(length){return this.commitRead(length,this.data.subarray(this.offset,this.offset+length))}readFloat16(){let POW_2_24=5960464477539063e-23,tempArrayBuffer=new ArrayBuffer(4),tempDataView=new DataView(tempArrayBuffer),value=this.readUint16(),sign=value&32768,exponent=value&31744,fraction=value&1023;if(exponent===31744)exponent=261120;else if(exponent!==0)exponent+=114688;else if(fraction!==0)return(sign?-1:1)*fraction*POW_2_24;return tempDataView.setUint32(0,sign<<16|exponent<<13|fraction<<13),tempDataView.getFloat32(0)}readFloat32(){return this.commitRead(4,this.dataView.getFloat32(this.offset))}readFloat64(){return this.commitRead(8,this.dataView.getFloat64(this.offset))}readUint8(){return this.commitRead(1,this.data[this.offset])}readUint16(){return this.commitRead(2,this.dataView.getUint16(this.offset))}readUint32(){return this.commitRead(4,this.dataView.getUint32(this.offset))}readUint64(){return this.commitRead(8,this.dataView.getBigUint64(this.offset))}readBreak(){return this.data[this.offset]!==255?!1:(this.offset+=1,!0)}readLength(additionalInformation){if(additionalInformation<24)return additionalInformation;if(additionalInformation===24)return this.readUint8();if(additionalInformation===25)return this.readUint16();if(additionalInformation===26)return this.readUint32();if(additionalInformation===27){let integer=this.readUint64();return integer<=Number.MAX_SAFE_INTEGER?Number(integer):integer}if(additionalInformation===31)return-1;throw new Error("CBORError: Invalid length encoding")}readIndefiniteStringLength(majorType){let initialByte=this.readUint8();if(initialByte===255)return-1;let length=this.readLength(initialByte&31);if(length<0||initialByte>>5!==majorType)throw new Error("CBORError: Invalid indefinite length element");return Number(length)}appendUtf16Data(utf16data,length){for(let i=0;i<length;++i){let value=this.readUint8();value&128&&(value<224?(value=(value&31)<<6|this.readUint8()&63,length-=1):value<240?(value=(value&15)<<12|(this.readUint8()&63)<<6|this.readUint8()&63,length-=2):(value=(value&7)<<18|(this.readUint8()&63)<<12|(this.readUint8()&63)<<6|this.readUint8()&63,length-=3)),value<65536?utf16data.push(value):(value-=65536,utf16data.push(55296|value>>10),utf16data.push(56320|value&1023))}}commitRead(length,value){return this.offset+=length,value}};var ComponentManagers=class{animation=-1;collision=-1;js=-1;physx=-1;view=-1;_cache=[];_constructors;_nativeManagers=new Map;_scene;constructor(scene){this._scene=scene;let wasm=this._scene.engine.wasm,native=[AnimationComponent,CollisionComponent,InputComponent,LightComponent,MeshComponent,PhysXComponent,TextComponent,ViewComponent,ParticleEffectComponent];this._cache=new Array(native.length),this._constructors=new Array(native.length);for(let Class of native){let ptr2=wasm.tempUTF8(Class.TypeName),manager=wasm._wl_scene_get_component_manager_index(scene._index,ptr2);this._constructors[manager]=Class,this._cache[manager]=[],this._nativeManagers.set(Class.TypeName,manager)}this.animation=this._nativeManagers.get(AnimationComponent.TypeName),this.collision=this._nativeManagers.get(CollisionComponent.TypeName),this.physx=this._nativeManagers.get(PhysXComponent.TypeName),this.view=this._nativeManagers.get(ViewComponent.TypeName);let ptr=wasm.tempUTF8("js");this.js=wasm._wl_scene_get_component_manager_index(scene._index,ptr),this._cache[this.js]=[]}createJs(index,id,type,object){let ctor=this._scene.engine.wasm._componentTypes[type];if(!ctor)throw new Error(`Type index ${type} isn't registered`);let log=this._scene.engine.log,component=null;try{component=new ctor(this._scene,this.js,id)}catch(e){log.error(2,`Exception during instantiation of component ${ctor.TypeName}`),log.error(2,e),component=new BrokenComponent(this._scene)}component._object=this._scene.wrap(object);try{component.resetProperties()}catch(e){log.error(2,`Exception during ${component.type} resetProperties() on object ${component.object.name}`),log.error(2,e)}return this._scene._jsComponents[index]=component,this._cache[this.js][id]=component,component}components(type,active){return this.componentsFromTypename(type.TypeName,active)}componentsFromTypename(typename,active){let wasm=this._scene.engine.wasm,manager=this.getNativeManager(typename)??this.js,subTypeIndex=manager===this.js?wasm._componentTypeIndices[typename]??0:0,maxRead=wasm._tempMemSize/4,components=[],read=0,offset=0;for(;read=wasm._wl_scene_get_components(this._scene._index,manager,subTypeIndex,active,offset,maxRead,wasm._tempMem);){for(let i=0;i<read;++i){let id=wasm._tempMemUint32[i];components.push(this.wrapAny(manager,id))}offset+=maxRead}return components}componentAt(type,index){let wasm=this._scene.engine.wasm,manager=this.getNativeManager(type.TypeName),id=wasm._wl_scene_get_component(this._scene._index,manager,index);return this.wrapAny(manager,id)}get(manager,id){return this._cache[manager][id]??null}wrapAnimation(id){return this.wrapNative(this.animation,id)}wrapCollision(id){return this.wrapNative(this.collision,id)}wrapView(id){return this.wrapNative(this.view,id)}wrapPhysx(id){return this.wrapNative(this.physx,id)}wrapNative(manager,id){if(id<0)return null;let cache=this._cache[manager];if(cache[id])return cache[id];let scene=this._scene,Class=this._constructors[manager],component=new Class(scene,manager,id);return cache[id]=component,component}wrapAny(manager,id){if(id<0)return null;if(manager===this.js){let found=this._cache[this.js][id];if(!found)throw new Error("JS components must always be cached");return found.constructor!==BrokenComponent?found:null}return this.wrapNative(manager,id)}getNativeManager(name){let manager=this._nativeManagers.get(name);return manager!==void 0?manager:null}destroy(instance){let localId=instance._localId,manager=instance._manager;instance._id=-1,instance._localId=-1,instance._manager=-1,this._scene.engine.erasePrototypeOnDestroy&&instance&&Object.setPrototypeOf(instance,DestroyedComponentInstance),this._cache[manager][localId]=null}get managersCount(){return this._scene.engine.wasm._wl_scene_get_component_manager_count(this._scene._index)}};function resetComponentProperties(record){let properties=record.constructor.Properties;if(properties)for(let name in properties){let property2=properties[name],cloner=property2.cloner??defaultPropertyCloner;record[name]=cloner.clone(property2.type,property2.default)}}function setupComponentClass(ctor){inheritProperties(ctor);for(let name in ctor.Properties){let prop=ctor.Properties[name],record=null;switch(prop.type){case 17:record=prop.record;break;case 16:record=prop.element?.record;break;default:break}record&&!record._propertyOrder&&setupComponentClass(record)}_setupDefaults(ctor),_setPropertyOrder(ctor)}var ComponentPropertyDecoder=class{scene;offsets;constructor(scene,offsets){this.scene=scene,this.offsets=offsets}decode(cbor,component){let ctor=component.constructor;ctor._propertyOrder||setupComponentClass(ctor);let typeInfo=cbor.readTypeInfo();if(ctor===BrokenComponent)return cbor.readItem(typeInfo);if(getType(typeInfo)!==0)return this._error(`${component} parameters not encoded as an array.`),cbor.readItem(typeInfo);let paramNames=ctor._propertyOrder,count=cbor.readArrayLength(typeInfo);if(count!==paramNames.length)return this._error(`${component} has ${count} parameters encoded, but expected ${paramNames.length}`),cbor.readItem(typeInfo,count);for(let j=0;j<count;++j){let name=paramNames[j],property2=ctor.Properties[name];component[name]=this.decodeProperty(cbor,name,property2)}}decodeProperty(cbor,name,property2){let typeInfo=cbor.readTypeInfo();if(property2.type===17)return this.decodeRecordProperty(cbor,name,property2,typeInfo);if(property2.type===16)return this.decodeArrayProperty(cbor,name,property2,typeInfo);let value=cbor.readItem(typeInfo);if(value===void 0)return value=(property2.cloner??defaultPropertyCloner).clone(property2.type,property2.default),value;typeof value=="number"&&(value+=this.offsets[property2.type]);let engine=this.scene.engine;switch(property2.type){case 1:case 2:case 3:case 4:case 5:case 13:case 14:case 15:return value;case 6:{let wasm=engine.wasm;return value?this.scene.wrap(wasm._wl_object_id(this.scene._index,value)):null}case 7:return engine.meshes.wrap(value);case 8:return engine.textures.wrap(value);case 9:return engine.materials.wrap(value);case 18:return engine.particleEffects.wrap(value);case 10:return this.scene.animations.wrap(value);case 11:return this.scene.skins.wrap(value);case 12:{let max=(1<<value.BYTES_PER_ELEMENT*8)-1;return Float32Array.from(value,(f,_)=>f/max)}}}decodeRecordProperty(cbor,name,property2,typeInfo){let cborType=getType(typeInfo);if(cborType!==0&&cborType!==2)return this._error(`Record parameter '${name}' not serialized as an array`),cbor.readItem(typeInfo),null;let record=property2.record;if(!record)return this._error(`Record parameter '${name}' .record is undefined`),cbor.readItem(typeInfo),null;record._propertyOrder||setupComponentClass(record);let propertyOrder=record._propertyOrder,count=cbor.readArrayLength(typeInfo);if(isUndefined(cborType,count))return(property2.cloner??defaultPropertyCloner).clone(property2.type,property2.default);let result=new record;if(count!==propertyOrder.length){let propsCount=propertyOrder.length;return this._error(`Record parameter ${name} has ${count} sub-parameters encoded, but expected ${propsCount}`),cbor.readItem(typeInfo,count),result}let order=record._propertyOrder;for(let i=0;i<order.length;++i){let key=order[i],prop=record.Properties[key];result[key]=this.decodeProperty(cbor,key,prop)}return result}decodeArrayProperty(cbor,name,property2,typeInfo){let log=this.scene.engine.log,cborType=getType(typeInfo);if(cborType!==0&&cborType!==2)return this._error(`Array parameter '${name}' not serialized as an array`),cbor.readItem(typeInfo),[];if(!property2.element)return this._error(`Array parameter '${name}' .element property is undefined`),cbor.readItem(typeInfo),[];let count=cbor.readArrayLength(typeInfo);if(isUndefined(cborType,count))return[];let result=new Array(count);for(let i=0;i<count;++i)result[i]=this.decodeProperty(cbor,name,property2.element);return result}_error(msg){this.scene.engine.log.error(0,msg)}},_componentDefaults=new Map([[1,!1],[2,0],[3,0],[4,""],[5,void 0],[6,null],[7,null],[8,null],[9,null],[10,null],[11,null],[18,null],[12,Float32Array.from([0,0,0,1])],[13,Float32Array.from([0,0])],[14,Float32Array.from([0,0,0])],[15,Float32Array.from([0,0,0,0])],[17,void 0],[16,[]]]);function _setupDefaults(ctor){for(let name in ctor.Properties){let p=ctor.Properties[name];if(p.type===5)p.values?.length?(typeof p.default!="number"&&(p.default=p.values.indexOf(p.default)),(p.default<0||p.default>=p.values.length)&&(p.default=0)):p.default=void 0;else if((p.type===12||p.type===13||p.type===14||p.type===15)&&Array.isArray(p.default))p.default=Float32Array.from(p.default);else if(p.type===17&&p.record)p.default=new p.record,resetComponentProperties(p.default);else if(p.default===void 0){let cloner=p.cloner??defaultPropertyCloner;p.default=cloner.clone(p.type,_componentDefaults.get(p.type))}ctor.prototype[name]=p.default}}function _setPropertyOrder(ctor){ctor._propertyOrder=ctor.hasOwnProperty("Properties")?Object.keys(ctor.Properties).sort():[]}var FetchProgressTransformer=class{#progress=0;#callback;#totalSize;constructor(callback,totalSize=0){this.#callback=callback,this.#totalSize=totalSize}transform(chunk,controller){controller.enqueue(chunk),this.#progress+=chunk.length,this.#totalSize>0&&this.#callback(this.#progress,this.#totalSize)}flush(){this.#callback(this.#progress,this.#progress)}},ArrayBufferSink=class{#buffer;#offset=0;constructor(size=0){this.#buffer=new Uint8Array(size)}get arrayBuffer(){let arrayBuffer=this.#buffer.buffer;return this.#offset<arrayBuffer.byteLength?arrayBuffer.slice(0,this.#offset):arrayBuffer}write(chunk){let newLength=this.#offset+chunk.length;if(newLength>this.#buffer.length){let newBuffer=new Uint8Array(Math.max(this.#buffer.length*1.5,newLength));newBuffer.set(this.#buffer),this.#buffer=newBuffer}this.#buffer.set(chunk,this.#offset),this.#offset=newLength}},ArrayBufferSource=class{#buffer;constructor(buffer){this.#buffer=buffer}start(controller){this.#buffer.byteLength>0&&controller.enqueue(new Uint8Array(this.#buffer)),controller.close()}};async function fetchWithProgress(path,onProgress,signal){let res=await fetch(path,{signal});if(!res.ok)throw res.statusText;if(!onProgress||!res.body)return res.arrayBuffer();let size=Number(res.headers.get("Content-Length")??0);Number.isNaN(size)&&(size=0);let sink=new ArrayBufferSink(size);return await res.body.pipeThrough(new TransformStream(new FetchProgressTransformer(onProgress,size))).pipeTo(new WritableStream(sink)),sink.arrayBuffer}async function fetchStreamWithProgress(path,onProgress,signal){let res=await fetch(path,{signal});if(!res.ok)throw res.statusText;let body=res.body??new ReadableStream,size=Number(res.headers.get("Content-Length")??0);return Number.isNaN(size)&&(size=0),onProgress?body.pipeThrough(new TransformStream(new FetchProgressTransformer(onProgress,size))):body}function getBaseUrl(url){return url.substring(0,url.lastIndexOf("/"))}function getFilename(url){url.endsWith("/")&&(url=url.substring(0,url.lastIndexOf("/")));let lastSlash=url.lastIndexOf("/");return lastSlash<0?url:url.substring(lastSlash+1)}function onImageReady(image){return new Promise((res,rej)=>{if(image instanceof HTMLVideoElement){if(image.readyState>=2){res(image);return}image.addEventListener("loadeddata",()=>{image.readyState>=2&&res(image)},{once:!0});return}else if(!(image instanceof HTMLImageElement)||image.complete){res(image);return}image.addEventListener("load",()=>res(image),{once:!0}),image.addEventListener("error",rej,{once:!0})})}var Prefab=class _Prefab{static makeUrlLoadOptions(options){return isString(options)?{url:options}:options}static async loadBuffer(options,progress){let opts=_Prefab.makeUrlLoadOptions(options),buffer=await fetchWithProgress(opts.url,progress,opts.signal),baseURL=getBaseUrl(opts.url),filename=getFilename(opts.url);return{...opts,buffer,baseURL,filename}}static async loadStream(options,progress){let opts=_Prefab.makeUrlLoadOptions(options),stream=await fetchStreamWithProgress(opts.url,progress,opts.signal),baseURL=getBaseUrl(opts.url),filename=getFilename(opts.url);return{...opts,stream,baseURL,filename}}static validateBufferOptions(options){let{buffer,baseURL,filename="scene.bin"}=options;if(!buffer)throw new Error("missing 'buffer' in options");if(!isString(baseURL))throw new Error("missing 'baseURL' in options");let url=baseURL?`${baseURL}/${filename}`:filename;return{buffer,baseURL,url}}static validateStreamOptions(options){let{stream,baseURL,filename="scene.bin"}=options;if(!stream)throw new Error("missing 'stream' in options");if(!isString(baseURL))throw new Error("missing 'baseURL' in options");let url=baseURL?`${baseURL}/${filename}`:filename;return{stream,baseURL,url}}_index;_engine;_components;_jsComponents=[];_pxCallbacks=new Map;_animations;_skins;_objectCache=[];_pendingDestroy=0;constructor(engine,index){this._engine=engine,this._index=index,this._components=new ComponentManagers(this),this._animations=new ResourceManager(this,Animation),this._skins=new ResourceManager(this,Skin)}addChild(){return this.wrap(0).addChild()}addObject(parent=null){if(parent?.markedDestroyed)throw new Error(`Failed to add object. ${parent} is marked as destroyed.`);return this.assertOrigin(parent),(parent??this.wrap(0)).addChild()}addObjects(count,parent=null,componentCountHint=0){let parentId=parent?parent._id:0;this.engine.wasm.requireTempMem(count*2);let actualCount=this.engine.wasm._wl_scene_add_objects(this._index,parentId,count,componentCountHint||0,this.engine.wasm._tempMem,this.engine.wasm._tempMemSize>>1),ids=this.engine.wasm._tempMemUint16.subarray(0,actualCount),wrapper=this.wrap.bind(this);return Array.from(ids,wrapper)}reserveObjects(objectCount,componentCountPerType){let wasm=this.engine.wasm;if(!componentCountPerType)return;let countsPerTypeIndex=wasm._tempMemInt,managerCount=this._components.managersCount;for(let i=0;i<managerCount;++i)countsPerTypeIndex[i]=0;let names=Object.keys(componentCountPerType);for(let name of names){let count=componentCountPerType[name],nativeIndex=this._components.getNativeManager(name);countsPerTypeIndex[nativeIndex!==null?nativeIndex:this._components.js]+=count}wasm._wl_scene_reserve_objects(this._index,objectCount,wasm._tempMem)}getChildren(out=new Array(this.childrenCount)){return this.wrap(0).getChildren(out)}getComponents(typeOrClass){let typename=isString(typeOrClass)?typeOrClass:typeOrClass.TypeName;return this._components.componentsFromTypename(typename,!1)}getActiveComponents(typeOrClass){let typename=isString(typeOrClass)?typeOrClass:typeOrClass.TypeName;return this._components.componentsFromTypename(typename,!0)}get children(){return this.wrap(0).children}get childrenCount(){let root=this.wrap(0);return this.engine.wasm._wl_object_get_children_count(root._id)}findByName(name,recursive=!1){return this.wrap(0).findByName(name,recursive)}findByNameDirect(name){return this.wrap(0).findByNameDirect(name)}findByNameRecursive(name){return this.wrap(0).findByNameRecursive(name)}wrap(objectId){let cache=this._objectCache;return cache[objectId]||(cache[objectId]=new Object3D2(this,objectId))}destroy(){if(this._pendingDestroy>0)throw new Error("It's forbidden to destroy a scene from onDestroy().");this._pxCallbacks.clear(),this.engine._destroyScene(this)}get isActive(){return!!this.engine.wasm._wl_scene_active(this._index)}get baseURL(){let wasm=this.engine.wasm,ptr=wasm._wl_scene_get_baseURL(this._index);return ptr?wasm.UTF8ToString(ptr):""}get filename(){let wasm=this.engine.wasm,ptr=wasm._wl_scene_get_filename(this._index);return ptr?wasm.UTF8ToString(ptr):""}get animations(){return this._animations}get skins(){return this._skins}get engine(){return this._engine}get isDestroyed(){return this._index<0}toString(){return this.isDestroyed?"Scene(destroyed)":`Scene('${this.filename}', ${this._index})`}assertOrigin(other){if(other&&other.scene!==this)throw new Error(`Attempt to use ${other} from ${other.scene} in ${this}`)}_initialize(){this.engine.wasm._wl_scene_initialize(this._index)}_destroyObject(localId){let instance=this._objectCache[localId];instance&&(instance._id=-1,instance._localId=-1,this.engine.erasePrototypeOnDestroy&&instance&&Object.setPrototypeOf(instance,DestroyedObjectInstance),this._objectCache[localId]=null)}_destroyComponent(manager,id){let component=this._components.get(manager,id);++this._pendingDestroy,component?._triggerOnDestroy(),--this._pendingDestroy}};function timeout(time){return new Promise(res=>setTimeout(res,time))}function clamp(val,min,max){return Math.max(Math.min(max,val),min)}function capitalizeFirstUTF8(str){return`${str[0].toUpperCase()}${str.substring(1)}`}function createDestroyedProxy2(type){return new Proxy({},{get(_,param){if(param==="isDestroyed")return!0;throw new Error(`Cannot read '${param}' of destroyed ${type}`)},set(_,param){throw new Error(`Cannot write '${param}' of destroyed ${type}`)}})}var LogTag=(LogTag2=>(LogTag2[LogTag2.Engine=0]="Engine",LogTag2[LogTag2.Scene=1]="Scene",LogTag2[LogTag2.Component=2]="Component",LogTag2))(LogTag||{}),Collider=(Collider2=>(Collider2[Collider2.Sphere=0]="Sphere",Collider2[Collider2.AxisAlignedBox=1]="AxisAlignedBox",Collider2[Collider2.Box=2]="Box",Collider2))(Collider||{}),Alignment=(Alignment2=>(Alignment2[Alignment2.Left=0]="Left",Alignment2[Alignment2.Center=1]="Center",Alignment2[Alignment2.Right=2]="Right",Alignment2))(Alignment||{}),VerticalAlignment=(VerticalAlignment2=>(VerticalAlignment2[VerticalAlignment2.Line=0]="Line",VerticalAlignment2[VerticalAlignment2.Middle=1]="Middle",VerticalAlignment2[VerticalAlignment2.Top=2]="Top",VerticalAlignment2[VerticalAlignment2.Bottom=3]="Bottom",VerticalAlignment2))(VerticalAlignment||{}),Justification=VerticalAlignment,TextEffect=(TextEffect2=>(TextEffect2[TextEffect2.None=0]="None",TextEffect2[TextEffect2.Outline=1]="Outline",TextEffect2[TextEffect2.Shadow=2]="Shadow",TextEffect2))(TextEffect||{}),TextWrapMode=(TextWrapMode2=>(TextWrapMode2[TextWrapMode2.None=0]="None",TextWrapMode2[TextWrapMode2.Soft=1]="Soft",TextWrapMode2[TextWrapMode2.Hard=2]="Hard",TextWrapMode2[TextWrapMode2.Clip=3]="Clip",TextWrapMode2))(TextWrapMode||{}),InputType=(InputType3=>(InputType3[InputType3.Head=0]="Head",InputType3[InputType3.EyeLeft=1]="EyeLeft",InputType3[InputType3.EyeRight=2]="EyeRight",InputType3[InputType3.ControllerLeft=3]="ControllerLeft",InputType3[InputType3.ControllerRight=4]="ControllerRight",InputType3[InputType3.RayLeft=5]="RayLeft",InputType3[InputType3.RayRight=6]="RayRight",InputType3))(InputType||{}),ProjectionType=(ProjectionType2=>(ProjectionType2[ProjectionType2.Perspective=0]="Perspective",ProjectionType2[ProjectionType2.Orthographic=1]="Orthographic",ProjectionType2))(ProjectionType||{}),LightType=(LightType2=>(LightType2[LightType2.Point=0]="Point",LightType2[LightType2.Spot=1]="Spot",LightType2[LightType2.Sun=2]="Sun",LightType2))(LightType||{}),AnimationState=(AnimationState2=>(AnimationState2[AnimationState2.Playing=0]="Playing",AnimationState2[AnimationState2.Paused=1]="Paused",AnimationState2[AnimationState2.Stopped=2]="Stopped",AnimationState2))(AnimationState||{}),RootMotionMode=(RootMotionMode2=>(RootMotionMode2[RootMotionMode2.None=0]="None",RootMotionMode2[RootMotionMode2.ApplyToOwner=1]="ApplyToOwner",RootMotionMode2[RootMotionMode2.Script=2]="Script",RootMotionMode2))(RootMotionMode||{}),ForceMode=(ForceMode2=>(ForceMode2[ForceMode2.Force=0]="Force",ForceMode2[ForceMode2.Impulse=1]="Impulse",ForceMode2[ForceMode2.VelocityChange=2]="VelocityChange",ForceMode2[ForceMode2.Acceleration=3]="Acceleration",ForceMode2))(ForceMode||{}),CollisionEventType=(CollisionEventType2=>(CollisionEventType2[CollisionEventType2.Touch=0]="Touch",CollisionEventType2[CollisionEventType2.TouchLost=1]="TouchLost",CollisionEventType2[CollisionEventType2.TriggerTouch=2]="TriggerTouch",CollisionEventType2[CollisionEventType2.TriggerTouchLost=3]="TriggerTouchLost",CollisionEventType2))(CollisionEventType||{}),Shape=(Shape2=>(Shape2[Shape2.None=0]="None",Shape2[Shape2.Sphere=1]="Sphere",Shape2[Shape2.Capsule=2]="Capsule",Shape2[Shape2.Box=3]="Box",Shape2[Shape2.Plane=4]="Plane",Shape2[Shape2.ConvexMesh=5]="ConvexMesh",Shape2[Shape2.TriangleMesh=6]="TriangleMesh",Shape2))(Shape||{}),MeshAttribute=(MeshAttribute2=>(MeshAttribute2[MeshAttribute2.Position=0]="Position",MeshAttribute2[MeshAttribute2.Tangent=1]="Tangent",MeshAttribute2[MeshAttribute2.Normal=2]="Normal",MeshAttribute2[MeshAttribute2.TextureCoordinate=3]="TextureCoordinate",MeshAttribute2[MeshAttribute2.Color=4]="Color",MeshAttribute2[MeshAttribute2.JointId=5]="JointId",MeshAttribute2[MeshAttribute2.JointWeight=6]="JointWeight",MeshAttribute2[MeshAttribute2.SecondaryTextureCoordinate=7]="SecondaryTextureCoordinate",MeshAttribute2))(MeshAttribute||{}),DestroyedObjectInstance=createDestroyedProxy2("object"),DestroyedComponentInstance=createDestroyedProxy2("component"),DestroyedPrefabInstance=createDestroyedProxy2("prefab/scene");function isMeshShape(shape){return shape===5||shape===6}function isBaseComponentClass(value){return!!value&&value.hasOwnProperty("_isBaseComponent")&&value._isBaseComponent}var UP_VECTOR=[0,1,0],SQRT_3=Math.sqrt(3),Component3=class _Component{static _pack(scene,id){return scene<<22|id}static _isBaseComponent=!0;static _propertyOrder=[];static TypeName;static Properties;static InheritProperties;static onRegister;static _inheritProperties(){inheritProperties(this)}_manager;_id;_localId;_object;_scene;constructor(scene,manager=-1,id=-1){this._scene=scene,this._manager=manager,this._localId=id,this._id=_Component._pack(scene._index,id),this._object=null}get scene(){return this._scene}get engine(){return this._scene.engine}get type(){return this.constructor.TypeName}get object(){if(!this._object){let objectId=this.engine.wasm._wl_component_get_object(this._manager,this._id);this._object=this._scene.wrap(objectId)}return this._object}set active(active){this.engine.wasm._wl_component_setActive(this._manager,this._id,active)}get active(){return this.markedActive&&this._scene.isActive}get markedActive(){return this.engine.wasm._wl_component_isActive(this._manager,this._id)!=0}copy(src){let properties=this.constructor.Properties;if(!properties)return this;for(let name in properties){let property2=properties[name],value=src[name];if(value===void 0)continue;let cloner=property2.cloner??defaultPropertyCloner;this[name]=cloner.clone(property2.type,value)}return this}destroy(){let manager=this._manager;manager<0||this._id<0||this.engine.wasm._wl_component_remove(manager,this._id)}equals(otherComponent){return otherComponent?this._manager===otherComponent._manager&&this._id===otherComponent._id:!1}resetProperties(){return resetComponentProperties(this),this}reset(){return this.resetProperties()}validateProperties(){let ctor=this.constructor;if(ctor.Properties){for(let name in ctor.Properties)if(ctor.Properties[name].required&&!this[name])throw new Error(`Property '${name}' is required but was not initialized`)}}toString(){return this.isDestroyed?"Component(destroyed)":`Component('${this.type}', ${this._localId})`}get isDestroyed(){return this._id<0}_copy(src,offsetsPtr,copyInfoPtr){let wasm=this.engine.wasm,offsets=wasm.HEAPU32,offsetsStart=offsetsPtr>>>2,copyInfoStart=copyInfoPtr>>>1,srcRootIndex=wasm.HEAPU16[copyInfoStart],srcRootSize=wasm.HEAPU16[copyInfoStart+1],dstRootIndex=wasm.HEAPU16[copyInfoStart+2],destScene=this._scene,ctor=this.constructor;for(let name in ctor.Properties){let value=src[name];if(value===null){this[name]=null;continue}let prop=ctor.Properties[name],offset=offsets[offsetsStart+prop.type],retargeted=null;switch(prop.type){case 6:{let index=wasm._wl_object_index(value._id)+offset,dist=index-srcRootIndex;dist>=0&&dist<=srcRootSize&&(index=dstRootIndex+dist);let id=wasm._wl_object_id(destScene._index,index);retargeted=destScene.wrap(id);break}case 10:retargeted=destScene.animations.wrap(offset+value._index);break;case 11:retargeted=destScene.skins.wrap(offset+value._index);break;default:retargeted=(prop.cloner??defaultPropertyCloner).clone(prop.type,value);break}this[name]=retargeted}return this}_triggerInit(){if(this.init)try{this.init()}catch(e){this.engine.log.error(2,`Exception during ${this.type} init() on object ${this.object.name}`),this.engine.log.error(2,e)}let oldActivate=this.onActivate;this.onActivate=function(){this.onActivate=oldActivate;let failed=!1;try{this.validateProperties()}catch(e){this.engine.log.error(2,`Exception during ${this.type} validateProperties() on object ${this.object.name}`),this.engine.log.error(2,e),failed=!0}try{this.start?.()}catch(e){this.engine.log.error(2,`Exception during ${this.type} start() on object ${this.object.name}`),this.engine.log.error(2,e),failed=!0}if(failed){this.active=!1;return}if(this.onActivate)try{this.onActivate()}catch(e){this.engine.log.error(2,`Exception during ${this.type} onActivate() on object ${this.object.name}`),this.engine.log.error(2,e)}}}_triggerUpdate(dt){if(this.update)try{this.update(dt)}catch(e){this.engine.log.error(2,`Exception during ${this.type} update() on object ${this.object.name}`),this.engine.log.error(2,e),this.engine.wasm._deactivate_component_on_error&&(this.active=!1)}}_triggerOnActivate(){if(this.onActivate)try{this.onActivate()}catch(e){this.engine.log.error(2,`Exception during ${this.type} onActivate() on object ${this.object.name}`),this.engine.log.error(2,e)}}_triggerOnDeactivate(){if(this.onDeactivate)try{this.onDeactivate()}catch(e){this.engine.log.error(2,`Exception during ${this.type} onDeactivate() on object ${this.object.name}`),this.engine.log.error(2,e)}}_triggerOnDestroy(){try{this.onDestroy&&this.onDestroy()}catch(e){this.engine.log.error(2,`Exception during ${this.type} onDestroy() on object ${this.object.name}`),this.engine.log.error(2,e)}this._scene._components.destroy(this)}},BrokenComponent=class extends Component3{static TypeName="__broken-component__"};function inheritProperties(target){let chain=[],curr=target;for(;curr&&!isBaseComponentClass(curr);){let comp=curr;if(!(comp.hasOwnProperty("InheritProperties")?comp.InheritProperties:!0))break;comp.hasOwnProperty("Properties")&&chain.push(comp),curr=Object.getPrototypeOf(curr)}if(!chain.length||chain.length===1&&chain[0]===target)return;let merged={};for(let i=chain.length-1;i>=0;--i)Object.assign(merged,chain[i].Properties);target.Properties=merged}var CollisionComponent=class extends Component3{static TypeName="collision";getExtents(out=new Float32Array(3)){let wasm=this.engine.wasm,ptr=wasm._wl_collision_component_get_extents(this._id)/4;return out[0]=wasm.HEAPF32[ptr],out[1]=wasm.HEAPF32[ptr+1],out[2]=wasm.HEAPF32[ptr+2],out}get collider(){return this.engine.wasm._wl_collision_component_get_collider(this._id)}set collider(collider){this.engine.wasm._wl_collision_component_set_collider(this._id,collider)}get extents(){let wasm=this.engine.wasm;return new Float32Array(wasm.HEAPF32.buffer,wasm._wl_collision_component_get_extents(this._id),3)}set extents(extents){let wasm=this.engine.wasm,ptr=wasm._wl_collision_component_get_extents(this._id)/4;wasm.HEAPF32[ptr]=extents[0],wasm.HEAPF32[ptr+1]=extents[1],wasm.HEAPF32[ptr+2]=extents[2]}get radius(){let wasm=this.engine.wasm;if(this.collider===0)return wasm.HEAPF32[wasm._wl_collision_component_get_extents(this._id)>>2];let extents=new Float32Array(wasm.HEAPF32.buffer,wasm._wl_collision_component_get_extents(this._id),3),x2=extents[0]*extents[0],y2=extents[1]*extents[1],z2=extents[2]*extents[2];return Math.sqrt(x2+y2+z2)/2}set radius(radius){let length=this.collider===0?radius:2*radius/SQRT_3;this.extents.set([length,length,length])}get group(){return this.engine.wasm._wl_collision_component_get_group(this._id)}set group(group){this.engine.wasm._wl_collision_component_set_group(this._id,group)}queryOverlaps(){let count=this.engine.wasm._wl_collision_component_query_overlaps(this._id,this.engine.wasm._tempMem,this.engine.wasm._tempMemSize>>1),overlaps=new Array(count);for(let i=0;i<count;++i){let id=this.engine.wasm._tempMemUint16[i];overlaps[i]=this._scene._components.wrapCollision(id)}return overlaps}};__decorateClass([nativeProperty()],CollisionComponent.prototype,"collider",1),__decorateClass([nativeProperty()],CollisionComponent.prototype,"extents",1),__decorateClass([nativeProperty()],CollisionComponent.prototype,"group",1);var TextComponent=class extends Component3{static TypeName="text";get alignment(){return this.engine.wasm._wl_text_component_get_horizontal_alignment(this._id)}set alignment(alignment){this.engine.wasm._wl_text_component_set_horizontal_alignment(this._id,alignment)}get verticalAlignment(){return this.engine.wasm._wl_text_component_get_vertical_alignment(this._id)}set verticalAlignment(verticalAlignment){this.engine.wasm._wl_text_component_set_vertical_alignment(this._id,verticalAlignment)}get justification(){return this.verticalAlignment}set justification(justification){this.verticalAlignment=justification}get justified(){return!!this.engine.wasm._wl_text_component_get_justified(this._id)}set justified(justified){this.engine.wasm._wl_text_component_set_justified(this._id,justified)}get characterSpacing(){return this.engine.wasm._wl_text_component_get_character_spacing(this._id)}set characterSpacing(spacing){this.engine.wasm._wl_text_component_set_character_spacing(this._id,spacing)}get lineSpacing(){return this.engine.wasm._wl_text_component_get_line_spacing(this._id)}set lineSpacing(spacing){this.engine.wasm._wl_text_component_set_line_spacing(this._id,spacing)}get effect(){return this.engine.wasm._wl_text_component_get_effect(this._id)}set effect(effect){this.engine.wasm._wl_text_component_set_effect(this._id,effect)}get effectOffset(){return this.getEffectOffset()}set effectOffset(offset){this.setEffectOffset(offset)}getEffectOffset(out=new Float32Array(2)){let wasm=this.engine.wasm;return wasm._wl_text_component_get_effectOffset(this._id,wasm._tempMem),out[0]=wasm._tempMemFloat[0],out[1]=wasm._tempMemFloat[1],out}setEffectOffset(offset){let wasm=this.engine.wasm;wasm._tempMemFloat.set(offset),wasm._wl_text_component_set_effectOffset(this._id,wasm._tempMem)}get wrapMode(){return this.engine.wasm._wl_text_component_get_wrapMode(this._id)}set wrapMode(wrapMode){this.engine.wasm._wl_text_component_set_wrapMode(this._id,wrapMode)}get wrapWidth(){return this.engine.wasm._wl_text_component_get_wrapWidth(this._id)}set wrapWidth(width){this.engine.wasm._wl_text_component_set_wrapWidth(this._id,width)}get text(){let wasm=this.engine.wasm,ptr=wasm._wl_text_component_get_text(this._id);return wasm.UTF8ToString(ptr)}set text(text){let wasm=this.engine.wasm;wasm._wl_text_component_set_text(this._id,wasm.tempUTF8(text.toString()))}set material(material){let matIndex=material?material._id:0;this.engine.wasm._wl_text_component_set_material(this._id,matIndex)}get material(){let index=this.engine.wasm._wl_text_component_get_material(this._id);return this.engine.materials.wrap(index)}getBoundingBoxForText(text,out=new Float32Array(4)){let wasm=this.engine.wasm,textPtr=wasm.tempUTF8(text,4*4);return this.engine.wasm._wl_text_component_get_boundingBox(this._id,textPtr,wasm._tempMem),out[0]=wasm._tempMemFloat[0],out[1]=wasm._tempMemFloat[1],out[2]=wasm._tempMemFloat[2],out[3]=wasm._tempMemFloat[3],out}getBoundingBox(out=new Float32Array(4)){let wasm=this.engine.wasm;return this.engine.wasm._wl_text_component_get_boundingBox(this._id,0,wasm._tempMem),out[0]=wasm._tempMemFloat[0],out[1]=wasm._tempMemFloat[1],out[2]=wasm._tempMemFloat[2],out[3]=wasm._tempMemFloat[3],out}};__decorateClass([nativeProperty()],TextComponent.prototype,"alignment",1),__decorateClass([nativeProperty()],TextComponent.prototype,"verticalAlignment",1),__decorateClass([nativeProperty()],TextComponent.prototype,"justification",1),__decorateClass([nativeProperty()],TextComponent.prototype,"justified",1),__decorateClass([nativeProperty()],TextComponent.prototype,"characterSpacing",1),__decorateClass([nativeProperty()],TextComponent.prototype,"lineSpacing",1),__decorateClass([nativeProperty()],TextComponent.prototype,"effect",1),__decorateClass([nativeProperty()],TextComponent.prototype,"effectOffset",1),__decorateClass([nativeProperty()],TextComponent.prototype,"wrapMode",1),__decorateClass([nativeProperty()],TextComponent.prototype,"wrapWidth",1),__decorateClass([nativeProperty()],TextComponent.prototype,"text",1),__decorateClass([nativeProperty()],TextComponent.prototype,"material",1);var ViewComponent=class extends Component3{static TypeName="view";get projectionType(){return this.engine.wasm._wl_view_component_get_projectionType(this._id)}set projectionType(type){this.engine.wasm._wl_view_component_set_projectionType(this._id,type)}getProjectionMatrix(out=new Float32Array(16)){let wasm=this.engine.wasm;wasm.requireTempMem(16*4),wasm._wl_view_component_get_projectionMatrix(this._id,wasm._tempMem);for(let i=0;i<16;++i)out[i]=wasm._tempMemFloat[i];return out}get projectionMatrix(){return this.getProjectionMatrix()}_setProjectionMatrix(v){let wasm=this._scene.engine.wasm;wasm.requireTempMem(16*4),wasm._tempMemFloat.set(v),wasm._wl_view_component_set_projectionMatrix(this._id,wasm._tempMem)}_generateProjectionMatrix(){this._scene.engine.wasm._wl_view_component_generate_projectionMatrix(this._id)}get near(){return this.engine.wasm._wl_view_component_get_near(this._id)}set near(near){this.engine.wasm._wl_view_component_set_near(this._id,near),this.engine.xr&&this.scene.isActive&&this.active&&this.engine.webxr.updateProjectionParams(near,this.far)}get far(){return this.engine.wasm._wl_view_component_get_far(this._id)}set far(far){this.engine.wasm._wl_view_component_set_far(this._id,far),this.engine.xr&&this.scene.isActive&&this.active&&this.engine.webxr.updateProjectionParams(this.near,far)}get fov(){return this.engine.wasm._wl_view_component_get_fov(this._id)}set fov(fov){this.engine.wasm._wl_view_component_set_fov(this._id,fov)}getViewport(out=new Int32Array(4)){let wasm=this.engine.wasm,ptr=wasm._wl_view_component_get_viewport(this._id);for(let i=0;i<4;++i)out[i]=wasm.HEAPF32[ptr+i];return out}get viewport(){return this.getViewport()}_setViewport(x,y,width,height){this._scene.engine.wasm._wl_view_component_set_viewport(this._id,x,y,width,height)}get extent(){return this.engine.wasm._wl_view_component_get_extent(this._id)}set extent(extent){this.engine.wasm._wl_view_component_set_extent(this._id,extent)}};__decorateClass([nativeProperty()],ViewComponent.prototype,"projectionType",1),__decorateClass([enumerable()],ViewComponent.prototype,"projectionMatrix",1),__decorateClass([nativeProperty()],ViewComponent.prototype,"near",1),__decorateClass([nativeProperty()],ViewComponent.prototype,"far",1),__decorateClass([nativeProperty()],ViewComponent.prototype,"fov",1),__decorateClass([enumerable()],ViewComponent.prototype,"viewport",1),__decorateClass([nativeProperty()],ViewComponent.prototype,"extent",1);var InputComponent=class extends Component3{static TypeName="input";get inputType(){return this.engine.wasm._wl_input_component_get_type(this._id)}set inputType(type){this.engine.wasm._wl_input_component_set_type(this._id,type)}get xrInputSource(){let xr=this.engine.xr;if(!xr)return null;for(let inputSource of xr.session.inputSources)if(inputSource.handedness==this.handedness)return inputSource;return null}get handedness(){let inputType=this.inputType;return inputType==4||inputType==6||inputType==2?"right":inputType==3||inputType==5||inputType==1?"left":null}};__decorateClass([nativeProperty()],InputComponent.prototype,"inputType",1),