SpringData.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. // Magica Cloth.
  2. // Copyright (c) MagicaSoft, 2020-2022.
  3. // https://magicasoft.jp
  4. using UnityEngine;
  5. namespace MagicaCloth
  6. {
  7. [System.Serializable]
  8. public class SpringData : ShareDataObject
  9. {
  10. /// <summary>
  11. /// データバージョン
  12. /// </summary>
  13. private const int DATA_VERSION = 2;
  14. /// <summary>
  15. /// 各デフォーマーの状態
  16. /// </summary>
  17. [System.Serializable]
  18. public class DeformerData : IDataHash
  19. {
  20. /// <summary>
  21. /// デフォーマーハッシュ
  22. /// </summary>
  23. public int deformerDataHash;
  24. /// <summary>
  25. /// デフォーマーの頂点数
  26. /// </summary>
  27. public int vertexCount;
  28. /// <summary>
  29. /// 使用頂点番号リスト
  30. /// </summary>
  31. public int[] useVertexIndexList;
  32. /// <summary>
  33. /// 使用頂点のウエイト値
  34. /// </summary>
  35. public float[] weightList;
  36. public int UseVertexCount
  37. {
  38. get
  39. {
  40. if (useVertexIndexList != null)
  41. return useVertexIndexList.Length;
  42. return 0;
  43. }
  44. }
  45. public int GetDataHash()
  46. {
  47. int hash = 0;
  48. hash += deformerDataHash;
  49. hash += vertexCount.GetDataHash();
  50. hash += UseVertexCount.GetDataHash();
  51. return hash;
  52. }
  53. }
  54. public DeformerData deformerData;
  55. /// <summary>
  56. /// 設計時のスケール(WorldInfluenceのInfluenceTargetが基準)
  57. /// </summary>
  58. public Vector3 initScale;
  59. //=========================================================================================
  60. /// <summary>
  61. /// データハッシュ計算
  62. /// </summary>
  63. /// <returns></returns>
  64. public override int GetDataHash()
  65. {
  66. int hash = 0;
  67. if (deformerData != null)
  68. hash += deformerData.GetDataHash();
  69. return hash;
  70. }
  71. //=========================================================================================
  72. public int UseVertexCount
  73. {
  74. get
  75. {
  76. int cnt = 0;
  77. if (deformerData != null)
  78. cnt += deformerData.UseVertexCount;
  79. return cnt;
  80. }
  81. }
  82. //=========================================================================================
  83. public override int GetVersion()
  84. {
  85. return DATA_VERSION;
  86. }
  87. /// <summary>
  88. /// 現在のデータが正常(実行できる状態)か返す
  89. /// </summary>
  90. /// <returns></returns>
  91. public override Define.Error VerifyData()
  92. {
  93. if (dataHash == 0)
  94. return Define.Error.InvalidDataHash;
  95. //if (dataVersion != GetVersion())
  96. // return Define.Error.DataVersionMismatch;
  97. if (deformerData == null)
  98. return Define.Error.DeformerNull;
  99. return Define.Error.None;
  100. }
  101. }
  102. }