Elin Decompiled Documentation EA 23.235 Nightly Patch 1
Loading...
Searching...
No Matches
WidgetRoster.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using Newtonsoft.Json;
5using UnityEngine;
6using UnityEngine.UI;
7
8public class WidgetRoster : Widget
9{
10 public class Extra
11 {
12 [JsonProperty]
13 public int width = 40;
14
15 [JsonProperty]
16 public int margin;
17
18 [JsonProperty]
19 public bool vertical;
20
21 [JsonProperty]
22 public bool pc;
23
24 [JsonProperty]
25 public bool portrait;
26
27 [JsonProperty]
28 public bool reverse;
29
30 [JsonProperty]
31 public bool onlyName;
32
33 [JsonProperty]
34 public bool showHP;
35 }
36
37 public static WidgetRoster Instance;
38
39 public GridLayoutGroup layout;
40
42
43 public RawImage imageGrid;
44
45 public Dictionary<Chara, ButtonRoster> buttons = new Dictionary<Chara, ButtonRoster>();
46
48
50
51 public bool showName;
52
53 public bool dirty;
54
55 public int maxWidth;
56
57 public Extra extra => base.config.extra as Extra;
58
59 public override bool AlwaysBottom => true;
60
61 public override Type SetSiblingAfter => typeof(WidgetBottomBar);
62
63 public override object CreateExtra()
64 {
65 return new Extra();
66 }
67
68 public override void OnActivate()
69 {
70 if (Mathf.Abs(extra.margin) > 100)
71 {
72 extra.margin = 0;
73 extra.width = 40;
74 extra.portrait = false;
75 extra.onlyName = true;
76 }
77 Instance = this;
78 mold = layout.CreateMold<ButtonRoster>();
79 Build();
80 }
81
82 private void OnEnable()
83 {
84 InvokeRepeating("Refresh", 0.2f, 0.2f);
85 }
86
87 private void OnDisable()
88 {
89 CancelInvoke();
90 }
91
92 public void OnMoveZone()
93 {
94 Build();
95 }
96
97 public void Build()
98 {
99 buttons.Clear();
100 layout.DestroyChildren();
101 layout.constraint = (extra.vertical ? GridLayoutGroup.Constraint.FixedColumnCount : GridLayoutGroup.Constraint.FixedRowCount);
102 layout.startCorner = (extra.reverse ? GridLayoutGroup.Corner.LowerRight : GridLayoutGroup.Corner.UpperLeft);
103 layout.cellSize = new Vector2(extra.width * 4 / 5, extra.onlyName ? 32 : extra.width);
104 layout.spacing = new Vector2(extra.margin, extra.margin);
105 List<Chara> list = EMono.pc.party.members.ToList();
106 if (!extra.pc)
107 {
108 list.Remove(EMono.pc);
109 }
110 list.Sort(delegate(Chara a, Chara b)
111 {
112 int @int = a.GetInt(19);
113 int int2 = b.GetInt(19);
114 return (@int == int2) ? (EMono.pc.party.members.IndexOf(a) - EMono.pc.party.members.IndexOf(b)) : (int2 * 1000 - @int * 1000);
115 });
116 foreach (Chara item in list)
117 {
118 Add(item);
119 }
120 if (buttons.Count == 0)
121 {
122 Add(EMono.pc);
123 }
124 layout.RebuildLayout();
125 this.RebuildLayout();
128 }
129
130 public static void SetDirty()
131 {
132 if ((bool)Instance)
133 {
134 Instance.dirty = true;
135 }
136 }
137
138 public void Refresh()
139 {
140 if (dirty)
141 {
142 Build();
143 }
144 foreach (ButtonRoster value in buttons.Values)
145 {
146 value.Refresh();
147 }
148 dirty = false;
149 }
150
151 public void Add(Chara c)
152 {
153 ButtonRoster buttonRoster = Util.Instantiate(mold, layout);
154 buttonRoster.SetChara(c);
155 buttons.Add(c, buttonRoster);
156 }
157
158 public void Remove(Chara c)
159 {
160 UnityEngine.Object.DestroyImmediate(buttons[c].gameObject);
161 buttons.Remove(c);
162 }
163
164 public void OnAddMember(Chara c)
165 {
166 if (!buttons.ContainsKey(c))
167 {
168 Add(c);
169 }
170 }
171
172 public void OnRemoveMember(Chara c)
173 {
174 if (buttons.ContainsKey(c))
175 {
176 Remove(c);
177 }
178 }
179
180 public override void OnSetContextMenu(UIContextMenu m)
181 {
182 ButtonRoster b = InputModuleEX.GetComponentOf<ButtonRoster>();
183 if ((bool)b)
184 {
185 m.AddSlider("priority_hint", (float a) => a.ToString() ?? "", b.chara.GetInt(19), delegate(float a)
186 {
187 b.chara.SetInt(19, (int)a);
188 Build();
189 }, 0f, 20f, isInt: true, hideOther: false);
190 }
191 UIContextMenu uIContextMenu = m.AddChild("setting");
192 uIContextMenu.AddSlider("width", (float a) => a.ToString() ?? "", extra.width, delegate(float a)
193 {
194 extra.width = (int)a;
195 Build();
196 }, 30f, 160f, isInt: true);
197 uIContextMenu.AddSlider("margin", (float a) => a.ToString() ?? "", extra.margin, delegate(float a)
198 {
199 extra.margin = (int)a;
200 Build();
201 }, -50f, 50f, isInt: true);
202 uIContextMenu.AddToggle("roster_pc", extra.pc, delegate(bool a)
203 {
204 extra.pc = a;
205 Build();
206 });
207 uIContextMenu.AddToggle("vertical", extra.vertical, delegate(bool a)
208 {
209 extra.vertical = a;
210 Build();
211 });
212 uIContextMenu.AddToggle("roster_portrait", extra.portrait, delegate(bool a)
213 {
214 extra.portrait = a;
215 Build();
216 });
217 uIContextMenu.AddToggle("roster_onlyname", extra.onlyName, delegate(bool a)
218 {
219 extra.onlyName = a;
220 Build();
221 });
222 uIContextMenu.AddToggle("reverseOrder", extra.reverse, delegate(bool a)
223 {
224 extra.reverse = a;
225 Build();
226 });
227 m.AddChild("style").AddSlider("toggleButtonBG", (float a) => a.ToString() ?? "", base.config.skin.button, delegate(float a)
228 {
229 base.config.skin.button = (int)a;
230 ApplySkin();
231 }, 0f, base.config.skin.Skin.buttons.Count - 1, isInt: true);
233 }
234}
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
void Refresh()
Definition: ButtonRoster.cs:35
void SetChara(Chara c)
Definition: ButtonRoster.cs:23
Definition: Chara.cs:10
Party party
Definition: Chara.cs:43
Definition: EMono.cs:4
static Chara pc
Definition: EMono.cs:13
List< Chara > members
Definition: Party.cs:19
UIContextMenuItem AddToggle(string idLang="", bool isOn=false, UnityAction< bool > action=null)
UIContextMenuItem AddSlider(string text, Func< float, string > textFunc, float value, Action< float > action, float min=0f, float max=1f, bool isInt=false, bool hideOther=true, bool useInput=false)
UIContextMenu AddChild(string idLang, TextAnchor anchor)
static void SetDirty()
static WidgetRoster Instance
Definition: WidgetRoster.cs:37
void Build()
Definition: WidgetRoster.cs:97
void OnMoveZone()
Definition: WidgetRoster.cs:92
Dictionary< Chara, ButtonRoster > buttons
Definition: WidgetRoster.cs:45
UIButton moldDropperLeft
Definition: WidgetRoster.cs:47
RawImage imageGrid
Definition: WidgetRoster.cs:43
override bool AlwaysBottom
Definition: WidgetRoster.cs:59
UIButton moldDropperRight
Definition: WidgetRoster.cs:49
void OnDisable()
Definition: WidgetRoster.cs:87
GridLayoutGroup layout
Definition: WidgetRoster.cs:39
override Type SetSiblingAfter
Definition: WidgetRoster.cs:61
void Add(Chara c)
ButtonRoster mold
Definition: WidgetRoster.cs:41
void OnAddMember(Chara c)
override void OnSetContextMenu(UIContextMenu m)
override void OnActivate()
Definition: WidgetRoster.cs:68
void OnEnable()
Definition: WidgetRoster.cs:82
void OnRemoveMember(Chara c)
void Remove(Chara c)
void Refresh()
override object CreateExtra()
Definition: WidgetRoster.cs:63
Definition: Widget.cs:7
virtual void ApplySkin()
Definition: Widget.cs:556
void SetBaseContextMenu(UIContextMenu m)
Definition: Widget.cs:608
virtual void OnChangeResolution()
Definition: Widget.cs:457
void ClampToScreen()
Definition: Widget.cs:437