DragPointGravity.cs 3.0 KB

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