private void OnEnable() { avatars = GetAvatars(); avatarKeys = avatars.Keys.ToArray(); if (0 != avatars.Count) { _8TrackEditor = new Avatar8TrackEditor(avatars[avatarKeys[0]]); expressionParameters = avatars[avatarKeys[0]].expressionParameters; expressionsMenu = avatars[avatarKeys[0]].expressionsMenu; } else { _8TrackEditor = new Avatar8TrackEditor(); } }
private bool VRC_Actions(string songLibrary, List <AudioClip> libAssets, Avatar8TrackEditor _8Track) { //--- --- VRC Expression Parameters --- --- if (null != expressionParameters) { VRCExpressionParameters.Parameter volumeParam = new VRCExpressionParameters.Parameter() { name = _8Track.VolumeEPName, valueType = VRCExpressionParameters.ValueType.Float }; VRCExpressionParameters.Parameter trackParam = new VRCExpressionParameters.Parameter() { name = _8Track.TrackEPName, valueType = VRCExpressionParameters.ValueType.Int }; VRCExpressionParameters.Parameter[] parameters = expressionParameters.parameters; bool hasTrack = false; bool hasVolume = false; foreach (VRCExpressionParameters.Parameter parameter in parameters) { if (parameter.name == _8TrackEditor.VolumeEPName) { hasVolume = true; } else if (parameter.name == _8TrackEditor.TrackEPName) { hasTrack = true; } } if (!hasVolume) { ArrayUtility.Add <VRCExpressionParameters.Parameter>(ref expressionParameters.parameters, volumeParam); } if (!hasTrack) { ArrayUtility.Add <VRCExpressionParameters.Parameter>(ref expressionParameters.parameters, trackParam); } UnityEditor.EditorUtility.SetDirty(expressionParameters); } //--- --- VRC Expression Menu --- --- VRCExpressionsMenu mainMenu = new VRCExpressionsMenu() { name = _8Track._8TrackObject.name + " Menu" }; mainMenu.controls.Add(new VRCExpressionsMenu.Control() { icon = _8Track.StopIcon, name = "Stop", parameter = new VRCExpressionsMenu.Control.Parameter() { name = _8Track.TrackEPName }, type = VRCExpressionsMenu.Control.ControlType.Toggle, value = 0 }); mainMenu.controls.Add(new VRCExpressionsMenu.Control() { icon = _8Track.VolumeIcon, name = "Volume", subParameters = new VRCExpressionsMenu.Control.Parameter[] { new VRCExpressionsMenu.Control.Parameter() { name = _8Track.VolumeEPName } }, type = VRCExpressionsMenu.Control.ControlType.RadialPuppet }); VRCExpressionsMenu disk = new VRCExpressionsMenu() { name = "Disk " + 1 }; mainMenu.controls.Add(new VRCExpressionsMenu.Control() { icon = _8Track.DiskIcon, name = disk.name, type = VRCExpressionsMenu.Control.ControlType.SubMenu, subMenu = disk }); int menuCount = 3; VRCExpressionsMenu menu = mainMenu; List <VRCExpressionsMenu> menus = new List <VRCExpressionsMenu>(); int diskCount = 0; List <VRCExpressionsMenu> disks = new List <VRCExpressionsMenu> { disk }; int trackNumber = 0; do { if (libAssets.Count <= trackNumber) { break; } string trackName = libAssets[trackNumber].name; trackNumber++; if (diskCount == 8) { VRCExpressionsMenu newDisk = new VRCExpressionsMenu() { name = "Disk " + (disks.Count + 1) }; if (7 == menuCount && 0 < libAssets.Count - (trackNumber)) { VRCExpressionsMenu newMenu = new VRCExpressionsMenu() { name = "More..." }; menu.controls.Add(new VRCExpressionsMenu.Control() { icon = _8Track.FolderIcon, name = newMenu.name, type = VRCExpressionsMenu.Control.ControlType.SubMenu, subMenu = newMenu }); menus.Add(newMenu); menu = newMenu; menuCount = 0; } menu.controls.Add(new VRCExpressionsMenu.Control() { icon = _8Track.DiskIcon, name = newDisk.name, type = VRCExpressionsMenu.Control.ControlType.SubMenu, subMenu = newDisk }); menuCount++; disks.Add(newDisk); disk = newDisk; diskCount = 0; } disk.controls.Add(new VRCExpressionsMenu.Control() { icon = _8Track.TrackIcon, name = trackName, parameter = new VRCExpressionsMenu.Control.Parameter() { name = _8Track.TrackEPName }, type = VRCExpressionsMenu.Control.ControlType.Toggle, value = trackNumber }); diskCount++; } while(true); foreach (VRCExpressionsMenu d in disks) { CreateAsset(_8Track.AudioClip, d, d.name + ".asset"); EditorUtility.SetDirty(d); } CreateAsset(_8Track.AudioClip, mainMenu, mainMenu.name + ".asset"); EditorUtility.SetDirty(mainMenu); for (int i = 0; i < menus.Count; i++) { CreateAsset(_8TrackEditor.AudioClip, menus[i], _8Track._8TrackObject.name + " Menu " + i + ".asset"); } if (null != expressionsMenu) { VRCExpressionsMenu.Control toggle = GetMenuControl(); expressionsMenu.controls.Remove(toggle); expressionsMenu.controls.Add(new VRCExpressionsMenu.Control() { icon = _8Track.FolderIcon, name = _8TrackEditor._8TrackObject.name, type = VRCExpressionsMenu.Control.ControlType.SubMenu, subMenu = mainMenu }); EditorUtility.SetDirty(expressionsMenu); } EditorUtility.SetDirty(expressionParameters); AssetDatabase.SaveAssets(); return(true); }