using Gallop; using SFB; using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using TMPro; using UnityEngine; using UnityEngine.UI; using static UnityEditor.SceneView; using Debug = UnityEngine.Debug; public class UmaViewerUI : MonoBehaviour { public static UmaViewerUI Instance; private UmaViewerMain Main => UmaViewerMain.Instance; private UmaViewerBuilder Builder => UmaViewerBuilder.Instance; public CanvasScaler canvasScaler; [Header("normal models")] public ScrollRect CharactersList; public ScrollRect MobCharactersList; public PageManager MobCharactersPageCtrl; public ScrollRect CostumeList; public ScrollRect MobCostumeList; public ScrollRect AnimationSetList; public ScrollRect AnimationList; public PageManager AnimationPageCtrl; [Header("mini models")] public ScrollRect MiniCharactersList; public ScrollRect MiniCostumeList; public ScrollRect MiniAnimationSetList; public ScrollRect MiniAnimationList; public PageManager MiniAnimationPageCtrl; [Header("other")] public ScrollRect PropList; public PageManager PropPageCtrl; public ScrollRect SceneList; public ScrollRect MaterialsList; public PageManager ScenePageCtrl; public ScrollRect MessageScrollRect; public Text MessageText; [Header("lists")] public ScrollRect EmotionList; public Transform FacialList; public ScrollRect EarList; public ScrollRect EyeBrowList; public ScrollRect EyeList; public ScrollRect MouthList; public ScrollRect OtherList; public ScrollRect LiveList; public ScrollRect LiveSoundList; public ScrollRect LiveCharaSoundList; public ScrollRect NormalSoundList; public ScrollRect NormalSubSoundList; public PageManager NormalSoundCtrl; [Header("audio")] public Slider AudioSlider; public Button AudioPlayButton; public TextMeshProUGUI TitleText; public TextMeshProUGUI ProgressText; public Text LyricsText; [Header("animations")] public Slider AnimationSlider; public Slider AnimationSpeedSlider; public Button AnimationPlayButton; public TextMeshProUGUI AnimationTitleText; public TextMeshProUGUI AnimationSpeedText; public TextMeshProUGUI AnimationProgressText; [Header("backgrounds")] public ScrollRect BackGroundList; public PageManager BackGroundPageCtrl; public GameObject BG_Canvas; public GameObject BG_HSVPickerObj; public Image BG_Image; [Header("live settings")] public Sprite CharaIconDefault; public Sprite CostumeIconDefault; public LiveCharacterSelect CurrentSeletChara; public GameObject LiveSelectPrefab; public GameObject LiveSelectPannel; public GameObject SelectCharacterPannel; public ScrollRect LiveSelectList; public Image LiveSelectImage; public Text LiveSelectInfoText; private LiveEntry currentLive; [Header("settings")] public TMP_InputField SSWidth; public TMP_InputField SSHeight; public Toggle SSTransparent; public TMP_InputField GifWidth; public TMP_InputField GifHeight; public Toggle GifTransparent; public Slider GifQuality; public TextMeshProUGUI GifQualityLabel; public Slider GifSlider; public Button GifButton; public Button VMDButton; public Button UpdateDBButton; public TMP_Dropdown WorkModeDropdown; public TMP_Dropdown LanguageDropdown; public List TogglablePanels = new List(); public List TogglableFacials = new List(); [Header("prefabs")] public GameObject UmaContainerPrefab; public GameObject UmaContainerCostumePrefab; public GameObject UmaContainerLivePrefab; public GameObject UmaContainerSliderPrefab; public GameObject UmaContainerAssetsPrefab; public UmaUIContainer UmaContainerTogglePrefab; private int LoadedAssetCount = 0; [SerializeField] private RectTransform LoadedAssetsPanel; public Color UIColor1, UIColor2; public bool isCriware = false; public bool isHeadFix = false; public bool isTPose = false; public bool DynamicBoneEnable = true; public bool EnableEyeTracking = true; public bool EnableFaceOverride = true; [Header("Live")] public bool LiveTime = false; public Dropdown LiveDropdown; public int LiveMode = 0; public FaceDrivenKeyTarget currentFaceDrivenKeyTarget; private IEnumerator UpdateResVerCoroutine; private void Awake() { Instance = this; AudioPlayButton.onClick.AddListener(AudioPause); AudioSlider.onValueChanged.AddListener(AudioProgressChange); AnimationPlayButton.onClick.AddListener(AnimationPause); AnimationSlider.onValueChanged.AddListener(AnimationProgressChange); AnimationSpeedSlider.onValueChanged.AddListener(AnimationSpeedChange); } private void Start() { WorkModeDropdown.SetValueWithoutNotify((int)Config.Instance.WorkMode); LanguageDropdown.SetValueWithoutNotify((int)Config.Instance.Language); UpdateDBButton.interactable = (Config.Instance.WorkMode == WorkMode.Standalone); } private void Update() { if (LiveMode != LiveDropdown.value) { LiveMode = LiveDropdown.value; if (LiveSelectPannel.activeSelf && currentLive != null) { foreach (var select in LiveSelectList.content.GetComponentsInChildren()) { if(select != LiveSelectList.content.transform) { Destroy(select.gameObject); } } switch (LiveMode) { case 0: LiveSelectImage.sprite = currentLive.Icon; int mainCount = 0; foreach (var motion in Main.AbMotions.Where(a => a.Name.StartsWith($"3d/motion/live/body/son{currentLive.MusicId}") && Path.GetFileName(a.Name).Split('_').Length == 4)) { mainCount += 1; } LiveSelectInfoText.text = $"{currentLive.SongName}\nMain Members Count: {mainCount}"; for (int i = 0; i < mainCount; i++) { var chara = Instantiate(LiveSelectPrefab, LiveSelectList.content).GetComponent(); chara.IndexText.text = (i + 1).ToString(); chara.GetComponent