123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- using System.IO;
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine;
- namespace COM3D2.MeidoPhotoStudio.Plugin
- {
- public class HandPresetPane : BasePane
- {
- private readonly MeidoManager meidoManager;
- private readonly Dropdown presetCategoryDropdown;
- private readonly Button nextCategoryButton;
- private readonly Button previousCategoryButton;
- private readonly Dropdown presetDropdown;
- private readonly Button nextPresetButton;
- private readonly Button previousPresetButton;
- private readonly Button leftHandButton;
- private readonly Button rightHandButton;
- private string SelectedCategory => Constants.CustomHandGroupList[presetCategoryDropdown.SelectedItemIndex];
- private List<string> CurrentPresetList => Constants.CustomHandDict[SelectedCategory];
- private string CurrentPreset => CurrentPresetList[presetDropdown.SelectedItemIndex];
- private string previousCategory;
- private bool presetListEnabled = true;
- public HandPresetPane(MeidoManager meidoManager)
- {
- Constants.CustomHandChange += OnPresetChange;
- this.meidoManager = meidoManager;
- presetCategoryDropdown = new Dropdown(Constants.CustomHandGroupList.ToArray());
- presetCategoryDropdown.SelectionChange += (s, a) => ChangePresetCategory();
- nextCategoryButton = new Button(">");
- nextCategoryButton.ControlEvent += (s, a) => presetCategoryDropdown.Step(1);
- previousCategoryButton = new Button("<");
- previousCategoryButton.ControlEvent += (s, a) => presetCategoryDropdown.Step(-1);
- presetDropdown = new Dropdown(UIPresetList());
- nextPresetButton = new Button(">");
- nextPresetButton.ControlEvent += (s, a) => presetDropdown.Step(1);
- previousPresetButton = new Button("<");
- previousPresetButton.ControlEvent += (s, a) => presetDropdown.Step(-1);
- leftHandButton = new Button(Translation.Get("handPane", "leftHand"));
- leftHandButton.ControlEvent += (s, a) => SetHandPreset(right: false);
- rightHandButton = new Button(Translation.Get("handPane", "rightHand"));
- rightHandButton.ControlEvent += (s, a) => SetHandPreset(right: true);
- previousCategory = SelectedCategory;
- presetListEnabled = CurrentPresetList.Count > 0;
- }
- protected override void ReloadTranslation()
- {
- leftHandButton.Label = Translation.Get("handPane", "leftHand");
- rightHandButton.Label = Translation.Get("handPane", "rightHand");
- if (CurrentPresetList.Count == 0) presetDropdown.SetDropdownItems(UIPresetList());
- }
- public override void Draw()
- {
- GUILayoutOption dropdownWidth = GUILayout.Width(156f);
- GUILayoutOption noExpandWidth = GUILayout.ExpandWidth(false);
- GUI.enabled = meidoManager.HasActiveMeido;
- GUILayout.BeginHorizontal();
- presetCategoryDropdown.Draw(dropdownWidth);
- previousCategoryButton.Draw(noExpandWidth);
- nextCategoryButton.Draw(noExpandWidth);
- GUILayout.EndHorizontal();
- GUI.enabled = GUI.enabled && presetListEnabled;
- GUILayout.BeginHorizontal();
- presetDropdown.Draw(dropdownWidth);
- previousPresetButton.Draw(noExpandWidth);
- nextPresetButton.Draw(noExpandWidth);
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- rightHandButton.Draw();
- leftHandButton.Draw();
- GUILayout.EndHorizontal();
- GUI.enabled = true;
- }
- private void ChangePresetCategory()
- {
- presetListEnabled = CurrentPresetList.Count > 0;
- if (previousCategory == SelectedCategory) presetDropdown.SelectedItemIndex = 0;
- else
- {
- previousCategory = SelectedCategory;
- presetDropdown.SetDropdownItems(UIPresetList(), 0);
- }
- }
- private void SetHandPreset(bool right = false)
- {
- if (!meidoManager.HasActiveMeido) return;
- meidoManager.ActiveMeido.SetHandPreset(CurrentPreset, right);
- }
- private void OnPresetChange(object sender, PresetChangeEventArgs args)
- {
- if (args == PresetChangeEventArgs.Empty)
- {
- presetCategoryDropdown.SetDropdownItems(Constants.CustomHandGroupList.ToArray(), 0);
- presetDropdown.SetDropdownItems(UIPresetList(), 0);
- }
- else
- {
- presetCategoryDropdown.SetDropdownItems(
- Constants.CustomHandGroupList.ToArray(), Constants.CustomHandGroupList.IndexOf(args.Category)
- );
- presetDropdown.SetDropdownItems(UIPresetList(), CurrentPresetList.IndexOf(args.Path));
- }
- }
- private string[] UIPresetList()
- {
- return CurrentPresetList.Count == 0
- ? new[] { Translation.Get("handPane", "noPresetsMessage") }
- : CurrentPresetList.Select(Path.GetFileNameWithoutExtension).ToArray();
- }
- }
- }
|