FancyCell.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * FancyScrollView (https://github.com/setchi/FancyScrollView)
  3. * Copyright (c) 2020 setchi
  4. * Licensed under MIT (https://github.com/setchi/FancyScrollView/blob/master/LICENSE)
  5. */
  6. using UnityEngine;
  7. namespace FancyScrollView
  8. {
  9. /// <summary>
  10. /// <see cref="FancyScrollView{TItemData, TContext}"/> のセルを実装するための抽象基底クラス.
  11. /// <see cref="FancyCell{TItemData, TContext}.Context"/> が不要な場合は
  12. /// 代わりに <see cref="FancyCell{TItemData}"/> を使用します.
  13. /// </summary>
  14. /// <typeparam name="TItemData">アイテムのデータ型.</typeparam>
  15. /// <typeparam name="TContext"><see cref="Context"/> の型.</typeparam>
  16. public abstract class FancyCell<TItemData, TContext> : MonoBehaviour where TContext : class, new()
  17. {
  18. /// <summary>
  19. /// このセルで表示しているデータのインデックス.
  20. /// </summary>
  21. public int Index { get; set; } = -1;
  22. /// <summary>
  23. /// このセルの可視状態.
  24. /// </summary>
  25. public virtual bool IsVisible => gameObject.activeSelf;
  26. /// <summary>
  27. /// <see cref="FancyScrollView{TItemData, TContext}.Context"/> の参照.
  28. /// セルとスクロールビュー間で同じインスタンスが共有されます. 情報の受け渡しや状態の保持に使用します.
  29. /// </summary>
  30. protected TContext Context { get; private set; }
  31. /// <summary>
  32. /// <see cref="Context"/> をセットします.
  33. /// </summary>
  34. /// <param name="context">コンテキスト.</param>
  35. public virtual void SetContext(TContext context) => Context = context;
  36. /// <summary>
  37. /// 初期化を行います.
  38. /// </summary>
  39. public virtual void Initialize() { }
  40. /// <summary>
  41. /// このセルの可視状態を設定します.
  42. /// </summary>
  43. /// <param name="visible">可視状態なら <c>true</c>, 非可視状態なら <c>false</c>.</param>
  44. public virtual void SetVisible(bool visible) => gameObject.SetActive(visible);
  45. /// <summary>
  46. /// アイテムデータに基づいてこのセルの表示内容を更新します.
  47. /// </summary>
  48. /// <param name="itemData">アイテムデータ.</param>
  49. public abstract void UpdateContent(TItemData itemData);
  50. /// <summary>
  51. /// <c>0.0f</c> ~ <c>1.0f</c> の値に基づいてこのセルのスクロール位置を更新します.
  52. /// </summary>
  53. /// <param name="position">ビューポート範囲の正規化されたスクロール位置.</param>
  54. public abstract void UpdatePosition(float position);
  55. }
  56. /// <summary>
  57. /// <see cref="FancyScrollView{TItemData}"/> のセルを実装するための抽象基底クラス.
  58. /// </summary>
  59. /// <typeparam name="TItemData">アイテムのデータ型.</typeparam>
  60. /// <seealso cref="FancyCell{TItemData, TContext}"/>
  61. public abstract class FancyCell<TItemData> : FancyCell<TItemData, NullContext>
  62. {
  63. /// <inheritdoc/>
  64. public sealed override void SetContext(NullContext context) => base.SetContext(context);
  65. }
  66. }