Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
LayerCraft.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using System.Linq;
3using UnityEngine;
4using UnityEngine.UI;
5
7{
8 public static LayerCraft Instance;
9
11
13
15
16 public Vector3 posInfo;
17
18 public Thing factory;
19
20 public Thing product;
21
22 public Recipe recipe;
23
25
27
29
31
33
34 public List<RecipeSource> newRecipes = new List<RecipeSource>();
35
37
38 public bool showInfo;
39
40 private bool pickaxeCrafted;
41
42 private bool workbenchCrafted;
43
45
47
48 public Transform transFuel;
49
51
53
55
56 public Image imageQualityReq;
57
58 public Image imageQualityCurrent;
59
60 public float waitComplete;
61
62 public float qualityBarWidth;
63
64 private int wcount;
65
67
68 private bool tabBuilt;
69
70 public override void RefreshCurrentGrid()
71 {
72 RefreshRecipe(first: true);
73 }
74
75 public override void ClearButtons()
76 {
77 RefreshRecipe(first: true);
78 }
79
80 public override string GetTextHeader(Window window)
81 {
82 return null;
83 }
84
85 public override void OnAfterInit()
86 {
87 info1.searchMode = StockSearchMode.AroundPC;
88 info1.ddList.pivot.SetActive(enable: true);
89 Instance = this;
90 }
91
92 public override void OnKill()
93 {
95 {
96 Tutorial.Play("middle_click");
97 }
99 {
100 Tutorial.Play("hardness");
101 }
102 string key = ((factory == null) ? "hand" : factory.id);
104 }
105
106 public void SetFactory(Thing t)
107 {
108 factory = t;
109 RefreshCategory("all", first: true);
110 bool flag = t != null && t.trait.IsRequireFuel;
111 transFuel.SetActive(flag);
112 if (!flag)
113 {
114 return;
115 }
116 buttonRefuel.SetOnClick(delegate
117 {
118 foreach (Window window in windows)
119 {
120 window.SetInteractable(enable: false, 0f);
121 }
123 {
124 if (!isDestroyed)
125 {
126 OnEndCraft();
127 }
128 });
129 });
130 buttonAutoRefuel.SetOnClick(delegate
131 {
132 SE.Click();
133 t.autoRefuel = !t.autoRefuel;
135 });
136 }
137
138 public void OnClickCraft()
139 {
140 Dictionary<Thing, int> dictionary = new Dictionary<Thing, int>();
141 foreach (Recipe.Ingredient ingredient in recipe.ingredients)
142 {
143 if (ingredient.thing != null)
144 {
145 if (!dictionary.ContainsKey(ingredient.thing))
146 {
147 dictionary.Add(ingredient.thing, 0);
148 }
149 dictionary[ingredient.thing] += ingredient.req * inputNum.Num;
150 }
151 }
152 foreach (KeyValuePair<Thing, int> item in dictionary)
153 {
154 if (item.Key.Num < item.Value)
155 {
156 SE.Beep();
157 Msg.Say("craftDupError");
158 return;
159 }
160 }
161 if (inputNum.Num == 0)
162 {
163 SE.Beep();
164 return;
165 }
166 TraitCrafter traitCrafter = factory?.trait as TraitCrafter;
167 if (traitCrafter == null)
168 {
169 traitCrafter = Trait.SelfFactory;
170 traitCrafter.owner = ELayer.pc;
171 }
172 (traitCrafter as TraitFactory).recipe = recipe;
173 switch (recipe.id)
174 {
175 case "workbench":
176 workbenchCrafted = true;
177 break;
178 case "axe":
179 case "hammer":
180 case "pickaxe":
181 pickaxeCrafted = true;
182 break;
183 }
186 {
187 crafter = traitCrafter,
188 layer = this,
189 recipe = recipe,
190 num = inputNum.Num
191 });
193 base.gameObject.SetActive(value: false);
194 }
195
196 public override List<Thing> GetTargets()
197 {
198 List<Thing> list = new List<Thing>();
199 foreach (Recipe.Ingredient ingredient in recipe.ingredients)
200 {
201 if (!ingredient.optional || (ingredient.thing != null && !ingredient.thing.isDestroyed))
202 {
203 list.Add(ingredient.thing);
204 }
205 }
206 return list;
207 }
208
209 public override int GetReqIngredient(int index)
210 {
211 return recipe.ingredients[index].req * inputNum.Num;
212 }
213
214 public override void OnEndCraft()
215 {
217 }
218
219 public void OnCompleteCraft()
220 {
221 CancelInvoke("WaitUntilIdle");
222 EInput.haltInput = true;
223 TweenUtil.Tween(waitComplete, null, delegate
224 {
225 EInput.haltInput = false;
226 base.gameObject.SetActive(value: true);
227 foreach (Window window in windows)
228 {
229 window.SetInteractable(enable: true);
230 }
231 list.Redraw();
232 RefreshRecipe(first: true);
234 list.Select((Recipe r) => recipe.id == r.id);
235 });
236 }
237
238 public void WaitUntilIdle()
239 {
241 {
242 CancelInvoke();
243 Close();
244 }
245 }
246
247 private void Update()
248 {
249 float axis = Input.GetAxis("Mouse ScrollWheel");
250 if (Input.GetMouseButton(0))
251 {
252 wcount = 2;
253 }
254 if (axis != 0f)
255 {
256 wcount = 2;
257 }
258 else if (wcount > 0)
259 {
260 wcount--;
261 }
262 else
263 {
264 RefreshInfo();
265 }
266 }
267
268 public void RefreshInfo()
269 {
270 ButtonGrid buttonGrid = InputModuleEX.GetComponentOf<ButtonGrid>();
271 if ((bool)buttonGrid && buttonGrid.recipe == null)
272 {
273 buttonGrid = null;
274 }
275 if (!(buttonGrid == lastB))
276 {
277 lastB = buttonGrid;
278 }
279 }
280
281 public void RefreshCategory(string cat, bool first = false)
282 {
283 Dictionary<string, int> cats = new Dictionary<string, int>();
285 list.callbacks = new UIList.Callback<Recipe, ButtonGrid>
286 {
287 onClick = delegate(Recipe a, ButtonGrid b)
288 {
289 if (recipe != null)
290 {
292 }
293 recipe = a;
294 SE.Play("click_recipe");
295 RefreshRecipe(first: true);
297 b.Dettach("recipe_new");
298 list.Select(a);
299 },
300 onRedraw = delegate(Recipe a, ButtonGrid b, int i)
301 {
302 if (a.ingredients.Count == 0)
303 {
305 }
306 b.SetCraftRecipe(a, ButtonGrid.Mode.Recipe);
307 if (!ELayer.player.recipes.hoveredRecipes.Contains(a.id))
308 {
309 b.Attach("recipe_new", rightAttach: false);
310 }
311 if (a.HasFirstTimeBonus())
312 {
313 b.Attach("recipe_firstTime", rightAttach: false).GetComponent<Image>().SetAlpha((a.idSkin == 0) ? 1f : 0.5f);
314 }
315 },
316 onList = delegate
317 {
318 newRecipes.Clear();
320 {
321 if (cat == "all" || item.row.Category.IsChildOf(cat))
322 {
323 Recipe o2 = Recipe.Create(item);
324 list.Add(o2);
325 if (item.row.skins != null && item.row.skins.Length != 0)
326 {
327 for (int j = 0; j < item.row.skins.Length; j++)
328 {
329 o2 = Recipe.Create(item);
330 o2.idSkin = j + 1;
331 list.Add(o2);
332 }
333 }
334 }
335 SourceCategory.Row row = item.row.Category.GetSecondRoot();
336 if (row.id != "lightsource" && row.IsChildOf("armor"))
337 {
338 row = ELayer.sources.categories.map["armor"];
339 }
340 if (!cats.ContainsKey(row.id))
341 {
342 cats.Add(row.id, 1);
343 }
344 else
345 {
346 cats[row.id]++;
347 }
348 }
349 list.objects.Sort((object a, object b) => (b as Recipe).GetSortVal() - (a as Recipe).GetSortVal());
350 _ = newRecipes.Count;
351 },
352 onSort = (Recipe a, UIList.SortMode m) => a.GetSortVal()
353 };
354 list.sortMode = UIList.SortMode.ByLevel;
355 list.List();
356 if (cats.Count > 1 && !tabBuilt)
357 {
358 windowList.AddTab("all", null, delegate
359 {
360 RefreshCategory("all");
361 });
362 foreach (KeyValuePair<string, int> c in cats)
363 {
364 windowList.AddTab(ELayer.sources.categories.map[c.Key].GetName() + "(" + c.Value + ")", null, delegate
365 {
366 RefreshCategory(c.Key);
367 });
368 }
369 tabBuilt = true;
371 }
372 list.Scroll();
373 if (list.rows.Count <= 0)
374 {
375 return;
376 }
377 object o = list.rows[0].objects[0];
378 if (first)
379 {
380 string key = ((factory == null) ? "hand" : factory.id);
381 if (ELayer.player.lastRecipes.ContainsKey(key))
382 {
383 string text = ELayer.player.lastRecipes[key];
384 foreach (object @object in list.objects)
385 {
386 if ((@object as Recipe).id == text)
387 {
388 o = @object;
389 break;
390 }
391 }
392 }
393 list.Scroll(o);
394 if (!list.Select(o, invoke: true))
395 {
396 list.Scroll();
397 list.Select(list.rows[0].objects[0]);
398 }
399 }
400 else
401 {
402 list.Select(o, invoke: true);
403 }
404 }
405
406 public void OnChangeIngredient()
407 {
408 RefreshRecipe(first: true);
409 }
410
411 public void RefreshRecipe(bool first)
412 {
413 foreach (Recipe.Ingredient ingredient in recipe.ingredients)
414 {
415 if (info1.recipe != recipe || (!ingredient.optional && (ingredient.thing == null || ingredient.thing.isDestroyed)))
416 {
417 ingredient.SetThing();
418 }
419 }
420 if (first)
421 {
422 toggleCraftTo.SetToggle(isOn: false);
423 toggleRepeat.SetToggle(isOn: false);
424 inputNum.Num = 1;
425 info1.recipe = null;
426 }
427 info1.factory = factory;
432 }
433
434 public void RefreshTrackButton()
435 {
437 buttonTrack.SetOnClick(delegate
438 {
439 recipe.ToggleTrack(quest);
441 });
442 buttonTrack.icon.SetActive(quest != null && quest.idRecipe == recipe.id);
443 }
444
445 public void RefreshInputNum()
446 {
448 inputNum.onValueChanged = delegate
449 {
451 };
453 }
454
455 public void RefreshProduct()
456 {
458 ELayer.screen.tileSelector.summary.countValid = inputNum.Num;
459 ELayer.screen.tileSelector.summary.factory = factory;
461 if (factory != null)
462 {
463 textFuel.text = "craftFuel".lang(((int)((float)factory.c_charges / (float)factory.trait.MaxFuel * 100f)).ToString() ?? "");
464 buttonAutoRefuel.mainText.text = (factory.autoRefuel ? "On" : "Off");
465 buttonAutoRefuel.icon.SetAlpha(factory.autoRefuel ? 1f : 0.4f);
466 }
468 List<Thing> list = new List<Thing>();
469 foreach (Recipe.Ingredient ingredient in recipe.ingredients)
470 {
471 if (ingredient.thing != null)
472 {
473 list.Add(ingredient.thing);
474 }
475 }
476 Thing thing = recipe.Craft(BlessedState.Normal, sound: false, list, null, model: true);
477 thing.SetNum(inputNum.Num);
478 if (thing.sockets != null)
479 {
480 thing.sockets.Clear();
481 }
483 {
484 foreach (Element item in thing.elements.dict.Values.ToList())
485 {
486 if (!item.IsTrait)
487 {
488 thing.elements.Remove(item.id);
489 }
490 }
491 }
493 thing.WriteNote(info1.note, null, IInspect.NoteMode.Product, recipe);
494 product = thing;
495 }
496
497 public bool IsQualityMet()
498 {
499 return true;
500 }
501
502 public void RefreshQuality()
503 {
504 }
505
506 public void OnClickExamine()
507 {
508 ELayer.ui.AddLayer<LayerInfo>().Set(product);
509 }
510}
BlessedState
Definition: BlessedState.cs:2
StockSearchMode
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1040
bool IsActive
Definition: ActionMode.cs:121
static AM_Adv Adv
Definition: ActionMode.cs:15
void SetCraftRecipe(Recipe r, Mode mode, bool tooltip=false)
Definition: ButtonGrid.cs:585
void SetCard(Card c, Mode mode=Mode.Default, Action< UINote > onWriteNote=null)
Definition: ButtonGrid.cs:184
Transform Attach(string id, bool rightAttach=true)
Definition: ButtonGrid.cs:63
void Dettach(string id)
Definition: ButtonGrid.cs:78
ElementContainerCard elements
Definition: Card.cs:37
string id
Definition: Card.cs:31
bool IsEquipmentOrRangedOrAmmo
Definition: Card.cs:2090
Thing SetNum(int a)
Definition: Card.cs:3242
bool autoRefuel
Definition: Card.cs:598
Trait trait
Definition: Card.cs:49
int c_charges
Definition: Card.cs:1205
List< int > sockets
Definition: Card.cs:43
AIAct SetAI(AIAct g)
Definition: Chara.cs:8045
bool HasNoGoal
Definition: Chara.cs:821
RectTransform pivot
Definition: DropdownGrid.cs:20
Definition: ELayer.cs:4
static Chara pc
Definition: ELayer.cs:15
static Player player
Definition: ELayer.cs:13
static SourceManager sources
Definition: ELayer.cs:37
static UI ui
Definition: ELayer.cs:21
Dictionary< int, Element > dict
void Remove(int id)
UIText textQualityInvalid
Definition: LayerCraft.cs:52
void RefreshInputNum()
Definition: LayerCraft.cs:445
void OnChangeIngredient()
Definition: LayerCraft.cs:406
static LayerCraft Instance
Definition: LayerCraft.cs:8
void RefreshQuality()
Definition: LayerCraft.cs:502
UIInputText moldInputNum
Definition: LayerCraft.cs:32
void OnClickCraft()
Definition: LayerCraft.cs:138
int wcount
Definition: LayerCraft.cs:64
ButtonGrid lastB
Definition: LayerCraft.cs:66
Thing product
Definition: LayerCraft.cs:20
override void OnEndCraft()
Definition: LayerCraft.cs:214
void RefreshRecipe(bool first)
Definition: LayerCraft.cs:411
void RefreshProduct()
Definition: LayerCraft.cs:455
void WaitUntilIdle()
Definition: LayerCraft.cs:238
Window windowList
Definition: LayerCraft.cs:36
Image imageQualityReq
Definition: LayerCraft.cs:56
void RefreshInfo()
Definition: LayerCraft.cs:268
void SetFactory(Thing t)
Definition: LayerCraft.cs:106
void OnClickExamine()
Definition: LayerCraft.cs:506
UIButton toggleRepeat
Definition: LayerCraft.cs:24
void OnCompleteCraft()
Definition: LayerCraft.cs:219
UIButton buttonTrack
Definition: LayerCraft.cs:28
UIButton buttonAutoRefuel
Definition: LayerCraft.cs:46
void Update()
Definition: LayerCraft.cs:247
void RefreshTrackButton()
Definition: LayerCraft.cs:434
Image imageQualityCurrent
Definition: LayerCraft.cs:58
bool pickaxeCrafted
Definition: LayerCraft.cs:40
UIButton toggleCraftTo
Definition: LayerCraft.cs:26
override void ClearButtons()
Definition: LayerCraft.cs:75
UIDynamicList list
Definition: LayerCraft.cs:10
override void OnKill()
Definition: LayerCraft.cs:92
override void OnAfterInit()
Definition: LayerCraft.cs:85
UIInputText inputNum
Definition: LayerCraft.cs:30
Vector3 posInfo
Definition: LayerCraft.cs:16
override string GetTextHeader(Window window)
Definition: LayerCraft.cs:80
List< RecipeSource > newRecipes
Definition: LayerCraft.cs:34
float waitComplete
Definition: LayerCraft.cs:60
Transform transFuel
Definition: LayerCraft.cs:48
Recipe recipe
Definition: LayerCraft.cs:22
float qualityBarWidth
Definition: LayerCraft.cs:62
override void RefreshCurrentGrid()
Definition: LayerCraft.cs:70
bool showInfo
Definition: LayerCraft.cs:38
override List< Thing > GetTargets()
Definition: LayerCraft.cs:196
Thing factory
Definition: LayerCraft.cs:18
UIButton buttonRefuel
Definition: LayerCraft.cs:44
bool IsQualityMet()
Definition: LayerCraft.cs:497
UIText textQualityValid
Definition: LayerCraft.cs:54
UIRecipeInfo info1
Definition: LayerCraft.cs:12
void RefreshCategory(string cat, bool first=false)
Definition: LayerCraft.cs:281
UIText textFuel
Definition: LayerCraft.cs:50
UIRecipeInfo info2
Definition: LayerCraft.cs:14
override int GetReqIngredient(int index)
Definition: LayerCraft.cs:209
bool tabBuilt
Definition: LayerCraft.cs:68
bool workbenchCrafted
Definition: LayerCraft.cs:42
static LayerDragGrid Create(InvOwnerDraglet owner, bool refuelFromLayerDragGrid=false)
bool isDestroyed
Definition: Layer.cs:98
List< Window > windows
Definition: Layer.cs:116
virtual void Close()
Definition: Layer.cs:463
Layer SetOnKill(Action action)
Definition: Layer.cs:579
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Dictionary< string, string > lastRecipes
Definition: Player.cs:850
RecipeManager recipes
Definition: Player.cs:898
static void BuildList()
List< RecipeSource > ListSources(Thing factory, List< RecipeSource > newRecipes=null)
HashSet< string > hoveredRecipes
Definition: Recipe.cs:7
string id
Definition: Recipe.cs:161
int GetMaxCount()
Definition: Recipe.cs:913
void SaveLastIngredients()
Definition: Recipe.cs:975
int GetSortVal()
Definition: Recipe.cs:944
List< Ingredient > ingredients
Definition: Recipe.cs:164
QuestTrackCraft GetQuestTrack()
Definition: Recipe.cs:986
static Recipe Create(RecipeSource _source, int idMat=-1, Thing ing=null)
Definition: Recipe.cs:308
void ToggleTrack(QuestTrackCraft quest)
Definition: Recipe.cs:1000
virtual void OnChangeIngredient()
Definition: Recipe.cs:532
virtual Thing Craft(BlessedState blessed, bool sound=false, List< Thing > ings=null, TraitCrafter crafter=null, bool model=false)
Definition: Recipe.cs:536
bool HasFirstTimeBonus()
Definition: Recipe.cs:950
int idSkin
Definition: Recipe.cs:181
virtual void BuildIngredientList()
Definition: Recipe.cs:509
bool IsChildOf(string id)
SourceCategory categories
Definition: Thing.cs:8
override void WriteNote(UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
Definition: Thing.cs:837
Definition: Trait.cs:7
bool IsRequireFuel
Definition: Trait.cs:451
virtual int MaxFuel
Definition: Trait.cs:436
static TraitSelfFactory SelfFactory
Definition: Trait.cs:24
static void Play(string idStep)
Definition: Tutorial.cs:7
Image icon
Definition: UIButton.cs:110
void SetToggle(bool isOn, Action< bool > onToggle=null)
Definition: UIButton.cs:341
override void List()
List< Row > rows
List< object > objects
void Scroll(int index=0)
override void Redraw()
override void Add(object o)
bool Select(object o, bool invoke=false)
void SetMinMax(int _min, int _max)
Definition: UIInputText.cs:74
void Validate()
Definition: UIInputText.cs:113
Definition: UIList.cs:9
SortMode
Definition: UIList.cs:27
void RefreshBalance()
void SetRecipe(Recipe r)
ButtonGrid buttonProduct
Definition: UIRecipeInfo.cs:66
DropdownGrid ddList
Definition: UIRecipeInfo.cs:62
Recipe recipe
Definition: UIRecipeInfo.cs:32
Definition: UIText.cs:6
Definition: Window.cs:13
UISelectableGroup groupTab
Definition: Window.cs:658
void SetInteractable(bool enable, float alpha=0.5f)
Definition: Window.cs:1525
void BuildTabs(int index=-1)
Definition: Window.cs:1396
Setting.Tab AddTab(string idLang, UIContent content=null, Action action=null, Sprite sprite=null, string langTooltip=null)
Definition: Window.cs:1443
NoteMode
Definition: IInspect.cs:7