CubismDynamicDrawableData.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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 Live2D.Cubism.Core.Unmanaged;
  8. using UnityEngine;
  9. namespace Live2D.Cubism.Core
  10. {
  11. /// <summary>
  12. /// Dynamic <see cref="CubismDrawable"/> data.
  13. /// </summary>
  14. public sealed class CubismDynamicDrawableData
  15. {
  16. #region Factory Methods
  17. /// <summary>
  18. /// Creates buffer for dynamic <see cref="CubismDrawable"/> data.
  19. /// </summary>
  20. /// <param name="unmanagedModel">Unmanaged model to create buffer for.</param>
  21. /// <returns>Buffer.</returns>
  22. internal static CubismDynamicDrawableData[] CreateData(CubismUnmanagedModel unmanagedModel)
  23. {
  24. var unmanagedDrawables = unmanagedModel.Drawables;
  25. var buffer = new CubismDynamicDrawableData[unmanagedDrawables.Count];
  26. // Initialize buffers.
  27. var vertexCounts = unmanagedDrawables.VertexCounts;
  28. for (var i = 0; i < buffer.Length; ++i)
  29. {
  30. buffer[i] = new CubismDynamicDrawableData
  31. {
  32. VertexPositions = new Vector3[vertexCounts[i]]
  33. };
  34. }
  35. return buffer;
  36. }
  37. #endregion
  38. /// <summary>
  39. /// Dirty flags.
  40. /// </summary>
  41. internal byte Flags { private get; set; }
  42. /// <summary>
  43. /// Current opacity.
  44. /// </summary>
  45. public float Opacity { get; internal set; }
  46. /// <summary>
  47. /// Current draw order.
  48. /// </summary>
  49. public int DrawOrder { get; internal set; }
  50. /// <summary>
  51. /// Current render order.
  52. /// </summary>
  53. public int RenderOrder { get; internal set; }
  54. /// <summary>
  55. /// Current vertex position.
  56. /// </summary>
  57. public Vector3[] VertexPositions { get; internal set; }
  58. /// <summary>
  59. /// True if currently visible.
  60. /// </summary>
  61. public bool IsVisible
  62. {
  63. get { return Flags.HasIsVisibleFlag(); }
  64. }
  65. /// <summary>
  66. /// True if <see cref="IsVisible"/> did change.
  67. /// </summary>
  68. public bool IsVisibilityDirty
  69. {
  70. get { return Flags.HasVisibilityDidChangeFlag(); }
  71. }
  72. /// <summary>
  73. /// True if <see cref="Opacity"/> did change.
  74. /// </summary>
  75. public bool IsOpacityDirty
  76. {
  77. get { return Flags.HasOpacityDidChangeFlag(); }
  78. }
  79. /// <summary>
  80. /// True if <see cref="DrawOrder"/> did change.
  81. /// </summary>
  82. public bool IsDrawOrderDirty
  83. {
  84. get { return Flags.HasDrawOrderDidChangeFlag(); }
  85. }
  86. /// <summary>
  87. /// True if <see cref="RenderOrder"/> did change.
  88. /// </summary>
  89. public bool IsRenderOrderDirty
  90. {
  91. get { return Flags.HasRenderOrderDidChangeFlag(); }
  92. }
  93. /// <summary>
  94. /// True if <see cref="VertexPositions"/> did change.
  95. /// </summary>
  96. public bool AreVertexPositionsDirty
  97. {
  98. get { return Flags.HasVertexPositionsDidChangeFlag(); }
  99. }
  100. /// <summary>
  101. /// True if any data did change.
  102. /// </summary>
  103. public bool IsAnyDirty
  104. {
  105. get { return Flags != 0; }
  106. }
  107. }
  108. }