/** * 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 { /// /// Handles pose from pose3.json. /// [Serializable] public sealed class CubismPose3Json { /// /// Loads a pose3.json. /// /// pose3.json to deserialize. /// Deserialized pose3.json on success; otherwise. 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; } /// /// Loads a pose3.json asset. /// /// pose3.json asset to deserialize. /// Deserialized pose3.json asset on success; otherwise. public static CubismPose3Json LoadFrom(TextAsset pose3JsonAsset) { return (pose3JsonAsset == null) ? null : LoadFrom(pose3JsonAsset.text); } #region Json Data /// /// The type of cubism pose. /// [SerializeField] public string Type; /// /// [Optional] Time of the Fade-in for easing in seconds.. /// [SerializeField] public float FadeInTime; /// /// Array of Groups. /// [SerializeField] public SerializablePoseGroup[][] Groups; #endregion #region Json Helpers [Serializable] public struct SerializablePoseGroup { /// /// The part id of group. /// [SerializeField] public string Id; /// /// The link part ids. /// [SerializeField] public string[] Link; } #endregion } }