DragPointGravity.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using UnityEngine;
  2. using static TBody;
  3. namespace MeidoPhotoStudio.Plugin;
  4. public class DragPointGravity : DragPointGeneral
  5. {
  6. private static readonly SlotID[] SkirtSlots = { SlotID.skirt, SlotID.onepiece, SlotID.mizugi, SlotID.panz };
  7. private static readonly SlotID[] HairSlots = { SlotID.hairF, SlotID.hairR, SlotID.hairS, SlotID.hairT };
  8. public GravityTransformControl Control { get; private set; }
  9. public bool Valid =>
  10. Control.isValid;
  11. public bool Active =>
  12. Valid && gameObject.activeSelf;
  13. public static GravityTransformControl MakeGravityControl(Maid maid, bool skirt = false)
  14. {
  15. var category = skirt ? "skirt" : "hair";
  16. var bone = maid.body0.GetBone("Bip01");
  17. var gravityGoName = $"GravityDatas_{maid.status.guid}_{category}";
  18. var gravityTransform = maid.gameObject.transform.Find(gravityGoName);
  19. if (!gravityTransform)
  20. {
  21. var go = new GameObject(gravityGoName);
  22. go.transform.SetParent(bone, false);
  23. go.transform.SetParent(maid.transform, true);
  24. go.transform.localScale = Vector3.one;
  25. go.transform.rotation = Quaternion.identity;
  26. var go2 = new GameObject(gravityGoName);
  27. go2.transform.SetParent(go.transform, false);
  28. gravityTransform = go2.transform;
  29. }
  30. else
  31. {
  32. gravityTransform = gravityTransform.GetChild(0);
  33. var control = gravityTransform.GetComponent<GravityTransformControl>();
  34. if (control)
  35. Destroy(control);
  36. }
  37. var gravityControl = gravityTransform.gameObject.AddComponent<GravityTransformControl>();
  38. var slots = skirt ? SkirtSlots : HairSlots;
  39. gravityControl.SetTargetSlods(slots);
  40. gravityControl.forceRate = 0.1f;
  41. return gravityControl;
  42. }
  43. public override void Set(Transform myObject)
  44. {
  45. base.Set(myObject);
  46. Control = myObject.GetComponent<GravityTransformControl>();
  47. gameObject.SetActive(false);
  48. }
  49. protected override void ResetPosition() =>
  50. Control.transform.localPosition = DefaultPosition;
  51. protected override void ApplyDragType()
  52. {
  53. ApplyProperties(Moving, Moving, false);
  54. ApplyColours();
  55. }
  56. protected override void OnDestroy()
  57. {
  58. if (Control.isValid)
  59. {
  60. Control.transform.localPosition = Vector3.zero;
  61. Control.Update();
  62. }
  63. Destroy(Control.transform.parent.gameObject);
  64. base.OnDestroy();
  65. }
  66. private void OnDisable() =>
  67. Control.isEnabled = false;
  68. private void OnEnable()
  69. {
  70. if (!Control)
  71. return;
  72. // TODO: WTF?
  73. Control.isEnabled = true;
  74. if (!Control.isEnabled)
  75. gameObject.SetActive(false);
  76. }
  77. }