Files
Robii Aragon fd87a6ffd5 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

438 lines
8.6 KiB
C#

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine.UI;
using System;
using GameKitController.Audio;
public class radioSystem : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public float radioVolume;
public bool playSongsOnStart;
public bool playSongsOnActive;
public bool playSongsRandomly;
public bool repeatList;
public string mainManagerName = "Songs Manager";
[Space]
[Header ("Debug")]
[Space]
public bool playingSong;
public bool songPaused;
public float currentSongLength;
public bool radioActive;
public bool movingSongLenghtSlider;
public List<AudioClip> clips = new List<AudioClip> ();
public List<AudioElement> audioElements = new List<AudioElement> ();
public int currentIndex = 0;
[Space]
[Header ("Components")]
[Space]
public Scrollbar volumeScrollbar;
public Text currentSongNameText;
public Slider songLenghtSlider;
public GameObject playButton;
public GameObject pauseButton;
public GameObject songListContent;
public GameObject songListElementParent;
public GameObject songListElement;
public AudioSource source;
public songsManager mainSongsManager;
bool songsLoaded;
bool radioCanBeUsed = true;
public AudioElement _currentSongAudioElement = new AudioElement ();
bool _currentSongAudioElementAssigned;
private void InitializeAudioElements ()
{
if (source == null) {
source = gameObject.AddComponent<AudioSource> ();
}
if (clips != null && clips.Count > 0) {
audioElements = new List<AudioElement> ();
foreach (var clip in clips) {
audioElements.Add (new AudioElement { clip = clip });
}
}
foreach (var audioElement in audioElements) {
if (source != null) {
audioElement.audioSource = source;
}
}
if (source != null) {
_currentSongAudioElement.audioSource = source;
_currentSongAudioElementAssigned = _currentSongAudioElement.audioSource != null;
}
}
void Start ()
{
songListElement.SetActive (false);
InitializeAudioElements ();
volumeScrollbar.value = radioVolume;
bool mainSongsManagerLocated = mainSongsManager != null;
if (!mainSongsManagerLocated) {
mainSongsManager = songsManager.Instance;
mainSongsManagerLocated = mainSongsManager != null;
}
if (!mainSongsManagerLocated) {
GKC_Utils.instantiateMainManagerOnSceneWithTypeOnApplicationPlaying (songsManager.getMainManagerName (), typeof(songsManager), true);
mainSongsManager = songsManager.Instance;
mainSongsManagerLocated = mainSongsManager != null;
}
if (!mainSongsManagerLocated) {
mainSongsManager = FindObjectOfType<songsManager> ();
mainSongsManagerLocated = mainSongsManager != null;
}
if (!mainSongsManagerLocated) {
radioCanBeUsed = false;
}
currentSongNameText.text = "...";
}
void Update ()
{
if (!radioCanBeUsed) {
return;
}
if (radioActive) {
if (playingSong) {
if (!movingSongLenghtSlider) {
songLenghtSlider.value = _currentSongAudioElement.audioSource.time / currentSongLength;
}
if (!songPaused) {
if ((_currentSongAudioElement.audioSource.time / currentSongLength) > 0.99f) {
if (currentIndex == audioElements.Count - 1) {
if (repeatList) {
setNextSong ();
} else {
stopCurrentSong ();
currentIndex = 0;
setPlayPauseButtonState (true);
}
} else {
if (playSongsRandomly) {
setRandomSong ();
} else {
setNextSong ();
}
}
}
}
}
if (!songsLoaded) {
if (mainSongsManager.allSongsLoaded ()) {
getSongsList ();
songsLoaded = true;
}
}
}
if (playSongsOnStart) {
if (songsLoaded) {
setRadioActiveState (true);
playSongsOnStart = false;
}
}
}
public void playCurrentSong ()
{
if (playingSong) {
if (_currentSongAudioElementAssigned) {
AudioPlayer.Play (_currentSongAudioElement, gameObject);
currentSongLength = _currentSongAudioElement.clip.length;
songLenghtSlider.value = _currentSongAudioElement.audioSource.time / currentSongLength;
}
} else {
PlayCurrent ();
}
songPaused = false;
}
public void stopCurrentSong ()
{
if (_currentSongAudioElementAssigned) {
AudioPlayer.Stop (_currentSongAudioElement, gameObject);
}
playingSong = false;
songLenghtSlider.value = 0;
}
public void pauseCurrentSong ()
{
songPaused = true;
if (_currentSongAudioElementAssigned) {
AudioPlayer.Pause (_currentSongAudioElement, gameObject);
}
}
public void setNextSong ()
{
if (audioElements.Count == 0) {
return;
}
if (playSongsRandomly) {
setRandomSongIndex ();
} else {
currentIndex = (currentIndex + 1) % audioElements.Count;
}
setPlayPauseButtonState (false);
PlayCurrent ();
}
public void setPreviousSong ()
{
if (audioElements.Count == 0) {
return;
}
if (playSongsRandomly) {
setRandomSongIndex ();
} else {
currentIndex--;
if (currentIndex < 0) {
currentIndex = audioElements.Count - 1;
}
}
setPlayPauseButtonState (false);
PlayCurrent ();
}
public void setRandomSong ()
{
setRandomSongIndex ();
PlayCurrent ();
}
public void setRandomSongIndex ()
{
int nextIndex = 0;
int loop = 0;
while (nextIndex == currentIndex) {
nextIndex = (int)UnityEngine.Random.Range (0, audioElements.Count);
loop++;
if (loop > 100) {
print ("loop error");
return;
}
}
currentIndex = nextIndex;
}
public void setRadioVolume ()
{
radioVolume = volumeScrollbar.value;
if (_currentSongAudioElementAssigned) {
_currentSongAudioElement.audioSource.volume = radioVolume;
}
}
void PlayCurrent ()
{
if (audioElements.Count <= 0) {
return;
}
if (_currentSongAudioElementAssigned) {
_currentSongAudioElement = audioElements [currentIndex];
_currentSongAudioElement.audioSource = source;
_currentSongAudioElement.audioSource.time = 0;
AudioPlayer.Play (_currentSongAudioElement, gameObject);
string songName = audioElements [currentIndex].clip.name;
int extensionIndex = songName.IndexOf (".");
if (extensionIndex > -1) {
songName = songName.Substring (0, extensionIndex);
}
currentSongNameText.text = songName;
playingSong = true;
currentSongLength = _currentSongAudioElement.clip.length;
songLenghtSlider.value = _currentSongAudioElement.audioSource.time / currentSongLength;
}
}
public void setPlaySongsRandomlyState (bool state)
{
playSongsRandomly = state;
}
public void setRepeatListState (bool state)
{
repeatList = state;
}
public void setMovingSongLenghtSliderState (bool state)
{
if (playingSong) {
movingSongLenghtSlider = state;
}
}
public void setSongPart ()
{
if (playingSong) {
if (_currentSongAudioElementAssigned) {
_currentSongAudioElement.audioSource.time = _currentSongAudioElement.clip.length * songLenghtSlider.value;
}
}
}
public void setRadioActiveState (bool state)
{
radioActive = state;
if (radioActive) {
if (playSongsOnActive) {
if (playSongsRandomly) {
setRandomSongIndex ();
}
PlayCurrent ();
setPlayPauseButtonState (false);
}
} else {
if (playingSong) {
stopCurrentSong ();
setPlayPauseButtonState (true);
}
songListContent.SetActive (false);
}
}
public void setOnlyRadioActiveState (bool state)
{
radioActive = state;
}
public void setPlayPauseButtonState (bool state)
{
playButton.SetActive (state);
pauseButton.SetActive (!state);
}
public void selectSongOnList (GameObject songButtonPressed)
{
string songNameToCheck = songButtonPressed.GetComponentInChildren<Text> ().text;
for (int i = 0; i < audioElements.Count; i++) {
if (audioElements [i].clip.name.Contains (songNameToCheck)) {
currentIndex = i;
PlayCurrent ();
return;
}
}
}
public void getSongsList ()
{
//print (mainSongsManager.getSongsList ().Count);
audioElements = mainSongsManager.getSongsList ();
for (int i = 0; i < audioElements.Count; i++) {
string songName = audioElements [i].clip.name;
int extensionIndex = songName.IndexOf (".");
if (extensionIndex > -1) {
songName = songName.Substring (0, extensionIndex);
}
GameObject newSongListElement = (GameObject)Instantiate (songListElement, Vector3.zero, songListElement.transform.rotation);
newSongListElement.SetActive (true);
newSongListElement.transform.SetParent (songListElementParent.transform);
newSongListElement.transform.localScale = Vector3.one;
newSongListElement.transform.localPosition = Vector3.zero;
newSongListElement.name = "Song List Element (" + songName + ")";
newSongListElement.GetComponentInChildren<Text> ().text = songName;
}
}
}