steampunk-quest/Assets/scripts/dialogSystem/DialogPlayer.cs

86 lines
2.0 KiB
C#
Raw Normal View History

2022-01-19 19:22:21 +03:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//todo: make scenes and access to dialog player via it
[RequireComponent(typeof(AudioPlayer))]
[RequireComponent(typeof(AudioVisualizer))]
public class DialogPlayer : MonoBehaviour
{
[SerializeField]
AudioPlayer _audioPlayer;
[SerializeField]
AudioVisualizer _audioVisualizer;
2022-01-29 11:50:50 +03:00
DialogDataClass[] _dialogData;
int _idx = 0;
Replica _currentReplica;
2022-01-29 19:49:41 +03:00
bool _isDialogPlaying = true;
bool getIsDialogPlaying(){
return _isDialogPlaying;
}
2022-01-29 11:50:50 +03:00
void changeDialogData(DialogDataClass[] dialogData){
_dialogData = dialogData;
_idx = 0;
_currentReplica = createReplica();
_currentReplica.Play();
}
void playReplica(int idx) {
if (idx >= DialogData.FirstScene.Length) return;
//Debug.Log(idx.ToString() + DialogData.FirstScene[idx].text);
Replica replica = new Replica(
DialogData.FirstScene[idx].audio,
2022-01-19 19:22:21 +03:00
new AudioVisualizer.AudioVisualizerData(
2022-01-29 11:50:50 +03:00
text: _dialogData[idx].text,
role: _dialogData[idx].role
),
2022-01-19 19:22:21 +03:00
_audioPlayer,
() => {
2022-01-29 11:50:50 +03:00
Debug.Log(idx);
playReplica(idx+1);
2022-01-19 19:22:21 +03:00
},
_audioVisualizer
);
2022-01-29 11:50:50 +03:00
replica.Play();
}
Replica createReplica() {
Replica replica = new Replica(
_dialogData[_idx].audio,
2022-01-19 19:22:21 +03:00
new AudioVisualizer.AudioVisualizerData(
2022-01-29 11:50:50 +03:00
text: _dialogData[_idx].text,
role: _dialogData[_idx].role
),
2022-01-19 19:22:21 +03:00
_audioPlayer,
2022-01-29 11:50:50 +03:00
() => {},
2022-01-19 19:22:21 +03:00
_audioVisualizer
);
2022-01-29 11:50:50 +03:00
return replica;
}
void Start()
{
_dialogData = DialogData.FirstScene;
_audioPlayer = Object.FindObjectOfType<AudioPlayer>();
_audioVisualizer = Object.FindObjectOfType<AudioVisualizer>();
_currentReplica = createReplica();
_currentReplica.Play();
2022-01-19 19:22:21 +03:00
}
// Update is called once per frame
void Update()
{
2022-01-29 19:49:41 +03:00
if (_idx >= _dialogData.Length-1) {
_isDialogPlaying = false;
}
2022-01-29 11:50:50 +03:00
if (_currentReplica.getIsEnded()) {
_idx++;
_currentReplica = createReplica();
_currentReplica.Play();
}
2022-01-19 19:22:21 +03:00
}
}