/**
* 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 Live2D.Cubism.Framework.UserData;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Live2D.Cubism.Framework.Json
{
///
/// Handles user data from cdi3.json.
///
[Serializable]
public sealed class CubismUserData3Json
{
///
/// Loads a cdi3.json asset.
///
/// cdi3.json to deserialize.
/// Deserialized cdi3.json on success; otherwise.
public static CubismUserData3Json LoadFrom(string userData3Json)
{
return (string.IsNullOrEmpty(userData3Json))
? null
: JsonUtility.FromJson(userData3Json);
}
///
/// Loads a cdi3.json asset.
///
/// cdi3.json to deserialize.
/// Deserialized cdi3.json on success; otherwise.
public static CubismUserData3Json LoadFrom(TextAsset userData3JsonAsset)
{
return (userData3JsonAsset == null)
? null
: LoadFrom(userData3JsonAsset.text);
}
///
/// Makes array that was selected by .
///
/// Target object type.
/// array. Selected by .
public CubismUserDataBody[] ToBodyArray(CubismUserDataTargetType targetType)
{
var userDataList = new List();
for (var i = 0; i < UserData.Length; ++i)
{
var body = new CubismUserDataBody
{
Id = UserData[i].Id,
Value = UserData[i].Value
};
switch (targetType)
{
case CubismUserDataTargetType.ArtMesh:
{
// Only drawables.
if (UserData[i].Target == "ArtMesh")
{
userDataList.Add(body);
}
break;
}
default:
{
break;
}
}
}
return userDataList.ToArray();
}
#region Json Data
///
/// Json file format version.
///
[SerializeField]
public int Version;
///
/// Additional data describing physics.
///
[SerializeField]
public SerializableMeta Meta;
///
/// Array of user data.
///
[SerializeField]
public SerializableUserData[] UserData;
#endregion
#region Json Helpers
///
/// Additional data describing user data.
///
[Serializable]
public struct SerializableMeta
{
///
/// Number of user data.
///
[SerializeField]
public int UserDataCount;
///
/// Total number of user data.
///
[SerializeField]
public int TotalUserDataCount;
}
///
/// User data.
///
[Serializable]
public struct SerializableUserData
{
///
/// Type of target object.
///
[SerializeField]
public string Target;
///
/// Name of target object.
///
[SerializeField]
public string Id;
///
/// Value.
///
[SerializeField]
public string Value;
}
#endregion
}
}