2020-09-18 18:38:11 +10:00
|
|
|
|
using UnityEngine;
|
2020-09-03 19:48:50 +10:00
|
|
|
|
|
2020-10-08 06:15:42 +11:00
|
|
|
|
namespace Explorer.UI.Shared
|
2020-09-03 19:48:50 +10:00
|
|
|
|
{
|
|
|
|
|
public enum Turn
|
|
|
|
|
{
|
|
|
|
|
Left,
|
|
|
|
|
Right
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class PageHelper
|
|
|
|
|
{
|
|
|
|
|
public int PageOffset { get; set; }
|
2020-09-06 16:55:39 +10:00
|
|
|
|
|
|
|
|
|
public int ItemsPerPage
|
|
|
|
|
{
|
|
|
|
|
get => m_itemsPerPage;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
m_itemsPerPage = value;
|
|
|
|
|
CalculateMaxOffset();
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-10-08 06:15:42 +11:00
|
|
|
|
private int m_itemsPerPage = Config.ModConfig.Instance.Default_Page_Limit;
|
2020-09-06 16:55:39 +10:00
|
|
|
|
|
2020-10-08 06:15:42 +11:00
|
|
|
|
public int ItemCount
|
2020-09-04 21:36:40 +10:00
|
|
|
|
{
|
|
|
|
|
get => m_count;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
m_count = value;
|
|
|
|
|
CalculateMaxOffset();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private int m_count;
|
|
|
|
|
|
|
|
|
|
public int MaxPageOffset { get; private set; } = -1;
|
2020-09-03 19:48:50 +10:00
|
|
|
|
|
2020-09-04 21:36:40 +10:00
|
|
|
|
private int CalculateMaxOffset()
|
2020-09-03 19:48:50 +10:00
|
|
|
|
{
|
2020-09-04 21:36:40 +10:00
|
|
|
|
return MaxPageOffset = (int)Mathf.Ceil((float)(ItemCount / (decimal)ItemsPerPage)) - 1;
|
2020-09-03 19:48:50 +10:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void CurrentPageLabel()
|
|
|
|
|
{
|
|
|
|
|
var orig = GUI.skin.label.alignment;
|
|
|
|
|
GUI.skin.label.alignment = TextAnchor.MiddleCenter;
|
|
|
|
|
|
2020-09-14 20:25:38 +10:00
|
|
|
|
GUILayout.Label($"Page {PageOffset + 1}/{MaxPageOffset + 1}", new GUILayoutOption[] { GUILayout.Width(80) });
|
2020-09-03 19:48:50 +10:00
|
|
|
|
|
|
|
|
|
GUI.skin.label.alignment = orig;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void TurnPage(Turn direction)
|
|
|
|
|
{
|
|
|
|
|
var _ = Vector2.zero;
|
|
|
|
|
TurnPage(direction, ref _);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void TurnPage(Turn direction, ref Vector2 scroll)
|
|
|
|
|
{
|
|
|
|
|
if (direction == Turn.Left)
|
|
|
|
|
{
|
2020-10-08 06:15:42 +11:00
|
|
|
|
if (PageOffset > 0)
|
2020-09-03 19:48:50 +10:00
|
|
|
|
{
|
|
|
|
|
PageOffset--;
|
|
|
|
|
scroll = Vector2.zero;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2020-09-04 21:36:40 +10:00
|
|
|
|
if (PageOffset < MaxPageOffset)
|
2020-09-03 19:48:50 +10:00
|
|
|
|
{
|
|
|
|
|
PageOffset++;
|
|
|
|
|
scroll = Vector2.zero;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int CalculateOffsetIndex()
|
|
|
|
|
{
|
2020-09-04 21:36:40 +10:00
|
|
|
|
int offset = PageOffset * ItemsPerPage;
|
2020-09-03 19:48:50 +10:00
|
|
|
|
|
2020-09-04 21:36:40 +10:00
|
|
|
|
if (offset >= ItemCount)
|
2020-09-03 19:48:50 +10:00
|
|
|
|
{
|
|
|
|
|
offset = 0;
|
|
|
|
|
PageOffset = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return offset;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void DrawLimitInputArea()
|
|
|
|
|
{
|
2020-09-14 20:25:38 +10:00
|
|
|
|
GUILayout.Label("Limit: ", new GUILayoutOption[] { GUILayout.Width(50) });
|
2020-09-04 21:36:40 +10:00
|
|
|
|
var limit = this.ItemsPerPage.ToString();
|
2020-09-30 01:52:49 +10:00
|
|
|
|
limit = GUIUnstrip.TextField(limit, new GUILayoutOption[] { GUILayout.Width(50) });
|
2020-09-04 21:36:40 +10:00
|
|
|
|
if (limit != ItemsPerPage.ToString() && int.TryParse(limit, out int i))
|
2020-09-03 19:48:50 +10:00
|
|
|
|
{
|
2020-09-04 21:36:40 +10:00
|
|
|
|
ItemsPerPage = i;
|
2020-09-03 19:48:50 +10:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|