ListBox.cs
3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using AirFishLab.ScrollingList.ContentManagement;
using AirFishLab.ScrollingList.Util;
using UnityEngine;
using UnityEngine.UI;
namespace AirFishLab.ScrollingList
{
/// <summary>
/// The basic component of the scrolling list.
/// Control the position and update the content of the list element.
/// </summary>
public class ListBox : MonoBehaviour, IListBox
{
#region Properties of IListBox
public int ListBoxID { get; private set; }
public int ContentID { get; private set; }
public IListBox LastListBox { get; private set; }
public IListBox NextListBox { get; private set; }
public ListBoxSelectedEvent OnBoxSelected { get; } = new ListBoxSelectedEvent();
public CircularScrollingList ScrollingList { get; private set; }
public bool IsActivated
{
get => _gameObject.activeSelf;
set => _gameObject.SetActive(value);
}
#endregion
#region Private Members
private GameObject _gameObject;
private Transform _transform;
private Func<Vector2, float> _factorFunc;
#endregion
#region IListBox
public void Initialize(
CircularScrollingList scrollingList,
int listBoxID, IListBox lastListBox, IListBox nextListBox)
{
ScrollingList = scrollingList;
ListBoxID = listBoxID;
LastListBox = lastListBox;
NextListBox = nextListBox;
_gameObject = gameObject;
_transform = transform;
if (scrollingList.ListSetting.Direction
== CircularScrollingList.Direction.Horizontal)
_factorFunc = FactorUtility.GetVector2X;
else
_factorFunc = FactorUtility.GetVector2Y;
RegisterClickEvent();
OnInitialized();
}
public Transform GetTransform()
{
#if UNITY_EDITOR
if (!Application.isPlaying)
return transform;
#endif
return _transform;
}
public float GetPositionFactor()
{
return _factorFunc(_transform.localPosition);
}
public virtual void OnBoxMoved(float positionRatio)
{}
public void SetContentID(int contentID)
{
ContentID = contentID;
}
public void SetContent(IListContent content)
{
UpdateDisplayContent(content);
}
public void PopToFront()
{
transform.SetAsLastSibling();
}
public void PushToBack()
{
transform.SetAsFirstSibling();
}
#endregion
#region Initialization
/// <summary>
/// Register the callback to the button clicking event
/// </summary>
private void RegisterClickEvent()
{
if (TryGetComponent<Button>(out var button)) {
button.onClick.AddListener(OnButtonClick);
}
}
private void OnButtonClick()
{
OnBoxSelected?.Invoke(this);
}
#endregion
#region Content Handling
/// <summary>
/// This function is called after the box is initialized
/// </summary>
protected virtual void OnInitialized()
{}
/// <summary>
/// Update the displaying content on the ListBox
/// </summary>
/// <param name="content">The content to be displayed</param>
protected virtual void UpdateDisplayContent(IListContent content)
{
Debug.Log(content);
}
#endregion
}
}