import { AudioSource, Behaviour, GameObject, Text, resolveUrl, serializable } from "@needle-tools/engine"
type AudioClip = string;
export class SubtitleController extends Behaviour {
@serializable()
audioClips: AudioClip[]
public subtitles: string[]
@serializable()
private audioSource: AudioSource
private tMP_Text: Text
public blankTimeAtEnd: number[]
public upperDoor: GameObject
public videoPanel: GameObject
constructor() {
super()
this.audioClips = []
this.subtitles = []
this.blankTimeAtEnd = []
}
start() {
this.audioSource = this.gameObject.getComponent(AudioSource) as any
console.log('audioSource==', this.audioSource)
this.tMP_Text = this.gameObject.getComponent(Text) as any
if (this.gameObject.name !== "market down") {
this.audio()
}
}
async audio() {
if (this.gameObject.name === "intro") {
await new Promise(resolve => setTimeout(resolve, 2000))
}
for (let i = 0; i < this.audioClips.length; i++) {
this.audioSource.clip = this.audioClips[i]
this.tMP_Text.text = this.subtitles[i]
// this.audioSource.play(this.audioSource.clip)
this.audioSource.play(resolveUrl(this.sourceId, this.audioSource.clip))
await new Promise(resolve => setTimeout(resolve, (this.audioClips[i].length + this.blankTimeAtEnd[i]) * 1000))
if (i === this.audioClips.length - 1) {
this.tMP_Text.text = ""
if (this.gameObject.name === "intro") {
this.upperDoor.traverse((entity) => {
const audioComponent = entity.getComponent(AudioSource)
if (audioComponent) {
audioComponent.play()
}
})
}
}
}
}
}