MagicaAvatar.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. // Magica Cloth.
  2. // Copyright (c) MagicaSoft, 2020-2022.
  3. // https://magicasoft.jp
  4. using System.Collections.Generic;
  5. using UnityEngine;
  6. namespace MagicaCloth
  7. {
  8. /// <summary>
  9. /// アバター管理コンポーネント
  10. /// </summary>
  11. [HelpURL("https://magicasoft.jp/avatar/")]
  12. [AddComponentMenu("MagicaCloth/MagicaAvatar")]
  13. public partial class MagicaAvatar : CoreComponent
  14. {
  15. /// <summary>
  16. /// データバージョン
  17. /// </summary>
  18. private const int DATA_VERSION = 1;
  19. /// <summary>
  20. /// データリセットフラグ
  21. /// ※このフラグが立つとエディタ拡張側で自動的にデータが作成される
  22. /// </summary>
  23. [SerializeField]
  24. private bool dataReset;
  25. /// <summary>
  26. /// ランタイム処理
  27. /// </summary>
  28. MagicaAvatarRuntime runtime = new MagicaAvatarRuntime();
  29. //=========================================================================================
  30. /// <summary>
  31. /// アバターパーツ接続イベント
  32. /// Avatar parts attach event.
  33. /// </summary>
  34. public AvatarPartsAttachEvent OnAttachParts = new AvatarPartsAttachEvent();
  35. /// <summary>
  36. /// アバターパーツ分離イベント
  37. /// Avatar parts detach event.
  38. /// </summary>
  39. public AvatarPartsDetachEvent OnDetachParts = new AvatarPartsDetachEvent();
  40. //=========================================================================================
  41. public override ComponentType GetComponentType()
  42. {
  43. return ComponentType.Avatar;
  44. }
  45. //=========================================================================================
  46. /// <summary>
  47. /// データを識別するハッシュコードを作成して返す
  48. /// </summary>
  49. /// <returns></returns>
  50. public override int GetDataHash()
  51. {
  52. int hash = 0;
  53. return hash;
  54. }
  55. //=========================================================================================
  56. public bool DataReset
  57. {
  58. set
  59. {
  60. dataReset = value;
  61. }
  62. get
  63. {
  64. return dataReset;
  65. }
  66. }
  67. public MagicaAvatarRuntime Runtime
  68. {
  69. get
  70. {
  71. runtime.SetParent(this);
  72. return runtime;
  73. }
  74. }
  75. //=========================================================================================
  76. void Reset()
  77. {
  78. // 自動データ作成フラグを立てる
  79. DataReset = true;
  80. }
  81. void OnValidate()
  82. {
  83. }
  84. protected override void OnInit()
  85. {
  86. Runtime.Create();
  87. }
  88. protected override void OnDispose()
  89. {
  90. Runtime.Dispose();
  91. }
  92. protected override void OnUpdate()
  93. {
  94. }
  95. protected override void OnActive()
  96. {
  97. Runtime.Active();
  98. }
  99. protected override void OnInactive()
  100. {
  101. Runtime.Inactive();
  102. }
  103. //=========================================================================================
  104. public override int GetVersion()
  105. {
  106. return DATA_VERSION;
  107. }
  108. /// <summary>
  109. /// エラーとするデータバージョンを取得する
  110. /// </summary>
  111. /// <returns></returns>
  112. public override int GetErrorVersion()
  113. {
  114. return 0;
  115. }
  116. /// <summary>
  117. /// データを検証して結果を格納する
  118. /// </summary>
  119. /// <returns></returns>
  120. public override void CreateVerifyData()
  121. {
  122. base.CreateVerifyData();
  123. }
  124. /// <summary>
  125. /// 現在のデータが正常(実行できる状態)か返す
  126. /// </summary>
  127. /// <returns></returns>
  128. public override Define.Error VerifyData()
  129. {
  130. if (Application.isPlaying)
  131. {
  132. // 実行中
  133. return Define.Error.None;
  134. }
  135. else
  136. {
  137. // エディット中
  138. // 重複トランスフォームチェック
  139. var olist = Runtime.CheckOverlappingTransform();
  140. if (olist.Count > 0)
  141. return Define.Error.OverlappingTransform;
  142. return Define.Error.None;
  143. }
  144. }
  145. public override string GetInformation()
  146. {
  147. StaticStringBuilder.Clear();
  148. if (Application.isPlaying)
  149. {
  150. // 実行中
  151. if (Runtime.AvatarPartsCount > 0)
  152. {
  153. StaticStringBuilder.Append("Connection avatar parts:");
  154. int cnt = Runtime.AvatarPartsCount;
  155. for (int i = 0; i < cnt; i++)
  156. {
  157. StaticStringBuilder.AppendLine();
  158. StaticStringBuilder.Append(" [", Runtime.GetAvatarParts(i).name, "]");
  159. }
  160. }
  161. else
  162. {
  163. StaticStringBuilder.Append("No avatar parts connected.");
  164. }
  165. }
  166. else
  167. {
  168. // エディット中
  169. // 重複トランスフォームチェック
  170. var olist = Runtime.CheckOverlappingTransform();
  171. if (olist.Count > 0)
  172. {
  173. StaticStringBuilder.Append("There are duplicate game object names.");
  174. foreach (var t in olist)
  175. {
  176. StaticStringBuilder.AppendLine();
  177. StaticStringBuilder.Append("* ", t.name);
  178. }
  179. }
  180. else
  181. {
  182. StaticStringBuilder.Append("No problem.");
  183. }
  184. StaticStringBuilder.AppendLine();
  185. StaticStringBuilder.Append("Collider : ", Runtime.GetColliderCount());
  186. }
  187. return StaticStringBuilder.ToString();
  188. }
  189. //=========================================================================================
  190. /// <summary>
  191. /// 共有データオブジェクト収集
  192. /// </summary>
  193. /// <returns></returns>
  194. public override List<ShareDataObject> GetAllShareDataObject()
  195. {
  196. var slist = base.GetAllShareDataObject();
  197. return slist;
  198. }
  199. /// <summary>
  200. /// sourceの共有データを複製して再セットする
  201. /// 再セットした共有データを返す
  202. /// </summary>
  203. /// <param name="source"></param>
  204. /// <returns></returns>
  205. public override ShareDataObject DuplicateShareDataObject(ShareDataObject source)
  206. {
  207. return null;
  208. }
  209. }
  210. }