diff --git a/source/client/components/CVAudioManager.ts b/source/client/components/CVAudioManager.ts index bbcdc805..83c7c988 100644 --- a/source/client/components/CVAudioManager.ts +++ b/source/client/components/CVAudioManager.ts @@ -296,7 +296,7 @@ export default class CVAudioManager extends Component stop() { - if(!this.audioPlayer) {//Notification.show(`PLAYINGA`, "warning"); + if(!this.audioPlayer) { return; } this.pause(); @@ -357,6 +357,7 @@ export default class CVAudioManager extends Component track.setAttribute("default", ""); this.audioPlayer.append(track); track.addEventListener("cuechange", this.onCueChange); + track.addEventListener("load", this.onLoadTrack); } } @@ -368,6 +369,16 @@ export default class CVAudioManager extends Component this.ins.activeCaption.setValue(activeText); } + // One-time setup after data is loaded + protected onLoadTrack = (event: Event) => + { + // Cues starting at zero cause issues, so add a small offset + const cues = (this.audioPlayer.children[0] as HTMLTrackElement).track.cues; + if(cues[0].startTime === 0) { + cues[0].startTime = 0.01; + } + } + // Handle audio time elapsed updates protected onTimeChange = (event: Event) => { diff --git a/source/client/components/CVModel2.ts b/source/client/components/CVModel2.ts index 2c87a309..8daf46ca 100644 --- a/source/client/components/CVModel2.ts +++ b/source/client/components/CVModel2.ts @@ -29,6 +29,7 @@ import { EDerivativeQuality, EDerivativeUsage, EUnitType, IModel, ESideType, TSi import unitScaleFactor from "../utils/unitScaleFactor"; import UberPBRMaterial, { EShaderMode } from "../shaders/UberPBRMaterial"; +import UberPBRAdvMaterial from "../shaders/UberPBRAdvMaterial"; import Derivative from "../models/Derivative"; import DerivativeList from "../models/DerivativeList"; @@ -495,7 +496,7 @@ export default class CVModel2 extends CObject3D { const shader = this.ins.shader.getValidatedValue(); this.object3D.traverse(object => { - const material = object["material"] as UberPBRMaterial; + const material = object["material"] as UberPBRMaterial | UberPBRAdvMaterial; if (material && material.isUberPBRMaterial) { material.setShaderMode(shader); } @@ -541,7 +542,7 @@ export default class CVModel2 extends CObject3D const ins = this.ins; this.object3D.traverse(object => { - const material = object["material"] as UberPBRMaterial; + const material = object["material"] as UberPBRMaterial | UberPBRAdvMaterial; if (material && material.isUberPBRMaterial) { material.aoMapMix.setScalar(ins.occlusion.value); material.color.fromArray(ins.color.value); @@ -551,6 +552,7 @@ export default class CVModel2 extends CObject3D material.roughness = ins.roughness.value; material.metalness = ins.metalness.value; material.side = ins.doubleSided.value ? DoubleSide : FrontSide; + material.needsUpdate = true; } }); } @@ -706,7 +708,7 @@ export default class CVModel2 extends CObject3D // update shadow render side if(this.ins.shadowSide.value != ESideType.Back) { this.object3D.traverse(object => { - const material = object["material"] as UberPBRMaterial; + const material = object["material"] as UberPBRMaterial | UberPBRAdvMaterial; if (material && material.isUberPBRMaterial) { if(this.ins.shadowSide.value == ESideType.Front) { material.shadowSide = FrontSide; @@ -714,6 +716,7 @@ export default class CVModel2 extends CObject3D else { material.shadowSide = BackSide; } + material.needsUpdate = true; } }); }