Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
FurnitureInventoryPanel.cs
浏览该文件的文档.
1using System.Xml.Linq;
2using Engine;
3
4namespace Game {
7
9
11
13
15
17
18 public int m_pagesCount;
19
20 public int m_assignedPage;
21
23
24 public bool m_populateNeeded;
25 public static string fName = "FurnitureInventoryPanel";
27
29
31
32 public FurnitureInventoryPanel(CreativeInventoryWidget creativeInventoryWidget) {
33 m_creativeInventoryWidget = creativeInventoryWidget;
34 ComponentFurnitureInventory = creativeInventoryWidget.Entity.FindComponent<ComponentFurnitureInventory>(true);
35 m_componentPlayer = creativeInventoryWidget.Entity.FindComponent<ComponentPlayer>(true);
38 XElement node = ContentManager.Get<XElement>("Widgets/FurnitureInventoryPanel");
39 LoadContents(this, node);
40 m_furnitureSetList = Children.Find<ListPanelWidget>("FurnitureSetList");
41 m_inventoryGrid = Children.Find<GridPanelWidget>("InventoryGrid");
42 m_addButton = Children.Find<ButtonWidget>("AddButton");
43 m_moreButton = Children.Find<ButtonWidget>("MoreButton");
44 for (int i = 0; i < m_inventoryGrid.RowsCount; i++) {
45 for (int j = 0; j < m_inventoryGrid.ColumnsCount; j++) {
46 InventorySlotWidget widget = new();
47 m_inventoryGrid.Children.Add(widget);
48 m_inventoryGrid.SetWidgetCell(widget, new Point2(j, i));
49 }
50 }
51 ListPanelWidget furnitureSetList = m_furnitureSetList;
52 furnitureSetList.ItemWidgetFactory = (Func<object, Widget>)Delegate.Combine(
53 furnitureSetList.ItemWidgetFactory,
54 (Func<object, Widget>)(item => new FurnitureSetItemWidget(this, (FurnitureSet)item))
55 );
56 m_furnitureSetList.SelectionChanged += delegate {
58 && ComponentFurnitureInventory.FurnitureSet != m_furnitureSetList.SelectedItem as FurnitureSet) {
60 ComponentFurnitureInventory.FurnitureSet = m_furnitureSetList.SelectedItem as FurnitureSet;
61 if (ComponentFurnitureInventory.FurnitureSet == null) {
62 m_furnitureSetList.SelectedIndex = 0;
63 }
65 }
66 };
67 m_populateNeeded = true;
68 }
69
70 public override void Update() {
71 if (m_populateNeeded) {
72 Populate();
73 m_populateNeeded = false;
74 }
77 }
78 m_creativeInventoryWidget.PageUpButton.IsEnabled = ComponentFurnitureInventory.PageIndex > 0;
79 m_creativeInventoryWidget.PageDownButton.IsEnabled = ComponentFurnitureInventory.PageIndex < m_pagesCount - 1;
80 m_creativeInventoryWidget.PageLabel.Text = m_pagesCount > 0
81 ? $"{ComponentFurnitureInventory.PageIndex + 1}/{m_pagesCount}"
82 : string.Empty;
83 m_moreButton.IsEnabled = ComponentFurnitureInventory.FurnitureSet != null;
84 if (Input.Scroll.HasValue
85 && HitTestGlobal(Input.Scroll.Value.XY).IsChildWidgetOf(m_inventoryGrid)) {
86 ComponentFurnitureInventory.PageIndex -= (int)Input.Scroll.Value.Z;
87 }
88 if (m_creativeInventoryWidget.PageUpButton.IsClicked) {
90 }
91 if (m_creativeInventoryWidget.PageDownButton.IsClicked) {
93 }
95 if (m_addButton.IsClicked) {
96 List<Tuple<string, Action>> list = [
97 new(
99 delegate {
100 if (SubsystemFurnitureBlockBehavior.FurnitureSets.Count < 32) {
102 }
103 else {
105 m_componentPlayer.GuiWidget,
107 );
108 }
109 }
110 ),
111 new(LanguageControl.Get(fName, 7), delegate { ImportFurnitureSet(SubsystemTerrain); })
112 ];
114 m_componentPlayer.GuiWidget,
117 list,
118 64f,
119 t => ((Tuple<string, Action>)t).Item1,
120 delegate(object t) { ((Tuple<string, Action>)t).Item2(); }
121 )
122 );
123 }
124 if (m_moreButton.IsClicked
125 && ComponentFurnitureInventory.FurnitureSet != null) {
126 List<Tuple<string, Action>> list2 = [
128 new(
130 delegate {
131 if (SubsystemFurnitureBlockBehavior.GetFurnitureSetDesigns(ComponentFurnitureInventory.FurnitureSet).Any()) {
133 m_componentPlayer.GuiWidget,
134 new MessageDialog(
139 delegate(MessageDialogButton b) {
140 if (b == MessageDialogButton.Button1) {
142 }
143 }
144 )
145 );
146 }
147 else {
149 }
150 }
151 ),
152 new(LanguageControl.Get(fName, 11), delegate { MoveFurnitureSet(-1); }),
153 new(LanguageControl.Get(fName, 12), delegate { MoveFurnitureSet(1); }),
155 ];
157 m_componentPlayer.GuiWidget,
160 list2,
161 64f,
162 t => ((Tuple<string, Action>)t).Item1,
163 delegate(object t) { ((Tuple<string, Action>)t).Item2(); }
164 )
165 );
166 }
167 }
168
169 public override void UpdateCeases() {
170 base.UpdateCeases();
171 ComponentFurnitureInventory.ClearSlots();
172 m_populateNeeded = true;
173 }
174
175 public void Invalidate() {
176 m_populateNeeded = true;
177 }
178
179 public void Populate() {
180 ComponentFurnitureInventory.FillSlots();
181 try {
183 m_furnitureSetList.ClearItems();
184 m_furnitureSetList.AddItem(null);
185 foreach (FurnitureSet furnitureSet in SubsystemFurnitureBlockBehavior.FurnitureSets) {
186 m_furnitureSetList.AddItem(furnitureSet);
187 }
188 }
189 finally {
191 }
192 m_furnitureSetList.SelectedItem = ComponentFurnitureInventory.FurnitureSet;
194 }
195
196 public void AssignInventorySlots() {
197 List<int> list = [];
198 for (int i = 0; i < ComponentFurnitureInventory.SlotsCount; i++) {
199 int slotValue = ComponentFurnitureInventory.GetSlotValue(i);
200 int slotCount = ComponentFurnitureInventory.GetSlotCount(i);
201 if (slotValue != 0
202 && slotCount > 0
203 && Terrain.ExtractContents(slotValue) == 227) {
204 int designIndex = FurnitureBlock.GetDesignIndex(Terrain.ExtractData(slotValue));
205 FurnitureDesign design = SubsystemFurnitureBlockBehavior.GetDesign(designIndex);
206 if (design != null
207 && design.FurnitureSet == ComponentFurnitureInventory.FurnitureSet) {
208 list.Add(i);
209 }
210 }
211 }
212 List<InventorySlotWidget> list2 = new(from w in m_inventoryGrid.Children select w as InventorySlotWidget into w where w != null select w);
213 int num = ComponentFurnitureInventory.PageIndex * list2.Count;
214 for (int j = 0; j < list2.Count; j++) {
215 if (num < list.Count) {
216 list2[j].AssignInventorySlot(ComponentFurnitureInventory, list[num]);
217 }
218 else {
219 list2[j].AssignInventorySlot(null, 0);
220 }
221 num++;
222 }
223 m_pagesCount = (list.Count + list2.Count - 1) / list2.Count;
225 }
226
227 public void NewFurnitureSet() {
228 //ComponentPlayer componentPlayer = ComponentFurnitureInventory.Entity.FindComponent<ComponentPlayer>(throwOnError: true);
230 null,
231 new TextBoxDialog(
234 30,
235 delegate(string s) {
236 if (s != null) {
237 FurnitureSet furnitureSet = SubsystemFurnitureBlockBehavior.NewFurnitureSet(s, null);
239 Populate();
240 m_furnitureSetList.ScrollToItem(furnitureSet);
241 }
242 }
243 )
244 );
245 }
246
247 public void DeleteFurnitureSet() {
248 if (m_furnitureSetList.SelectedItem is FurnitureSet furnitureSet) {
249 int num = SubsystemFurnitureBlockBehavior.FurnitureSets.IndexOf(furnitureSet);
250 SubsystemFurnitureBlockBehavior.DeleteFurnitureSet(furnitureSet);
251 SubsystemFurnitureBlockBehavior.GarbageCollectDesigns();
252 ComponentFurnitureInventory.FurnitureSet = num > 0 ? SubsystemFurnitureBlockBehavior.FurnitureSets[num - 1] : null;
253 Invalidate();
254 }
255 }
256
257 public void RenameFurnitureSet() {
258 if (m_furnitureSetList.SelectedItem is FurnitureSet furnitureSet) {
259 //ComponentPlayer componentPlayer = ComponentFurnitureInventory.Entity.FindComponent<ComponentPlayer>(throwOnError: true);
261 null,
262 new TextBoxDialog(
265 30,
266 delegate(string s) {
267 if (s != null) {
268 furnitureSet.Name = s;
269 Invalidate();
270 }
271 }
272 )
273 );
274 }
275 }
276
277 public void MoveFurnitureSet(int move) {
278 if (m_furnitureSetList.SelectedItem is FurnitureSet furnitureSet) {
279 SubsystemFurnitureBlockBehavior.MoveFurnitureSet(furnitureSet, move);
280 Invalidate();
281 }
282 }
283
284 public void ImportFurnitureSet(SubsystemTerrain subsystemTerrain) {
288 m_componentPlayer.GuiWidget,
290 );
291 }
292 else {
294 m_componentPlayer.GuiWidget,
298 64f,
300 delegate(object s) {
301 try {
302 int num = 0;
303 int num2 = 0;
304 string text = (string)s;
305 List<List<FurnitureDesign>> list = FurnitureDesign.ListChains(
306 FurniturePacksManager.LoadFurniturePack(subsystemTerrain, text)
307 );
308 List<FurnitureDesign> list2 = [];
309 SubsystemFurnitureBlockBehavior.GarbageCollectDesigns();
310 foreach (List<FurnitureDesign> item in list) {
311 FurnitureDesign furnitureDesign = SubsystemFurnitureBlockBehavior.TryAddDesignChain(item[0], false);
312 if (furnitureDesign == item[0]) {
313 list2.Add(furnitureDesign);
314 }
315 else if (furnitureDesign == null) {
316 num2++;
317 }
318 else {
319 num++;
320 }
321 }
322 if (list2.Count > 0) {
323 FurnitureSet furnitureSet = SubsystemFurnitureBlockBehavior.NewFurnitureSet(
325 text
326 );
327 foreach (FurnitureDesign item2 in list2) {
328 SubsystemFurnitureBlockBehavior.AddToFurnitureSet(item2, furnitureSet);
329 }
331 }
332 Invalidate();
333 string text2 = string.Format(LanguageControl.Get(fName, 1), list2.Count);
334 if (num > 0) {
335 text2 += string.Format(LanguageControl.Get(fName, 2), num);
336 }
337 if (num2 > 0) {
338 text2 += string.Format(LanguageControl.Get(fName, 3), num2, 65535);
339 }
341 m_componentPlayer.GuiWidget,
342 new MessageDialog(LanguageControl.Get(fName, 4), text2.Trim(), LanguageControl.Ok, null, null)
343 );
344 }
345 catch (Exception ex) {
347 m_componentPlayer.GuiWidget,
348 new MessageDialog(LanguageControl.Get(fName, 5), ex.Message, LanguageControl.Ok, null, null)
349 );
350 }
351 }
352 )
353 );
354 }
355 }
356
357 public void ExportFurnitureSet() {
358 try {
359 FurnitureDesign[] designs = SubsystemFurnitureBlockBehavior.GetFurnitureSetDesigns(ComponentFurnitureInventory.FurnitureSet)
360 .ToArray();
361 string displayName = FurniturePacksManager.GetDisplayName(
363 );
365 m_componentPlayer.GuiWidget,
366#if ANDROID || BROWSER
367 new MessageDialog(
369 string.Format(LanguageControl.Get(fName, 22), displayName),
372 button => {
373 if (button == MessageDialogButton.Button1) {
374 Task.Run(async () => {
375 try {
376 await Storage.ShareFile(FurniturePacksManager.GetFileName($"{displayName}.scfpack"));
377 }
378 catch (Exception e) {
379 Dispatcher.Dispatch(() => DialogsManager.ShowDialog(
380 null,
381 new MessageDialog(LanguageControl.Error, e.Message, LanguageControl.Ok, null, null)
382 )
383 );
384 }
385 });
386 }
387 }
388 )
389#else
390 new MessageDialog(
392 string.Format(LanguageControl.Get(fName, 22), displayName),
394 null,
395 null
396 )
397#endif
398 );
399 }
400 catch (Exception ex) {
403 new MessageDialog(LanguageControl.Get(fName, 23), ex.Message, LanguageControl.Ok, null, null)
404 );
405 }
406 }
407 }
408}
readonly WidgetsList Children
static object Get(Type type, string name)
static void ShowDialog(ContainerWidget parentWidget, Dialog dialog)
static int GetDesignIndex(int data)
static List< List< FurnitureDesign > > ListChains(IEnumerable< FurnitureDesign > designs)
SubsystemFurnitureBlockBehavior SubsystemFurnitureBlockBehavior
FurnitureInventoryPanel(CreativeInventoryWidget creativeInventoryWidget)
ComponentFurnitureInventory ComponentFurnitureInventory
void ImportFurnitureSet(SubsystemTerrain subsystemTerrain)
CreativeInventoryWidget m_creativeInventoryWidget
static ReadOnlyList< string > FurniturePackNames
static string GetDisplayName(string name)
static string CreateFurniturePack(string name, ICollection< FurnitureDesign > designs)
static List< FurnitureDesign > LoadFurniturePack(SubsystemTerrain subsystemTerrain, string name)
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
Func< object, Widget > ItemWidgetFactory
static int ExtractContents(int value)
static int ExtractData(int value)
virtual Widget HitTestGlobal(Vector2 point, Func< Widget, bool > predicate=null)
WidgetInput Input
virtual void LoadContents(object eventsTarget, XElement node)