NLDClient-yudde/ProjectNLD/Assets/Editor/MusicCube/MusicCubeWindow.cs

189 lines
6.3 KiB
C#

#if UNITY_EDITOR
namespace MusicCubeEditor
{
using CriWare;
using CriWare.Assets;
using PhxhSDK;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using Constants = Framework.Constants;
public class MusicCubeWindow : EditorWindow
{
List<cfg.AudioCfg.DataAudio> cfgList;
private GameObject musicEditorObj;
CriAtomSourceForAsset criAtomSource;
public static void ShowWindow()
{
var window = GetWindow<MusicCubeWindow>();
window.titleContent = new GUIContent("MusicCube配置工具");
window.maximized = false;
window.minSize = new Vector2(300, 300);
int width = 600;
int height = 400;
var x = (Screen.currentResolution.width - width) / 2;
var y = (Screen.currentResolution.height - height) / 2;
Rect centerRect = new Rect(x, y, width, height);
window.position = centerRect;
window.Init();
window.Show();
window.Focus();
MusicCubeEditorToolManager.Instance.OpenTestScene();
EditorApplication.EnterPlaymode();
}
int nowFrameCount = 1;
string[] musicNames;
int selectedIndex = 0;
int _nowIndex = 0;
int selectdFrameCount;
#region json序列化用
MusicCubeEditorToolManager .OneMusicData all = new MusicCubeEditorToolManager.OneMusicData();
MusicCubeEditorToolManager.OneFrameData nowFramedata = new MusicCubeEditorToolManager.OneFrameData();
private CriAtomExOutputAnalyzer analyzer;
string nowMusicName;
#endregion
void Init()
{
cfgList = Framework.EditorTableManager.instance.tables.Audios.DataList;
List<string> itemNames = new List<string>();
for (int i = 0; i < cfgList.Count; i++)
{
itemNames.Add("请选择Audio");
itemNames.Add(cfgList[i].Key);
}
musicNames = itemNames.ToArray();
MusicCubeEditorToolManager.Instance.nowPlayMusicName= musicNames[0];
all= MusicCubeEditorToolManager.Instance.LoadConfig(musicNames[0]);
}
private void OnGUI()
{
#region EditorGUILayout.Popup 下拉
_nowIndex = EditorGUILayout.Popup("music name", selectedIndex, musicNames);
if (_nowIndex != selectedIndex)
{
if(_nowIndex!=0)
{
selectedIndex = _nowIndex;
//SetAudioCfg();
MusicCubeEditorToolManager.Instance.nowPlayMusicName = (musicNames[selectedIndex]);
all = MusicCubeEditorToolManager.Instance.LoadConfig(musicNames[selectedIndex]);
}
}
#endregion
nowFrameCount = EditorGUILayout.IntSlider("第几帧:", nowFrameCount, 0, all.frameDatas.Count);
if (nowFrameCount != selectdFrameCount)
{
selectdFrameCount = nowFrameCount;
}
GUILayout.TextArea("请填1到5的整数");
GUILayout.BeginHorizontal();
//for (int j = 0; j < 16; j++)
//{
// string n = GUILayout.TextField(all.frameDatas[nowFrameCount].ColData[j].ToString());
// if (nowFramedata.ColData.Count < 16)
// {
// nowFramedata.ColData.Add(Convert.ToInt32(n));
// }
// else
// {
// nowFramedata.ColData[j] = Convert.ToInt32(n);
// }
//}
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
if (GUILayout.Button("保存修改"))
{
all.frameDatas[nowFrameCount]= nowFramedata;
MusicCubeEditorToolManager.Instance.SaveConfig(all);
}
if (GUILayout.Button("预览"))
{
MusicCubeRun musicCubeRun = GameObject.Find("MusicCube").GetComponent<MusicCubeRun>();
musicCubeRun.StartPlay(MusicCubeEditorToolManager.Instance.ConvertOneMusicDataToListArray(all));
}
if (GUILayout.Button("录制"))
{
SetOnPlay();
}
GUILayout.EndHorizontal();
}
int _cueIDs = 0;
public int CueIDGen()
{
return ++_cueIDs;
}
private void SetAudioCfg()
{
string acbName = GetAudioName(musicNames[selectedIndex]);
CriAtomAcbAsset acbAsset = AssetDatabase.LoadAssetAtPath<CriAtomAcbAsset>(acbName);
//acbAsset.OnLoaded += Loaded;
acbAsset.LoadImmediate();
Loaded(acbAsset);
}
private void SetOnPlay()
{
AnalyerGenData ana = GameObject.Find("Analyzer").GetComponent<AnalyerGenData>();
//ana.SetOnPlay(MusicCubeEditorToolManager.Instance.ChangeDataToJson, 6, nowMusicName);
ana.SetOnPlay(MusicCubeEditorToolManager.Instance.ChangeDataToJson, 6, nowMusicName);
EditorUtility.DisplayDialog("提示", "录制成功", "确定");
}
private void Loaded(CriAtomAcbAsset asset)
{
criAtomSource = GameObject.Find("CriAtomSource").GetComponent<CriAtomSourceForAsset>();
CriAtomCueReference cueReference = new CriAtomCueReference(asset, 0);//CueIDGen());
criAtomSource.Cue = cueReference;
criAtomSource.loop = false;
criAtomSource.volume = 1f;
criAtomSource.use3dPositioning = false;
EditorUtility.DisplayDialog("提示", "加载完毕", "确定");
}
private string GetAudioName(string oriname)
{
var audioData = Framework.EditorTableManager.instance.tables.Audios.GetByKey(oriname);
var audioName = Constants.AUDIO_MUSIC_PATH + audioData.Path;
string acfName = audioName + ".acf";
LoadAcf(acfName);
string acbName = audioName + ".acb";
return acbName;
}
private async void LoadAcf(string acfName)
{
CriAtomAcfAsset acfAsset = await AssetManager.Instance.LoadAssetAsync<CriAtomAcfAsset>(acfName);
acfAsset.Register();
}
}
}
#endif