Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
ListSelectionDialog.cs
浏览该文件的文档.
1using System.Xml.Linq;
2using Engine;
3
4namespace Game {
5 public class ListSelectionDialog : Dialog {
6 public Action<object> m_selectionHandler;
7
9
11
13
14 public double? m_dismissTime;
15
16 public bool m_isDismissed;
17
19 get => m_contentWidget.Size;
20 set => m_contentWidget.Size = value;
21 }
22
23 public ListSelectionDialog(string title,
24 IEnumerable items,
25 float itemSize,
26 Func<object, Widget> itemWidgetFactory,
27 Action<object> selectionHandler) {
28 m_selectionHandler = selectionHandler;
29 XElement node = ContentManager.Get<XElement>("Dialogs/ListSelectionDialog");
30 LoadContents(this, node);
31 m_titleLabelWidget = Children.Find<LabelWidget>("ListSelectionDialog.Title");
32 m_listWidget = Children.Find<ListPanelWidget>("ListSelectionDialog.List");
33 m_contentWidget = Children.Find<CanvasWidget>("ListSelectionDialog.Content");
34 m_titleLabelWidget.Text = title;
35 m_titleLabelWidget.IsVisible = !string.IsNullOrEmpty(title);
36 m_listWidget.ItemSize = itemSize;
37 if (itemWidgetFactory != null) {
38 m_listWidget.ItemWidgetFactory = itemWidgetFactory;
39 }
40 foreach (object item in items) {
41 m_listWidget.AddItem(item);
42 }
43 int num = m_listWidget.Items.Count;
44 float num2;
45 while (true) {
46 if (num >= 0) {
47 num2 = MathUtils.Min(num + 0.5f, m_listWidget.Items.Count);
48 if (num2 * itemSize <= m_contentWidget.Size.Y) {
49 break;
50 }
51 num--;
52 continue;
53 }
54 return;
55 }
56 m_contentWidget.Size = new Vector2(m_contentWidget.Size.X, num2 * itemSize);
57 }
58
59 public ListSelectionDialog(string title,
60 IEnumerable items,
61 float itemSize,
62 Func<object, string> itemToStringConverter,
63 Action<object> selectionHandler) : this(
64 title,
65 items,
66 itemSize,
67 item => new LabelWidget {
69 },
70 selectionHandler
71 ) { }
72
73 public override void Update() {
74 if (Input.Back
75 || Input.Cancel) {
76 m_dismissTime = 0.0;
77 }
78 else if (Input.Tap.HasValue
79 && !m_listWidget.HitTest(Input.Tap.Value)) {
80 m_dismissTime = 0.0;
81 }
82 else if (!m_dismissTime.HasValue
83 && m_listWidget.SelectedItem != null) {
84 m_dismissTime = Time.FrameStartTime + 0.05000000074505806;
85 }
86 if (m_dismissTime.HasValue
87 && Time.FrameStartTime >= m_dismissTime.Value) {
88 Dismiss(m_listWidget.SelectedItem);
89 }
90 }
91
92 public void Dismiss(object result) {
93 if (!m_isDismissed) {
94 m_isDismissed = true;
96 if (m_selectionHandler != null
97 && result != null) {
98 m_selectionHandler(result);
99 }
100 }
101 }
102 }
103}
static int Min(int x1, int x2)
static double FrameStartTime
定义 Time.cs:42
readonly WidgetsList Children
static object Get(Type type, string name)
static void HideDialog(Dialog dialog)
ListSelectionDialog(string title, IEnumerable items, float itemSize, Func< object, string > itemToStringConverter, Action< object > selectionHandler)
ListSelectionDialog(string title, IEnumerable items, float itemSize, Func< object, Widget > itemWidgetFactory, Action< object > selectionHandler)
virtual WidgetAlignment VerticalAlignment
virtual WidgetAlignment HorizontalAlignment
virtual void LoadContents(object eventsTarget, XElement node)