MaidPoseSelectorPane.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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.GetList("poseGroupDropdown", Constants.PoseGroupList));
  22. this.poseGroupDropdown.SelectionChange += ChangePoseGroup;
  23. this.poseDropdown = new Dropdown(Constants.PoseDict[Constants.PoseGroupList[0]].ToArray());
  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. List<KeyValuePair<string, string>> pairList = Constants.CustomPoseDict[selectedPoseGroup];
  47. string[] poseList = pairList.Select(pair => pair.Key).ToArray();
  48. this.poseDropdown.SetDropdownItems(poseList);
  49. }
  50. else
  51. {
  52. this.poseDropdown.SetDropdownItems(Constants.PoseDict[selectedPoseGroup].ToArray());
  53. }
  54. }
  55. }
  56. private void ChangePose(object sender, EventArgs args)
  57. {
  58. selectedPose = poseDropdown.SelectedItemIndex;
  59. if (updating) return;
  60. PoseInfo poseInfo = MakePoseInfo();
  61. meidoManager.ActiveMeido.SetPose(poseInfo);
  62. }
  63. private PoseInfo MakePoseInfo()
  64. {
  65. int poseGroup = this.poseGroupDropdown.SelectedItemIndex;
  66. int pose = this.poseDropdown.SelectedItemIndex;
  67. string poseName;
  68. if (this.poseGroupDropdown.SelectedItemIndex >= Constants.CustomPoseGroupsIndex)
  69. poseName = Constants.CustomPoseDict[selectedPoseGroup][selectedPose].Value;
  70. else
  71. poseName = Constants.PoseDict[selectedPoseGroup][selectedPose];
  72. return new PoseInfo(poseGroup, pose, poseName);
  73. }
  74. public override void Update()
  75. {
  76. this.updating = true;
  77. PoseInfo poseInfo = this.meidoManager.ActiveMeido.poseInfo;
  78. this.poseGroupDropdown.SelectedItemIndex = poseInfo.PoseGroupIndex;
  79. this.poseDropdown.SelectedItemIndex = poseInfo.PoseIndex;
  80. this.updating = false;
  81. }
  82. public override void Draw(params GUILayoutOption[] layoutOptions)
  83. {
  84. float arrowButtonSize = 30;
  85. GUILayoutOption[] arrowLayoutOptions = {
  86. GUILayout.Width(arrowButtonSize),
  87. GUILayout.Height(arrowButtonSize)
  88. };
  89. float dropdownButtonHeight = arrowButtonSize;
  90. float dropdownButtonWidth = 143f;
  91. GUILayoutOption[] dropdownLayoutOptions = new GUILayoutOption[] {
  92. GUILayout.Height(dropdownButtonHeight),
  93. GUILayout.Width(dropdownButtonWidth)
  94. };
  95. GUI.enabled = meidoManager.HasActiveMeido && !meidoManager.ActiveMeido.IsStop;
  96. GUILayout.BeginHorizontal();
  97. this.poseGroupLeftButton.Draw(arrowLayoutOptions);
  98. this.poseGroupDropdown.Draw(dropdownLayoutOptions);
  99. this.poseGroupRightButton.Draw(arrowLayoutOptions);
  100. GUILayout.EndHorizontal();
  101. GUILayout.BeginHorizontal();
  102. this.poseLeftButton.Draw(arrowLayoutOptions);
  103. this.poseDropdown.Draw(dropdownLayoutOptions);
  104. this.poseRightButton.Draw(arrowLayoutOptions);
  105. GUILayout.EndHorizontal();
  106. }
  107. }
  108. }