/**
* 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.Core.Unmanaged;
using UnityEngine;
namespace Live2D.Cubism.Core
{
///
/// Dynamic data.
///
public sealed class CubismDynamicDrawableData
{
#region Factory Methods
///
/// Creates buffer for dynamic data.
///
/// Unmanaged model to create buffer for.
/// Buffer.
internal static CubismDynamicDrawableData[] CreateData(CubismUnmanagedModel unmanagedModel)
{
var unmanagedDrawables = unmanagedModel.Drawables;
var buffer = new CubismDynamicDrawableData[unmanagedDrawables.Count];
// Initialize buffers.
var vertexCounts = unmanagedDrawables.VertexCounts;
for (var i = 0; i < buffer.Length; ++i)
{
buffer[i] = new CubismDynamicDrawableData
{
VertexPositions = new Vector3[vertexCounts[i]]
};
}
return buffer;
}
#endregion
///
/// Dirty flags.
///
internal byte Flags { private get; set; }
///
/// Current opacity.
///
public float Opacity { get; internal set; }
///
/// Current draw order.
///
public int DrawOrder { get; internal set; }
///
/// Current render order.
///
public int RenderOrder { get; internal set; }
///
/// Current vertex position.
///
public Vector3[] VertexPositions { get; internal set; }
///
/// True if currently visible.
///
public bool IsVisible
{
get { return Flags.HasIsVisibleFlag(); }
}
///
/// True if did change.
///
public bool IsVisibilityDirty
{
get { return Flags.HasVisibilityDidChangeFlag(); }
}
///
/// True if did change.
///
public bool IsOpacityDirty
{
get { return Flags.HasOpacityDidChangeFlag(); }
}
///
/// True if did change.
///
public bool IsDrawOrderDirty
{
get { return Flags.HasDrawOrderDidChangeFlag(); }
}
///
/// True if did change.
///
public bool IsRenderOrderDirty
{
get { return Flags.HasRenderOrderDidChangeFlag(); }
}
///
/// True if did change.
///
public bool AreVertexPositionsDirty
{
get { return Flags.HasVertexPositionsDidChangeFlag(); }
}
///
/// True if any data did change.
///
public bool IsAnyDirty
{
get { return Flags != 0; }
}
}
}