FancyGridViewCell.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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="FancyGridView{TItemData, TContext}"/> のセルを実装するための抽象基底クラス.
  11. /// <see cref="FancyCell{TItemData, TContext}.Context"/> が不要な場合は
  12. /// 代わりに <see cref="FancyGridViewCell{TItemData}"/> を使用します.
  13. /// </summary>
  14. /// <typeparam name="TItemData">アイテムのデータ型.</typeparam>
  15. /// <typeparam name="TContext"><see cref="FancyCell{TItemData, TContext}.Context"/> の型.</typeparam>
  16. public abstract class FancyGridViewCell<TItemData, TContext> : FancyScrollRectCell<TItemData, TContext>
  17. where TContext : class, IFancyGridViewContext, new()
  18. {
  19. /// <inheritdoc/>
  20. protected override void UpdatePosition(float normalizedPosition, float localPosition)
  21. {
  22. var cellSize = Context.GetCellSize();
  23. var spacing = Context.GetStartAxisSpacing();
  24. var groupCount = Context.GetGroupCount();
  25. var indexInGroup = Index % groupCount;
  26. var positionInGroup = (cellSize + spacing) * (indexInGroup - (groupCount - 1) * 0.5f);
  27. transform.localPosition = Context.ScrollDirection == ScrollDirection.Horizontal
  28. ? new Vector2(-localPosition, -positionInGroup)
  29. : new Vector2(positionInGroup, localPosition);
  30. }
  31. }
  32. /// <summary>
  33. /// <see cref="FancyGridView{TItemData}"/> のセルを実装するための抽象基底クラス.
  34. /// </summary>
  35. /// <typeparam name="TItemData">アイテムのデータ型.</typeparam>
  36. /// <seealso cref="FancyGridViewCell{TItemData, TContext}"/>
  37. public abstract class FancyGridViewCell<TItemData> : FancyGridViewCell<TItemData, FancyGridViewContext>
  38. {
  39. /// <inheritdoc/>
  40. public sealed override void SetContext(FancyGridViewContext context) => base.SetContext(context);
  41. }
  42. }