UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 11.2 kB
import{math as t}from"../../../core/math/math.js";import{Vec4 as e}from"../../../core/math/vec4.js";import{MASK_AFFECT_DYNAMIC as s,MASK_AFFECT_LIGHTMAPPED as i,MASK_BAKE as a}from"../../../scene/constants.js";import{Asset as o}from"../../asset/asset.js";import{Component as h}from"../component.js";import{properties as n}from"./data.js";class l extends h{constructor(t,e){super(t,e),this._evtLayersChanged=null,this._evtLayerAdded=null,this._evtLayerRemoved=null,this._cookieAsset=null,this._cookieAssetId=null,this._cookieAssetAdd=!1,this._cookieMatrix=null}get data(){const t=this.system.store[this.entity.getGuid()];return t?t.data:null}set enabled(t){this._setValue("enabled",t,(function(t,e){this.onSetEnabled(null,e,t)}))}get enabled(){return this.data.enabled}set light(t){this._setValue("light",t)}get light(){return this.data.light}set type(t){this._setValue("type",t,(function(t,e){this.system.changeType(this,e,t),this.refreshProperties()}))}get type(){return this.data.type}set color(t){this._setValue("color",t,(function(t,e){this.light.setColor(t)}),!0)}get color(){return this.data.color}set intensity(t){this._setValue("intensity",t,(function(t,e){this.light.intensity=t}))}get intensity(){return this.data.intensity}set luminance(t){this._setValue("luminance",t,(function(t,e){this.light.luminance=t}))}get luminance(){return this.data.luminance}set shape(t){this._setValue("shape",t,(function(t,e){this.light.shape=t}))}get shape(){return this.data.shape}set affectSpecularity(t){this._setValue("affectSpecularity",t,(function(t,e){this.light.affectSpecularity=t}))}get affectSpecularity(){return this.data.affectSpecularity}set castShadows(t){this._setValue("castShadows",t,(function(t,e){this.light.castShadows=t}))}get castShadows(){return this.data.castShadows}set shadowDistance(t){this._setValue("shadowDistance",t,(function(t,e){this.light.shadowDistance=t}))}get shadowDistance(){return this.data.shadowDistance}set shadowIntensity(t){this._setValue("shadowIntensity",t,(function(t,e){this.light.shadowIntensity=t}))}get shadowIntensity(){return this.data.shadowIntensity}set shadowResolution(t){this._setValue("shadowResolution",t,(function(t,e){this.light.shadowResolution=t}))}get shadowResolution(){return this.data.shadowResolution}set shadowBias(e){this._setValue("shadowBias",e,(function(e,s){this.light.shadowBias=-.01*t.clamp(e,0,1)}))}get shadowBias(){return this.data.shadowBias}set numCascades(e){this._setValue("numCascades",e,(function(e,s){this.light.numCascades=t.clamp(Math.floor(e),1,4)}))}get numCascades(){return this.data.numCascades}set bakeNumSamples(e){this._setValue("bakeNumSamples",e,(function(e,s){this.light.bakeNumSamples=t.clamp(Math.floor(e),1,255)}))}get bakeNumSamples(){return this.data.bakeNumSamples}set bakeArea(e){this._setValue("bakeArea",e,(function(e,s){this.light.bakeArea=t.clamp(e,0,180)}))}get bakeArea(){return this.data.bakeArea}set cascadeDistribution(e){this._setValue("cascadeDistribution",e,(function(e,s){this.light.cascadeDistribution=t.clamp(e,0,1)}))}get cascadeDistribution(){return this.data.cascadeDistribution}set normalOffsetBias(e){this._setValue("normalOffsetBias",e,(function(e,s){this.light.normalOffsetBias=t.clamp(e,0,1)}))}get normalOffsetBias(){return this.data.normalOffsetBias}set range(t){this._setValue("range",t,(function(t,e){this.light.attenuationEnd=t}))}get range(){return this.data.range}set innerConeAngle(t){this._setValue("innerConeAngle",t,(function(t,e){this.light.innerConeAngle=t}))}get innerConeAngle(){return this.data.innerConeAngle}set outerConeAngle(t){this._setValue("outerConeAngle",t,(function(t,e){this.light.outerConeAngle=t}))}get outerConeAngle(){return this.data.outerConeAngle}set falloffMode(t){this._setValue("falloffMode",t,(function(t,e){this.light.falloffMode=t}))}get falloffMode(){return this.data.falloffMode}set shadowType(t){this._setValue("shadowType",t,(function(t,e){this.light.shadowType=t}))}get shadowType(){return this.data.shadowType}set vsmBlurSize(t){this._setValue("vsmBlurSize",t,(function(t,e){this.light.vsmBlurSize=t}))}get vsmBlurSize(){return this.data.vsmBlurSize}set vsmBlurMode(t){this._setValue("vsmBlurMode",t,(function(t,e){this.light.vsmBlurMode=t}))}get vsmBlurMode(){return this.data.vsmBlurMode}set vsmBias(e){this._setValue("vsmBias",e,(function(e,s){this.light.vsmBias=t.clamp(e,0,1)}))}get vsmBias(){return this.data.vsmBias}set cookieAsset(t){this._setValue("cookieAsset",t,(function(t,e){if(!this._cookieAssetId||!(t instanceof o&&t.id===this._cookieAssetId||t===this._cookieAssetId))if(this.onCookieAssetRemove(),this._cookieAssetId=null,t instanceof o)this.data.cookieAsset=t.id,this._cookieAssetId=t.id,this.onCookieAssetAdd(t);else if("number"==typeof t){this._cookieAssetId=t;const e=this.system.app.assets.get(t);e?this.onCookieAssetAdd(e):(this._cookieAssetAdd=!0,this.system.app.assets.on(`add:${this._cookieAssetId}`,this.onCookieAssetAdd,this))}}))}get cookieAsset(){return this.data.cookieAsset}set cookie(t){this._setValue("cookie",t,(function(t,e){this.light.cookie=t}))}get cookie(){return this.data.cookie}set cookieIntensity(e){this._setValue("cookieIntensity",e,(function(e,s){this.light.cookieIntensity=t.clamp(e,0,1)}))}get cookieIntensity(){return this.data.cookieIntensity}set cookieFalloff(t){this._setValue("cookieFalloff",t,(function(t,e){this.light.cookieFalloff=t}))}get cookieFalloff(){return this.data.cookieFalloff}set cookieChannel(t){this._setValue("cookieChannel",t,(function(t,e){this.light.cookieChannel=t}))}get cookieChannel(){return this.data.cookieChannel}set cookieAngle(s){this._setValue("cookieAngle",s,(function(s,i){if(0!==s||null!==this.cookieScale){this._cookieMatrix||(this._cookieMatrix=new e);let i=1,a=1;this.cookieScale&&(i=this.cookieScale.x,a=this.cookieScale.y);const o=Math.cos(s*t.DEG_TO_RAD),h=Math.sin(s*t.DEG_TO_RAD);this._cookieMatrix.set(o/i,-h/i,h/a,o/a),this.light.cookieTransform=this._cookieMatrix}else this.light.cookieTransform=null}))}get cookieAngle(){return this.data.cookieAngle}set cookieScale(s){this._setValue("cookieScale",s,(function(s,i){if(null!==s||0!==this.cookieAngle){this._cookieMatrix||(this._cookieMatrix=new e);const i=s.x,a=s.y,o=Math.cos(this.cookieAngle*t.DEG_TO_RAD),h=Math.sin(this.cookieAngle*t.DEG_TO_RAD);this._cookieMatrix.set(o/i,-h/i,h/a,o/a),this.light.cookieTransform=this._cookieMatrix}else this.light.cookieTransform=null}),!0)}get cookieScale(){return this.data.cookieScale}set cookieOffset(t){this._setValue("cookieOffset",t,(function(t,e){this.light.cookieOffset=t}),!0)}get cookieOffset(){return this.data.cookieOffset}set shadowUpdateMode(t){this._setValue("shadowUpdateMode",t,(function(t,e){this.light.shadowUpdateMode=t}),!0)}get shadowUpdateMode(){return this.data.shadowUpdateMode}set mask(t){this._setValue("mask",t,(function(t,e){this.light.mask=t}))}get mask(){return this.data.mask}set affectDynamic(t){this._setValue("affectDynamic",t,(function(t,e){t?this.light.mask|=s:this.light.mask&=~s,this.light.layersDirty()}))}get affectDynamic(){return this.data.affectDynamic}set affectLightmapped(t){this._setValue("affectLightmapped",t,(function(t,e){t?(this.light.mask|=i,this.bake&&(this.light.mask&=~a)):(this.light.mask&=~i,this.bake&&(this.light.mask|=a))}))}get affectLightmapped(){return this.data.affectLightmapped}set bake(t){this._setValue("bake",t,(function(t,e){t?(this.light.mask|=a,this.affectLightmapped&&(this.light.mask&=~i)):(this.light.mask&=~a,this.affectLightmapped&&(this.light.mask|=i)),this.light.layersDirty()}))}get bake(){return this.data.bake}set bakeDir(t){this._setValue("bakeDir",t,(function(t,e){this.light.bakeDir=t}))}get bakeDir(){return this.data.bakeDir}set isStatic(t){this._setValue("isStatic",t,(function(t,e){this.light.isStatic=t}))}get isStatic(){return this.data.isStatic}set layers(t){this._setValue("layers",t,(function(t,e){for(let t=0;t<e.length;t++){const s=this.system.app.scene.layers.getLayerById(e[t]);s&&(s.removeLight(this),this.light.removeLayer(s))}for(let e=0;e<t.length;e++){const s=this.system.app.scene.layers.getLayerById(t[e]);s&&(this.enabled&&this.entity.enabled&&(s.addLight(this),this.light.addLayer(s)))}}))}get layers(){return this.data.layers}set shadowUpdateOverrides(t){this.light.shadowUpdateOverrides=t}get shadowUpdateOverrides(){return this.light.shadowUpdateOverrides}set penumbraSize(t){this.light.penumbraSize=t}get penumbraSize(){return this.light.penumbraSize}_setValue(t,e,s,i){const a=this.data,o=a[t];(i||o!==e)&&(a[t]=e,s&&s.call(this,e,o))}addLightToLayers(){for(let t=0;t<this.layers.length;t++){const e=this.system.app.scene.layers.getLayerById(this.layers[t]);e&&(e.addLight(this),this.light.addLayer(e))}}removeLightFromLayers(){for(let t=0;t<this.layers.length;t++){const e=this.system.app.scene.layers.getLayerById(this.layers[t]);e&&(e.removeLight(this),this.light.removeLayer(e))}}onLayersChanged(t,e){this.enabled&&this.entity.enabled&&this.addLightToLayers(),t.off("add",this.onLayerAdded,this),t.off("remove",this.onLayerRemoved,this),e.on("add",this.onLayerAdded,this),e.on("remove",this.onLayerRemoved,this)}onLayerAdded(t){this.layers.indexOf(t.id)>=0&&this.enabled&&this.entity.enabled&&(t.addLight(this),this.light.addLayer(t))}onLayerRemoved(t){this.layers.indexOf(t.id)>=0&&(t.removeLight(this),this.light.removeLayer(t))}refreshProperties(){for(let t=0;t<n.length;t++){const e=n[t];this[e]=this[e]}this.enabled&&this.entity.enabled&&this.onEnable()}onCookieAssetSet(){let t=!1;"cubemap"!==this._cookieAsset.type||this._cookieAsset.loadFaces||(this._cookieAsset.loadFaces=!0,t=!0),this._cookieAsset.resource&&!t||this.system.app.assets.load(this._cookieAsset),this._cookieAsset.resource&&this.onCookieAssetLoad()}onCookieAssetAdd(t){this._cookieAssetId===t.id&&(this._cookieAsset=t,this.light.enabled&&this.onCookieAssetSet(),this._cookieAsset.on("load",this.onCookieAssetLoad,this),this._cookieAsset.on("remove",this.onCookieAssetRemove,this))}onCookieAssetLoad(){this._cookieAsset&&this._cookieAsset.resource&&(this.cookie=this._cookieAsset.resource)}onCookieAssetRemove(){this._cookieAssetId&&(this._cookieAssetAdd&&(this.system.app.assets.off(`add:${this._cookieAssetId}`,this.onCookieAssetAdd,this),this._cookieAssetAdd=!1),this._cookieAsset&&(this._cookieAsset.off("load",this.onCookieAssetLoad,this),this._cookieAsset.off("remove",this.onCookieAssetRemove,this),this._cookieAsset=null),this.cookie=null)}onEnable(){const t=this.system.app.scene,e=t.layers;this.light.enabled=!0,this._evtLayersChanged=t.on("set:layers",this.onLayersChanged,this),e&&(this._evtLayerAdded=e.on("add",this.onLayerAdded,this),this._evtLayerRemoved=e.on("remove",this.onLayerRemoved,this)),this.enabled&&this.entity.enabled&&this.addLightToLayers(),this._cookieAsset&&!this.cookie&&this.onCookieAssetSet()}onDisable(){var t;const e=this.system.app.scene.layers;var s,i;(this.light.enabled=!1,null==(t=this._evtLayersChanged)||t.off(),this._evtLayersChanged=null,e)&&(null==(s=this._evtLayerAdded)||s.off(),this._evtLayerAdded=null,null==(i=this._evtLayerRemoved)||i.off(),this._evtLayerRemoved=null);this.removeLightFromLayers()}onRemove(){this.onDisable(),this.light.destroy(),this.cookieAsset=null}}export{l as LightComponent};