Elin Decompiled Documentation EA 23.301 Nightly
Loading...
Searching...
No Matches
LayerDragGrid.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3using UnityEngine.UI;
4
6{
7 public class PutbackInfo
8 {
9 public Thing thing;
10
12 }
13
14 public static LayerDragGrid Instance;
15
16 public List<PutbackInfo> putBacks = new List<PutbackInfo>();
17
19
20 public Image imageOwner;
21
23
25
26 public Transform transIndex;
27
28 public List<ButtonGrid> buttons;
29
31
33
35
37
39
41
43
45
46 public int currentIndex;
47
49
51
53
54 private bool wasInventoryOpen;
55
56 private int lastNum;
57
59
60 public override bool CanCancelAI => true;
61
62 public override bool RepeatAI => true;
63
64 public void OnOpen()
65 {
66 Instance = this;
67 InvOwner.Trader = owner;
68 wasInventoryOpen = ELayer.ui.IsInventoryOpen;
70 {
71 ELayer.ui.OpenFloatInv(ignoreSound: true);
72 }
73 }
74
75 public LayerDragGrid SetInv(InvOwnerDraglet owner, bool refuelFromLayerDragGrid = false)
76 {
77 owner.Init();
79 this.owner = owner;
80 textTitle.text = owner.langTransfer.lang();
81 OnOpen();
84 for (int j = 0; j < buttons.Count; j++)
85 {
86 buttons[j].gameObject.AddComponent<CanvasGroup>();
87 if (owner.numDragGrid > j)
88 {
89 buttons[j].SetCardGrid(null, owner);
90 buttons[j].index = j;
91 owner.buttons.Add(buttons[j]);
92 }
93 else
94 {
95 buttons[j].SetActive(enable: false);
96 }
97 }
101 InvokeRepeating("RefreshCost", 0f, 0.2f);
102 this.RebuildLayout(recursive: true);
104 RefreshCost();
105 this.RebuildLayout(recursive: true);
106 buttonRefuel.SetActive(owner.ShowFuel);
110 if (owner.CanTargetAlly && ELayer.pc.party.members.Count > 1)
111 {
112 listAlly.callbacks = new UIList.Callback<Chara, UIButton>
113 {
114 onInstantiate = delegate(Chara a, UIButton b)
115 {
116 a.SetImage(b.icon);
117 b.SetTooltipLang(a.Name);
118 },
119 onClick = delegate(Chara c, UIButton i)
120 {
122 {
123 SE.PopInventory();
125 }
126 },
127 onSort = delegate(Chara a, UIList.SortMode m)
128 {
129 a.SetSortVal(m);
130 return -a.sortVal;
131 },
132 onList = delegate
133 {
134 foreach (Chara member in ELayer.pc.party.members)
135 {
136 if (!member.IsPC)
137 {
138 listAlly.Add(member);
139 }
140 }
141 }
142 };
143 listAlly.List();
144 }
145 else
146 {
147 listAlly.SetActive(enable: false);
148 }
149 buttonRefuel.SetOnClick(delegate
150 {
151 if (!ELayer.pc.HasNoGoal)
152 {
153 SE.BeepSmall();
154 }
155 else
156 {
157 windows[0].SetInteractable(enable: false, 0f);
158 info.InitFuel(owner.owner);
159 Create(new InvOwnerRefuel(owner.owner), refuelFromLayerDragGrid: true).SetOnKill(delegate
160 {
161 if (!isDestroyed)
162 {
163 windows[0].SetInteractable(enable: true);
164 info.Init(owner.owner);
165 OnOpen();
166 RefreshCurrentGrid();
167 Redraw();
168 owner.OnAfterRefuel();
169 }
170 });
171 }
172 });
173 buttonAutoRefuel.SetOnClick(delegate
174 {
175 SE.Click();
176 owner.owner.autoRefuel = !owner.owner.autoRefuel;
177 RefreshCost();
179 {
181 }
182 });
183 buttonStock.SetOnClick(delegate
184 {
185 SE.Click();
186 owner.owner.c_isDisableStockUse = !owner.owner.c_isDisableStockUse;
188 RefreshCost();
189 });
190 buttonDeliver.SetOnClick(delegate
191 {
193 QuestHarvest questHarvest = ELayer.game.quests.Get<QuestHarvest>();
194 int num = 0;
195 if (questHarvest != null)
196 {
197 foreach (Thing item in ELayer.pc.things.List((Thing a) => deliver.ShouldShowGuide(a)))
198 {
199 Msg.Say("farm_chest", item, Lang._weight(item.SelfWeight * item.Num));
200 questHarvest.weightDelivered += item.SelfWeight * item.Num;
201 item.Destroy();
202 num++;
203 }
204 }
205 if (num > 0)
206 {
207 SE.Pick();
208 }
209 else
210 {
211 SE.BeepSmall();
212 }
213 Close();
214 });
215 if (owner is InvOwnerRefuel)
216 {
217 if (refuelFromLayerDragGrid)
218 {
219 info.SetActive(enable: false);
220 }
221 else
222 {
223 Debug.Log(owner.owner);
225 }
226 }
227 else
228 {
230 }
231 return this;
232 }
233
234 public int GetPrice()
235 {
236 return owner.price;
237 }
238
239 public void RefreshCost()
240 {
241 buttonAutoRefuel.mainText.text = (owner.owner.autoRefuel ? "On" : "Off");
242 buttonAutoRefuel.icon.SetAlpha(owner.owner.autoRefuel ? 1f : 0.4f);
243 buttonStock.mainText.text = ((!owner.owner.c_isDisableStockUse) ? "On" : "Off");
244 buttonStock.icon.SetAlpha((!owner.owner.c_isDisableStockUse) ? 1f : 0.4f);
245 textFuel.text = (int)((float)owner.owner.c_charges / (float)owner.owner.trait.MaxFuel * 100f) + "%";
246 int price = GetPrice();
247 itemCost.transform.parent.SetActive(price != 0);
248 if (price != 0)
249 {
250 itemCost.text1.SetText(Lang._currency(GetPrice()), (ELayer.pc.GetCurrency(owner.IDCurrency) >= price) ? FontColor.Good : FontColor.Bad);
251 itemCost.image1.sprite = SpriteSheet.Get("icon_" + owner.IDCurrency);
252 }
253 }
254
255 public bool IsAllGridSet()
256 {
257 for (int i = 0; i < owner.numDragGrid; i++)
258 {
259 if (buttons[i].card == null)
260 {
261 return false;
262 }
263 }
264 return true;
265 }
266
267 public override void ClearButtons()
268 {
269 for (int i = 0; i < owner.numDragGrid; i++)
270 {
271 buttons[i].SetCardGrid(null);
272 }
273 RefreshCurrentGrid();
274 uiIngredients.Refresh();
275 }
276
277 public override void RefreshCurrentGrid()
278 {
279 int num = -1;
280 for (int i = 0; i < buttons.Count; i++)
281 {
282 bool flag = buttons[i].Card != null;
283 if (num == -1 && (!flag || i == owner.numDragGrid - 1))
284 {
285 num = i;
286 }
287 buttons[i].interactable = flag || num == i;
288 buttons[i].GetComponent<CanvasGroup>().alpha = (buttons[i].interactable ? 1f : 0.5f);
289 }
290 currentIndex = num;
291 bool flag2 = num >= 0 && num < owner.numDragGrid;
292 if (flag2)
293 {
294 transIndex.position = buttons[num].transform.position;
295 }
296 transIndex.SetActive(flag2);
297 Redraw();
298 }
299
300 public override List<Thing> GetTargets()
301 {
302 List<Thing> list = new List<Thing>();
303 TraitCrafter traitCrafter = owner.owner.trait as TraitCrafter;
304 for (int i = 0; i < traitCrafter.numIng; i++)
305 {
306 list.Add(buttons[i].card?.Thing ?? null);
307 }
308 return list;
309 }
310
311 private void Update()
312 {
313 Validate();
314 }
315
316 public void Validate()
317 {
318 Card card = buttonOwner.card;
319 if (card.Num != lastNum)
320 {
321 lastNum = card.Num;
322 buttonOwner.SetCardGrid(owner.owner);
323 }
324 if (card == null || card.isDestroyed)
325 {
326 Close();
327 }
328 }
329
330 public void Redraw()
331 {
332 foreach (ButtonGrid button in buttons)
333 {
334 if (button.gameObject.activeSelf)
335 {
336 button.Redraw();
337 }
338 }
339 LayerInventory.SetDirtyAll(immediate: true);
340 }
341
342 public void AddPutBack(Thing t, Thing container)
343 {
344 if (container != null)
345 {
346 putBacks.Add(new PutbackInfo
347 {
348 thing = t,
349 container = container
350 });
351 }
352 }
353
354 public void TryPutBack()
355 {
356 foreach (PutbackInfo putBack in putBacks)
357 {
358 if (!putBack.thing.isDestroyed && putBack.thing.Num != 0 && putBack.thing.parent != putBack.container && !putBack.container.isDestroyed)
359 {
360 putBack.container.AddCard(putBack.thing);
361 }
362 }
363 putBacks.Clear();
364 RefreshCurrentGrid();
365 }
366
367 public override void OnEndCraft()
368 {
369 TryPutBack();
370 }
371
372 public override void OnKill()
373 {
374 EInput.haltInput = false;
376 InvOwner.Trader = null;
377 if (!wasInventoryOpen && ELayer.ui.IsInventoryOpen)
378 {
379 ELayer.ui.ToggleInventory();
380 }
383 {
384 ELayer.pc.ai.Cancel();
385 }
386 }
387
388 public override void OnUpdateInput()
389 {
390 if (EInput.action == EAction.MenuInventory || Input.GetKeyDown(KeyCode.Tab))
391 {
392 Close();
394 }
395 else
396 {
397 base.OnUpdateInput();
398 }
399 }
400
401 public override void OnRightClick()
402 {
403 if (InputModuleEX.GetComponentOf<ButtonGrid>() == null)
404 {
405 Close();
406 }
407 }
408
409 public static LayerDragGrid Create(InvOwnerDraglet owner, bool refuelFromLayerDragGrid = false)
410 {
411 return ELayer.ui.AddLayer<LayerDragGrid>("LayerInventory/LayerDragGrid").SetInv(owner, refuelFromLayerDragGrid);
412 }
413
415 {
416 Msg.Say("offer_what");
417 return Create(new InvOwnerChaosOffering(altar.owner)
418 {
419 altar = altar
420 });
421 }
422
424 {
425 Msg.Say("offer_what");
426 return Create(new InvOwnerOffering(altar.owner)
427 {
428 altar = altar
429 });
430 }
431
432 public static LayerDragGrid CreateDeliver(InvOwnerDeliver.Mode mode = InvOwnerDeliver.Mode.Default, Card owner = null)
433 {
434 if (mode == InvOwnerDeliver.Mode.Tax)
435 {
436 Msg.Say("bills", ELayer.player.taxBills.ToString() ?? "");
437 }
438 Msg.Say("deliver_what");
439 return Create(new InvOwnerDeliver(owner)
440 {
441 mode = mode
442 });
443 }
444
446 {
447 return Create(new InvOwnerGive(c)
448 {
449 chara = c
450 });
451 }
452
454 {
455 return Create(new InvOwnerCraft(crafter.owner)
456 {
457 crafter = crafter
458 });
459 }
460
462 {
463 Msg.Say("recycle_what");
464 return Create(new InvOwnerRecycle(recycle.owner)
465 {
466 recycle = recycle
467 });
468 }
469
471 {
472 Msg.Say("target_what");
473 return Create(new InvOwnerGacha(gacha.owner)
474 {
475 gacha = gacha
476 });
477 }
478
479 public static LayerDragGrid TryProc(Chara cc, InvOwnerEffect owner)
480 {
481 owner.cc = cc;
482 if (cc.IsPC)
483 {
484 return Create(owner);
485 }
486 int num = ((owner.count == -1) ? 1 : owner.count);
487 for (int i = 0; i < num; i++)
488 {
489 List<Thing> list = cc.things.List((Thing t) => owner.ShouldShowGuide(t), onlyAccessible: true);
490 if (list.Count > 0)
491 {
492 Thing t2 = list.RandomItem();
493 owner._OnProcess(t2);
494 continue;
495 }
496 if (i == 0)
497 {
499 }
500 break;
501 }
502 return null;
503 }
504
505 public static LayerDragGrid CreateIdentify(Chara cc, bool superior = false, BlessedState state = BlessedState.Normal, int price = 0, int count = 1)
506 {
507 return TryProc(cc, new InvOwnerIdentify
508 {
509 state = state,
510 price = price,
511 count = count,
512 superior = superior
513 });
514 }
515
516 public static LayerDragGrid CreateEnchant(Chara cc, bool armor, bool superior = false, BlessedState state = BlessedState.Normal, int count = 1)
517 {
518 return TryProc(cc, new InvOwnerEnchant
519 {
520 armor = armor,
521 state = state,
522 superior = superior,
523 count = count
524 });
525 }
526
527 public static LayerDragGrid CreateChangeMaterial(Chara cc, Thing consume, SourceMaterial.Row mat, EffectId idEffect, BlessedState state = BlessedState.Normal, int price = 0, int count = 1)
528 {
529 return TryProc(cc, new InvOwnerChangeMaterial
530 {
531 consume = consume,
532 mat = mat,
533 state = state,
534 price = price,
535 count = count,
536 idEffect = idEffect
537 });
538 }
539
540 public static LayerDragGrid CreateChangeRarity(Chara cc, Thing consume, EffectId idEffect, BlessedState state = BlessedState.Normal, int price = 0, int count = 1)
541 {
542 return TryProc(cc, new InvOwnerChangeRarity
543 {
544 consume = consume,
545 state = state,
546 price = price,
547 count = count,
548 idEffect = idEffect
549 });
550 }
551
552 public static LayerDragGrid CreateUncurse(Chara cc, BlessedState state = BlessedState.Normal, int price = 0, int count = 1)
553 {
554 return TryProc(cc, new InvOwnerUncurse
555 {
556 state = state,
557 price = price,
558 count = count
559 });
560 }
561
562 public static LayerDragGrid CreateLighten(Chara cc, BlessedState state = BlessedState.Normal, int price = 0, int count = 1)
563 {
564 return TryProc(cc, new InvOwnerLighten
565 {
566 state = state,
567 price = price,
568 count = count
569 });
570 }
571
572 public static LayerDragGrid CreateReconstruction(Chara cc, BlessedState state = BlessedState.Normal, int power = 100, int price = 0, int count = 1)
573 {
574 return TryProc(cc, new InvOwnerReconstruction
575 {
576 state = state,
577 price = price,
578 count = count,
579 power = power
580 });
581 }
582}
BlessedState
Definition: BlessedState.cs:2
EAction
Definition: EAction.cs:2
EffectId
Definition: EffectId.cs:2
FontColor
Definition: FontColor.cs:2
virtual bool IsRunning
Definition: AIAct.cs:31
virtual Status Cancel()
Definition: AIAct.cs:305
Card card
Definition: ButtonGrid.cs:24
void Redraw()
Definition: ButtonGrid.cs:140
void SetCardGrid(Card c, InvOwner owner=null)
Definition: ButtonGrid.cs:145
Definition: Card.cs:11
bool isDestroyed
Definition: Card.cs:78
Card AddCard(Card c)
Definition: Card.cs:3168
string Name
Definition: Card.cs:2179
ICardParent parent
Definition: Card.cs:56
int GetCurrency(string id="money")
Definition: Card.cs:4059
bool autoRefuel
Definition: Card.cs:629
int sortVal
Definition: Card.cs:104
Trait trait
Definition: Card.cs:54
void SayNothingHappans()
Definition: Card.cs:7120
ThingContainer things
Definition: Card.cs:39
bool c_isDisableStockUse
Definition: Card.cs:1099
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:6388
int Num
Definition: Card.cs:161
Definition: Chara.cs:10
AIAct ai
Definition: Chara.cs:204
override void SetSortVal(UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
Definition: Chara.cs:7471
override bool IsPC
Definition: Chara.cs:626
Party party
Definition: Chara.cs:43
bool HasNoGoal
Definition: Chara.cs:1014
Definition: EInput.cs:8
static void WaitReleaseKey()
Definition: EInput.cs:661
static EAction action
Definition: EInput.cs:270
Definition: ELayer.cs:4
static Chara pc
Definition: ELayer.cs:15
static Player player
Definition: ELayer.cs:13
static Game game
Definition: ELayer.cs:9
static UI ui
Definition: ELayer.cs:21
QuestManager quests
Definition: Game.cs:183
override bool ShouldShowGuide(Thing t)
virtual bool CanTargetAlly
virtual bool AllowStockIngredients
virtual void _OnProcess(Thing t)
override void BuildUICurrency(UICurrency uiCurrency, bool canReroll=false)
virtual void OnAfterRefuel()
virtual bool ShowButtonDeliver
virtual bool ShowFuel
void Init()
Definition: InvOwner.cs:738
Card owner
Definition: InvOwner.cs:533
Card Container
Definition: InvOwner.cs:535
string IDCurrency
Definition: InvOwner.cs:637
List< ButtonGrid > buttons
Definition: InvOwner.cs:537
virtual int numDragGrid
Definition: InvOwner.cs:619
virtual string langTransfer
Definition: InvOwner.cs:587
virtual bool ShouldShowGuide(Thing t)
Definition: InvOwner.cs:681
Definition: Lang.cs:6
static string _weight(int a, int b, bool showUnit=true, int unitSize=0)
Definition: Lang.cs:174
static string _currency(object a, string IDCurrency)
Definition: Lang.cs:164
UIButton buttonAlly
override bool RepeatAI
void AddPutBack(Thing t, Thing container)
static LayerDragGrid CreateDeliver(InvOwnerDeliver.Mode mode=InvOwnerDeliver.Mode.Default, Card owner=null)
override void ClearButtons()
static LayerDragGrid CreateOffering(TraitAltar altar)
static LayerDragGrid CreateGacha(TraitGacha gacha)
static LayerDragGrid CreateGive(Chara c)
static LayerDragGrid CreateEnchant(Chara cc, bool armor, bool superior=false, BlessedState state=BlessedState.Normal, int count=1)
UIButton buttonAutoRefuel
UIDragGridInfo info
static LayerDragGrid CreateChangeRarity(Chara cc, Thing consume, EffectId idEffect, BlessedState state=BlessedState.Normal, int price=0, int count=1)
static LayerDragGrid CreateChangeMaterial(Chara cc, Thing consume, SourceMaterial.Row mat, EffectId idEffect, BlessedState state=BlessedState.Normal, int price=0, int count=1)
override List< Thing > GetTargets()
static LayerDragGrid CreateLighten(Chara cc, BlessedState state=BlessedState.Normal, int price=0, int count=1)
bool wasInventoryOpen
ButtonGrid CurrentButton
override void OnEndCraft()
static LayerDragGrid TryProc(Chara cc, InvOwnerEffect owner)
UIButton buttonRefuel
InvOwnerDraglet owner
UIButton buttonStock
List< PutbackInfo > putBacks
static LayerDragGrid Create(InvOwnerDraglet owner, bool refuelFromLayerDragGrid=false)
LayerDragGrid SetInv(InvOwnerDraglet owner, bool refuelFromLayerDragGrid=false)
UIDragGridIngredients uiIngredients
List< ButtonGrid > buttons
void RefreshCost()
override void OnUpdateInput()
UICurrency uiCurrency
bool IsAllGridSet()
Transform transIndex
static LayerDragGrid Instance
static LayerDragGrid CreateUncurse(Chara cc, BlessedState state=BlessedState.Normal, int price=0, int count=1)
override void RefreshCurrentGrid()
override bool CanCancelAI
override void OnKill()
static LayerDragGrid CreateReconstruction(Chara cc, BlessedState state=BlessedState.Normal, int power=100, int price=0, int count=1)
UIText textTitle
static LayerDragGrid CreateChaosOffering(TraitAltarChaos altar)
static LayerDragGrid CreateRecycle(TraitRecycle recycle)
ButtonGrid buttonOwner
override void OnRightClick()
UIButton buttonDeliver
static LayerDragGrid CreateCraft(TraitCrafter crafter)
static LayerDragGrid CreateIdentify(Chara cc, bool superior=false, BlessedState state=BlessedState.Normal, int price=0, int count=1)
static bool CloseAllyInv(Chara c)
static LayerInventory CreateContainerAlly(Chara owner, Card container)
static void SetDirtyAll(bool immediate=false)
virtual void Close()
Definition: Layer.cs:463
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
List< Chara > members
Definition: Party.cs:19
int taxBills
Definition: Player.cs:975
Quest Get(string id)
static Sprite Get(string id)
Definition: SpriteSheet.cs:28
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
Definition: Thing.cs:8
virtual int numIng
Definition: TraitCrafter.cs:35
bool IsRequireFuel
Definition: Trait.cs:477
virtual int MaxFuel
Definition: Trait.cs:462
Card owner
Definition: Trait.cs:28
bool IsFuelEnough(int num=1, List< Thing > excludes=null, bool tryRefuel=true)
Definition: Trait.cs:1337
Image icon
Definition: UIButton.cs:110
void SetTooltipLang(string lang=null)
Definition: UIButton.cs:373
void Init(Card _owner)
void InitFuel(Card _owner)
Definition: UIItem.cs:5
UIText text1
Definition: UIItem.cs:6
Definition: UIList.cs:9
SortMode
Definition: UIList.cs:27
override void Add(object item)
Definition: UIList.cs:354
override void List()
Definition: UIList.cs:769
Definition: UIText.cs:6
void SetText(string s)
Definition: UIText.cs:163