CopyPosePane.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System.Linq;
  2. using UnityEngine;
  3. namespace MeidoPhotoStudio.Plugin;
  4. public class CopyPosePane : BasePane
  5. {
  6. private readonly MeidoManager meidoManager;
  7. private readonly Button copyButton;
  8. private readonly Dropdown meidoDropdown;
  9. private int[] copyMeidoSlot;
  10. private string copyIKHeader;
  11. public CopyPosePane(MeidoManager meidoManager)
  12. {
  13. this.meidoManager = meidoManager;
  14. meidoDropdown = new(new[] { Translation.Get("systemMessage", "noMaids") });
  15. copyButton = new(Translation.Get("copyPosePane", "copyButton"));
  16. copyButton.ControlEvent += (_, _) =>
  17. CopyPose();
  18. copyIKHeader = Translation.Get("copyPosePane", "header");
  19. }
  20. private bool PlentyOfMaids =>
  21. meidoManager.ActiveMeidoList.Count >= 2;
  22. private Meido FromMeido =>
  23. meidoManager.HasActiveMeido
  24. ? meidoManager.ActiveMeidoList[copyMeidoSlot[meidoDropdown.SelectedItemIndex]]
  25. : null;
  26. public override void Draw()
  27. {
  28. GUI.enabled = PlentyOfMaids;
  29. MpsGui.Header(copyIKHeader);
  30. MpsGui.WhiteLine();
  31. GUILayout.BeginHorizontal();
  32. meidoDropdown.Draw(GUILayout.Width(160f));
  33. copyButton.Draw(GUILayout.ExpandWidth(false));
  34. GUILayout.EndHorizontal();
  35. GUI.enabled = true;
  36. }
  37. public override void UpdatePane() =>
  38. SetMeidoDropdown();
  39. protected override void ReloadTranslation()
  40. {
  41. if (!PlentyOfMaids)
  42. meidoDropdown.SetDropdownItem(0, Translation.Get("systemMessage", "noMaids"));
  43. copyButton.Label = Translation.Get("copyPosePane", "copyButton");
  44. copyIKHeader = Translation.Get("copyPosePane", "header");
  45. }
  46. private void CopyPose()
  47. {
  48. if (meidoManager.ActiveMeidoList.Count >= 2)
  49. meidoManager.ActiveMeido.CopyPose(FromMeido);
  50. }
  51. private void SetMeidoDropdown()
  52. {
  53. if (meidoManager.ActiveMeidoList.Count >= 2)
  54. {
  55. var copyMeidoList = meidoManager.ActiveMeidoList
  56. .Where(meido => meido.Slot != meidoManager.ActiveMeido.Slot);
  57. copyMeidoSlot = copyMeidoList.Select(meido => meido.Slot).ToArray();
  58. var dropdownList = copyMeidoList
  59. .Select((meido, i) => $"{copyMeidoSlot[i] + 1}: {meido.LastName} {meido.FirstName}").ToArray();
  60. meidoDropdown.SetDropdownItems(dropdownList, 0);
  61. }
  62. else
  63. {
  64. meidoDropdown.SetDropdownItems(new[] { Translation.Get("systemMessage", "noMaids") });
  65. }
  66. }
  67. }