123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- /**
- * Copyright(c) Live2D Inc. All rights reserved.
- *
- * Use of this source code is governed by the Live2D Open Software license
- * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
- */
- using System;
- using UnityEngine;
- namespace Live2D.Cubism.Framework.Json
- {
- /// <summary>
- /// Handles pose from pose3.json.
- /// </summary>
- [Serializable]
- public sealed class CubismPose3Json
- {
- /// <summary>
- /// Loads a pose3.json.
- /// </summary>
- /// <param name="pose3Json">pose3.json to deserialize.</param>
- /// <returns>Deserialized pose3.json on success; <see langword="null"/> otherwise.</returns>
- public static CubismPose3Json LoadFrom(string pose3Json)
- {
- if (string.IsNullOrEmpty(pose3Json))
- {
- return null;
- }
- var ret = new CubismPose3Json();
- var value = CubismJsonParser.ParseFromString(pose3Json);
- ret.Type = (value.Get("Type") == null) ? null : value.Get("Type").toString();
- ret.FadeInTime = (value.Get("FadeInTime") == null) ? 0.5f : value.Get("FadeInTime").ToFloat();
- var groups = (value.Get("Groups") == null) ? null : value.Get("Groups").GetVector(null);
- if(groups != null)
- {
- ret.Groups = new SerializablePoseGroup[groups.Count][];
- for (var i = 0; i < groups.Count; ++i)
- {
- var count = groups[i].GetVector(null).Count;
- ret.Groups[i] = new SerializablePoseGroup[count];
- for (var j = 0; j < count; ++j)
- {
- ret.Groups[i][j].Id = groups[i].GetVector(null)[j].Get("Id").toString();
- var link = groups[i].GetVector(null)[j].Get("Link").GetVector(null);
- if(link.Count == 0)
- {
- continue;
- }
- ret.Groups[i][j].Link = new string[link.Count];
- for (var linkCount = 0; linkCount < link.Count; ++ linkCount)
- {
- ret.Groups[i][j].Link[linkCount] = link[linkCount].toString();
- }
- }
- }
- }
- return ret;
- }
- /// <summary>
- /// Loads a pose3.json asset.
- /// </summary>
- /// <param name="pose3JsonAsset">pose3.json asset to deserialize.</param>
- /// <returns>Deserialized pose3.json asset on success; <see langword="null"/> otherwise.</returns>
- public static CubismPose3Json LoadFrom(TextAsset pose3JsonAsset)
- {
- return (pose3JsonAsset == null)
- ? null
- : LoadFrom(pose3JsonAsset.text);
- }
- #region Json Data
- /// <summary>
- /// The type of cubism pose.
- /// </summary>
- [SerializeField]
- public string Type;
- /// <summary>
- /// [Optional] Time of the Fade-in for easing in seconds..
- /// </summary>
- [SerializeField]
- public float FadeInTime;
- /// <summary>
- /// Array of Groups.
- /// </summary>
- [SerializeField]
- public SerializablePoseGroup[][] Groups;
- #endregion
- #region Json Helpers
- [Serializable]
- public struct SerializablePoseGroup
- {
- /// <summary>
- /// The part id of group.
- /// </summary>
- [SerializeField]
- public string Id;
- /// <summary>
- /// The link part ids.
- /// </summary>
- [SerializeField]
- public string[] Link;
- }
- #endregion
- }
- }
|