MaidPoseSelectorPane.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using UnityEngine;
  5. namespace COM3D2.MeidoPhotoStudio.Plugin
  6. {
  7. public class MaidPoseSelectorPane : BasePane
  8. {
  9. private MeidoManager meidoManager;
  10. private Button poseLeftButton;
  11. private Button poseRightButton;
  12. private Button poseGroupLeftButton;
  13. private Button poseGroupRightButton;
  14. private Dropdown poseGroupDropdown;
  15. private Dropdown poseDropdown;
  16. private string selectedPoseGroup;
  17. private int selectedPose;
  18. public MaidPoseSelectorPane(MeidoManager meidoManager)
  19. {
  20. this.meidoManager = meidoManager;
  21. this.poseGroupDropdown = new Dropdown(Translation.GetArray("poseGroupDropdown", Constants.PoseGroupList));
  22. this.poseGroupDropdown.SelectionChange += ChangePoseGroup;
  23. this.poseDropdown = new Dropdown(MakePoseList(Constants.PoseDict[Constants.PoseGroupList[0]]));
  24. this.poseDropdown.SelectionChange += ChangePose;
  25. this.poseGroupLeftButton = new Button("<");
  26. this.poseGroupLeftButton.ControlEvent += (s, a) => poseGroupDropdown.Step(-1);
  27. this.poseGroupRightButton = new Button(">");
  28. this.poseGroupRightButton.ControlEvent += (s, a) => poseGroupDropdown.Step(1);
  29. this.poseLeftButton = new Button("<");
  30. this.poseLeftButton.ControlEvent += (s, a) => poseDropdown.Step(-1);
  31. this.poseRightButton = new Button(">");
  32. this.poseRightButton.ControlEvent += (s, a) => poseDropdown.Step(1);
  33. }
  34. private void ChangePoseGroup(object sender, EventArgs args)
  35. {
  36. string newPoseGroup = Constants.PoseGroupList[this.poseGroupDropdown.SelectedItemIndex];
  37. if (selectedPoseGroup == newPoseGroup)
  38. {
  39. this.poseDropdown.SelectedItemIndex = 0;
  40. }
  41. else
  42. {
  43. selectedPoseGroup = newPoseGroup;
  44. if (this.poseGroupDropdown.SelectedItemIndex >= Constants.CustomPoseGroupsIndex)
  45. {
  46. this.poseDropdown.SetDropdownItems(MakePoseList(Constants.CustomPoseDict[selectedPoseGroup]));
  47. }
  48. else
  49. {
  50. this.poseDropdown.SetDropdownItems(MakePoseList(Constants.PoseDict[selectedPoseGroup]));
  51. }
  52. }
  53. }
  54. private void ChangePose(object sender, EventArgs args)
  55. {
  56. selectedPose = poseDropdown.SelectedItemIndex;
  57. if (updating) return;
  58. PoseInfo poseInfo = MakePoseInfo();
  59. meidoManager.ActiveMeido.SetPose(poseInfo);
  60. }
  61. private PoseInfo MakePoseInfo()
  62. {
  63. int poseGroup = this.poseGroupDropdown.SelectedItemIndex;
  64. int pose = this.poseDropdown.SelectedItemIndex;
  65. string poseName;
  66. if (this.poseGroupDropdown.SelectedItemIndex >= Constants.CustomPoseGroupsIndex)
  67. poseName = Constants.CustomPoseDict[selectedPoseGroup][selectedPose].Value;
  68. else
  69. poseName = Constants.PoseDict[selectedPoseGroup][selectedPose];
  70. return new PoseInfo(poseGroup, pose, poseName);
  71. }
  72. private string[] MakePoseList(IEnumerable<string> poseList)
  73. {
  74. return poseList.Select((pose, i) => $"{i + 1}:{pose}").ToArray();
  75. }
  76. private string[] MakePoseList(List<KeyValuePair<string, string>> poseList)
  77. {
  78. return poseList.Select((kvp, i) => $"{i + 1}:{kvp.Key}").ToArray();
  79. }
  80. public override void Update()
  81. {
  82. this.updating = true;
  83. PoseInfo poseInfo = this.meidoManager.ActiveMeido.poseInfo;
  84. this.poseGroupDropdown.SelectedItemIndex = poseInfo.PoseGroupIndex;
  85. this.poseDropdown.SelectedItemIndex = poseInfo.PoseIndex;
  86. this.updating = false;
  87. }
  88. public override void Draw(params GUILayoutOption[] layoutOptions)
  89. {
  90. float arrowButtonSize = 30;
  91. GUILayoutOption[] arrowLayoutOptions = {
  92. GUILayout.Width(arrowButtonSize),
  93. GUILayout.Height(arrowButtonSize)
  94. };
  95. float dropdownButtonHeight = arrowButtonSize;
  96. float dropdownButtonWidth = 153f;
  97. GUILayoutOption[] dropdownLayoutOptions = new GUILayoutOption[] {
  98. GUILayout.Height(dropdownButtonHeight),
  99. GUILayout.Width(dropdownButtonWidth)
  100. };
  101. GUI.enabled = meidoManager.HasActiveMeido && !meidoManager.ActiveMeido.IsStop;
  102. GUILayout.BeginHorizontal();
  103. this.poseGroupLeftButton.Draw(arrowLayoutOptions);
  104. this.poseGroupDropdown.Draw(dropdownLayoutOptions);
  105. this.poseGroupRightButton.Draw(arrowLayoutOptions);
  106. GUILayout.EndHorizontal();
  107. GUILayout.BeginHorizontal();
  108. this.poseLeftButton.Draw(arrowLayoutOptions);
  109. this.poseDropdown.Draw(dropdownLayoutOptions);
  110. this.poseRightButton.Draw(arrowLayoutOptions);
  111. GUILayout.EndHorizontal();
  112. }
  113. }
  114. }