MaidPoseSelectorPane.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. string poseName;
  60. if (this.poseGroupDropdown.SelectedItemIndex >= Constants.CustomPoseGroupsIndex)
  61. poseName = Constants.CustomPoseDict[selectedPoseGroup][selectedPose].Value;
  62. else
  63. poseName = Constants.PoseDict[selectedPoseGroup][selectedPose];
  64. meidoManager.ActiveMeido.SetPose(poseName);
  65. }
  66. public override void Draw(params GUILayoutOption[] layoutOptions)
  67. {
  68. float arrowButtonSize = 30;
  69. GUILayoutOption[] arrowLayoutOptions = {
  70. GUILayout.Width(arrowButtonSize),
  71. GUILayout.Height(arrowButtonSize)
  72. };
  73. float dropdownButtonHeight = arrowButtonSize;
  74. float dropdownButtonWidth = 143f;
  75. GUILayoutOption[] dropdownLayoutOptions = new GUILayoutOption[] {
  76. GUILayout.Height(dropdownButtonHeight),
  77. GUILayout.Width(dropdownButtonWidth)
  78. };
  79. GUI.enabled = meidoManager.HasActiveMeido;
  80. GUILayout.BeginHorizontal();
  81. this.poseGroupLeftButton.Draw(arrowLayoutOptions);
  82. this.poseGroupDropdown.Draw(dropdownLayoutOptions);
  83. this.poseGroupRightButton.Draw(arrowLayoutOptions);
  84. GUILayout.EndHorizontal();
  85. GUILayout.BeginHorizontal();
  86. this.poseLeftButton.Draw(arrowLayoutOptions);
  87. this.poseDropdown.Draw(dropdownLayoutOptions);
  88. this.poseRightButton.Draw(arrowLayoutOptions);
  89. GUILayout.EndHorizontal();
  90. }
  91. }
  92. }