CubismDynamicDrawableData.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. /// Current multiply color.
  60. /// </summary>
  61. public Color MultiplyColor{ get; internal set; }
  62. /// <summary>
  63. /// Current screen color.
  64. /// </summary>
  65. public Color ScreenColor { get; internal set; }
  66. /// <summary>
  67. /// True if currently visible.
  68. /// </summary>
  69. public bool IsVisible
  70. {
  71. get { return Flags.HasIsVisibleFlag(); }
  72. }
  73. /// <summary>
  74. /// True if <see cref="IsVisible"/> did change.
  75. /// </summary>
  76. public bool IsVisibilityDirty
  77. {
  78. get { return Flags.HasVisibilityDidChangeFlag(); }
  79. }
  80. /// <summary>
  81. /// True if <see cref="Opacity"/> did change.
  82. /// </summary>
  83. public bool IsOpacityDirty
  84. {
  85. get { return Flags.HasOpacityDidChangeFlag(); }
  86. }
  87. /// <summary>
  88. /// True if <see cref="DrawOrder"/> did change.
  89. /// </summary>
  90. public bool IsDrawOrderDirty
  91. {
  92. get { return Flags.HasDrawOrderDidChangeFlag(); }
  93. }
  94. /// <summary>
  95. /// True if <see cref="RenderOrder"/> did change.
  96. /// </summary>
  97. public bool IsRenderOrderDirty
  98. {
  99. get { return Flags.HasRenderOrderDidChangeFlag(); }
  100. }
  101. /// <summary>
  102. /// True if <see cref="VertexPositions"/> did change.
  103. /// </summary>
  104. public bool AreVertexPositionsDirty
  105. {
  106. get { return Flags.HasVertexPositionsDidChangeFlag(); }
  107. }
  108. /// <summary>
  109. /// True if <see cref="MultiplyColor"/> and <see cref="ScreenColor"/> did change.
  110. /// </summary>
  111. public bool IsBlendColorDirty
  112. {
  113. get { return Flags.HasBlendColorDidChangeFlag(); }
  114. }
  115. /// <summary>
  116. /// True if any data did change.
  117. /// </summary>
  118. public bool IsAnyDirty
  119. {
  120. get { return Flags != 0; }
  121. }
  122. }
  123. }