UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 1.82 kB
import{hasAudioContext as t}from"../../../platform/audio/capabilities.js";import{Component as o}from"../component.js";import{ComponentSystem as e}from"../system.js";import{SoundComponent as s}from"./component.js";import{SoundComponentData as n}from"./data.js";const a=["enabled"];class i extends e{constructor(t){super(t),this.id="sound",this.ComponentType=s,this.DataType=n,this.schema=a,this.manager=t.soundManager,this.app.systems.on("update",this.onUpdate,this),this.on("beforeremove",this.onBeforeRemove,this)}set volume(t){this.manager.volume=t}get volume(){return this.manager.volume}get context(){return t()?this.manager.context:null}initializeComponentData(t,o,e){e=["volume","pitch","positional","refDistance","maxDistance","rollOffFactor","distanceModel","slots"];for(let s=0;s<e.length;s++)o.hasOwnProperty(e[s])&&(t[e[s]]=o[e[s]]);super.initializeComponentData(t,o,["enabled"])}cloneComponent(t,o){const e=t.sound,s=e.slots,n={};for(const t in s){const o=s[t];n[t]={name:o.name,volume:o.volume,pitch:o.pitch,loop:o.loop,duration:o.duration,startTime:o.startTime,overlap:o.overlap,autoPlay:o.autoPlay,asset:o.asset}}const a={distanceModel:e.distanceModel,enabled:e.enabled,maxDistance:e.maxDistance,pitch:e.pitch,positional:e.positional,refDistance:e.refDistance,rollOffFactor:e.rollOffFactor,slots:n,volume:e.volume};return this.addComponent(o,a)}onUpdate(t){const o=this.store;for(const t in o)if(o.hasOwnProperty(t)){const e=o[t].entity;if(e.enabled){const t=e.sound;if(t.enabled&&t.positional){const o=e.getPosition(),s=t.slots;for(const t in s)s[t].updatePosition(o)}}}}onBeforeRemove(t,o){const e=o.slots;for(const t in e)e[t].overlap||e[t].stop();o.onRemove()}destroy(){super.destroy(),this.app.systems.off("update",this.onUpdate,this)}}o._buildAccessors(s.prototype,a);export{i as SoundComponentSystem};