CubismPose3Json.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /**
  2. * Copyright(c) Live2D Inc. All rights reserved.
  3. *
  4. * Use of this source code is governed by the Live2D Open Software license
  5. * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
  6. */
  7. using System;
  8. using UnityEngine;
  9. namespace Live2D.Cubism.Framework.Json
  10. {
  11. /// <summary>
  12. /// Handles pose from pose3.json.
  13. /// </summary>
  14. [Serializable]
  15. public sealed class CubismPose3Json
  16. {
  17. /// <summary>
  18. /// Loads a pose3.json.
  19. /// </summary>
  20. /// <param name="pose3Json">pose3.json to deserialize.</param>
  21. /// <returns>Deserialized pose3.json on success; <see langword="null"/> otherwise.</returns>
  22. public static CubismPose3Json LoadFrom(string pose3Json)
  23. {
  24. if (string.IsNullOrEmpty(pose3Json))
  25. {
  26. return null;
  27. }
  28. var ret = new CubismPose3Json();
  29. var value = CubismJsonParser.ParseFromString(pose3Json);
  30. ret.Type = (value.Get("Type") == null) ? null : value.Get("Type").toString();
  31. ret.FadeInTime = (value.Get("FadeInTime") == null) ? 0.5f : value.Get("FadeInTime").ToFloat();
  32. var groups = (value.Get("Groups") == null) ? null : value.Get("Groups").GetVector(null);
  33. if(groups != null)
  34. {
  35. ret.Groups = new SerializablePoseGroup[groups.Count][];
  36. for (var i = 0; i < groups.Count; ++i)
  37. {
  38. var count = groups[i].GetVector(null).Count;
  39. ret.Groups[i] = new SerializablePoseGroup[count];
  40. for (var j = 0; j < count; ++j)
  41. {
  42. ret.Groups[i][j].Id = groups[i].GetVector(null)[j].Get("Id").toString();
  43. var link = groups[i].GetVector(null)[j].Get("Link").GetVector(null);
  44. if(link.Count == 0)
  45. {
  46. continue;
  47. }
  48. ret.Groups[i][j].Link = new string[link.Count];
  49. for (var linkCount = 0; linkCount < link.Count; ++ linkCount)
  50. {
  51. ret.Groups[i][j].Link[linkCount] = link[linkCount].toString();
  52. }
  53. }
  54. }
  55. }
  56. return ret;
  57. }
  58. /// <summary>
  59. /// Loads a pose3.json asset.
  60. /// </summary>
  61. /// <param name="pose3JsonAsset">pose3.json asset to deserialize.</param>
  62. /// <returns>Deserialized pose3.json asset on success; <see langword="null"/> otherwise.</returns>
  63. public static CubismPose3Json LoadFrom(TextAsset pose3JsonAsset)
  64. {
  65. return (pose3JsonAsset == null)
  66. ? null
  67. : LoadFrom(pose3JsonAsset.text);
  68. }
  69. #region Json Data
  70. /// <summary>
  71. /// The type of cubism pose.
  72. /// </summary>
  73. [SerializeField]
  74. public string Type;
  75. /// <summary>
  76. /// [Optional] Time of the Fade-in for easing in seconds..
  77. /// </summary>
  78. [SerializeField]
  79. public float FadeInTime;
  80. /// <summary>
  81. /// Array of Groups.
  82. /// </summary>
  83. [SerializeField]
  84. public SerializablePoseGroup[][] Groups;
  85. #endregion
  86. #region Json Helpers
  87. [Serializable]
  88. public struct SerializablePoseGroup
  89. {
  90. /// <summary>
  91. /// The part id of group.
  92. /// </summary>
  93. [SerializeField]
  94. public string Id;
  95. /// <summary>
  96. /// The link part ids.
  97. /// </summary>
  98. [SerializeField]
  99. public string[] Link;
  100. }
  101. #endregion
  102. }
  103. }