Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
GridPanelWidget.cs
浏览该文件的文档.
1using Engine;
2
3namespace Game {
5 public class Column {
6 public float Position;
7
8 public float ActualWidth;
9 }
10
11 public class Row {
12 public float Position;
13
14 public float ActualHeight;
15 }
16
17 public List<Column> m_columns = [];
18
19 public List<Row> m_rows = [];
20
21 public Dictionary<Widget, Point2> m_cells = [];
22
23 public int ColumnsCount {
24 get => m_columns.Count;
25 set {
26 m_columns = new List<Column>(m_columns.GetRange(0, MathUtils.Min(m_columns.Count, value)));
27 while (m_columns.Count < value) {
28 m_columns.Add(new Column());
29 }
30 }
31 }
32
33 public int RowsCount {
34 get => m_rows.Count;
35 set {
36 m_rows = new List<Row>(m_rows.GetRange(0, MathUtils.Min(m_rows.Count, value)));
37 while (m_rows.Count < value) {
38 m_rows.Add(new Row());
39 }
40 }
41 }
42
43 public GridPanelWidget() {
44 ColumnsCount = 1;
45 RowsCount = 1;
46 }
47
48 public Point2 GetWidgetCell(Widget widget) {
49 m_cells.TryGetValue(widget, out Point2 value);
50 return value;
51 }
52
53 public void SetWidgetCell(Widget widget, Point2 cell) {
54 m_cells[widget] = cell;
55 }
56
57 public static void SetCell(Widget widget, Point2 cell) {
58 (widget.ParentWidget as GridPanelWidget)?.SetWidgetCell(widget, cell);
59 }
60
61 public override void WidgetRemoved(Widget widget) {
62 m_cells.Remove(widget);
63 }
64
65 public override void MeasureOverride(Vector2 parentAvailableSize) {
66 foreach (Column column2 in m_columns) {
67 column2.ActualWidth = 0f;
68 }
69 foreach (Row row2 in m_rows) {
70 row2.ActualHeight = 0f;
71 }
72 foreach (Widget child in Children) {
73 child.Measure(Vector2.Max(parentAvailableSize - child.MarginHorizontalSumAndVerticalSum, Vector2.Zero));
74 Point2 widgetCell = GetWidgetCell(child);
75 if (IsCellValid(widgetCell)) {
76 Column column = m_columns[widgetCell.X];
77 column.ActualWidth = MathUtils.Max(column.ActualWidth, child.ParentDesiredSize.X + child.MarginHorizontalSum);
78 Row row = m_rows[widgetCell.Y];
79 row.ActualHeight = MathUtils.Max(row.ActualHeight, child.ParentDesiredSize.Y + child.MarginVerticalSum);
80 }
81 }
82 Vector2 zero = Vector2.Zero;
83 foreach (Column column3 in m_columns) {
84 column3.Position = zero.X;
85 zero.X += column3.ActualWidth;
86 }
87 foreach (Row row3 in m_rows) {
88 row3.Position = zero.Y;
89 zero.Y += row3.ActualHeight;
90 }
91 DesiredSize = zero;
92 }
93
94 public override void ArrangeOverride() {
95 foreach (Widget child in Children) {
96 Point2 widgetCell = GetWidgetCell(child);
97 if (IsCellValid(widgetCell)) {
98 Column column = m_columns[widgetCell.X];
99 Row row = m_rows[widgetCell.Y];
101 new Vector2(column.Position, row.Position),
102 new Vector2(column.Position + column.ActualWidth, row.Position + row.ActualHeight),
103 child
104 );
105 }
106 else {
108 }
109 }
110 }
111
112 public bool IsCellValid(Point2 cell) {
113 if (cell.X >= 0
114 && cell.X < m_columns.Count
115 && cell.Y >= 0) {
116 return cell.Y < m_rows.Count;
117 }
118 return false;
119 }
120 }
121}
static int Min(int x1, int x2)
static int Max(int x1, int x2)
readonly WidgetsList Children
static void ArrangeChildWidgetInCell(Vector2 c1, Vector2 c2, Widget widget)
bool IsCellValid(Point2 cell)
Point2 GetWidgetCell(Widget widget)
override void MeasureOverride(Vector2 parentAvailableSize)
void SetWidgetCell(Widget widget, Point2 cell)
override void WidgetRemoved(Widget widget)
override void ArrangeOverride()
static void SetCell(Widget widget, Point2 cell)
Dictionary< Widget, Point2 > m_cells
virtual float MarginVerticalSum
Vector2 ParentDesiredSize
virtual float MarginHorizontalSum
Vector2 DesiredSize
virtual Vector2 MarginHorizontalSumAndVerticalSum
Vector2 ActualSize
virtual void Measure(Vector2 parentAvailableSize)
static readonly Vector2 Zero
static Vector2 Max(Vector2 v, float f)