Elin Decompiled Documentation EA 23.130 Nightly
Loading...
Searching...
No Matches
ClassExtension.cs
Go to the documentation of this file.
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.IO;
5using System.Linq;
6using System.Reflection;
7using System.Text;
8using Pluralize.NET;
9using UnityEngine;
10using UnityEngine.Events;
11using UnityEngine.UI;
12
13public static class ClassExtension
14{
15 private static Vector3 vector3;
16
17 public static IPluralize pluralizer = new Pluralizer();
18
19 public static string lang(this string s)
20 {
21 return Lang.Get(s);
22 }
23
24 public static string langPlural(this string s, int i)
25 {
26 string text = Lang.Get(s);
27 return Lang.Parse((i <= 1 || !Lang.setting.pluralize) ? text : pluralizer.Pluralize(text), i.ToString() ?? "");
28 }
29
30 public static string lang(this string s, string ref1, string ref2 = null, string ref3 = null, string ref4 = null, string ref5 = null)
31 {
32 return Lang.Parse(s, ref1, ref2, ref3, ref4, ref5);
33 }
34
35 public static string[] langList(this string s)
36 {
37 return Lang.GetList(s);
38 }
39
40 public static string langGame(this string s)
41 {
42 return Lang.Game.Get(s);
43 }
44
45 public static string langGame(this string s, string ref1, string ref2 = null, string ref3 = null, string ref4 = null)
46 {
47 return Lang.Game.Parse(s, ref1, ref2, ref3, ref4);
48 }
49
50 public static string Parentheses(this string str)
51 {
52 return "(" + str + ")";
53 }
54
55 public static string Bracket(this string str, int type = 0)
56 {
57 return type switch
58 {
59 -1 => str,
60 1 => "「" + str + "」",
61 2 => "『" + str + "』",
62 3 => "《" + str + "》",
63 4 => "(" + str + ")",
64 _ => "_bracketLeft".lang() + str + "_bracketRight".lang(),
65 };
66 }
67
68 public static byte[] ToBytes(this BitArray bits)
69 {
70 byte[] array = new byte[(bits.Length - 1) / 8 + 1];
71 bits.CopyTo(array, 0);
72 return array;
73 }
74
75 public static bool GetBit(this byte pByte, int bitNo)
76 {
77 return (pByte & (1 << bitNo)) != 0;
78 }
79
80 public static byte SetBit(this byte pByte, int bitNo, bool value)
81 {
82 if (!value)
83 {
84 return Convert.ToByte(pByte & ~(1 << bitNo));
85 }
86 return Convert.ToByte(pByte | (1 << bitNo));
87 }
88
89 public static int ToInt3(this float a)
90 {
91 return (int)(a * 1000f);
92 }
93
94 public static float FromInt3(this int a)
95 {
96 return (float)a / 1000f;
97 }
98
99 public static int ToInt2(this float a)
100 {
101 return (int)(a * 100f);
102 }
103
104 public static float FromInt2(this int a)
105 {
106 return (float)a / 100f;
107 }
108
109 public static int Minimum(this int i)
110 {
111 if (i != 0)
112 {
113 if (i <= 0)
114 {
115 return -1;
116 }
117 return 1;
118 }
119 return 0;
120 }
121
122 public static bool IsNull(this object o)
123 {
124 return o == null;
125 }
126
127 public static bool IsOn(this int data, int digit)
128 {
129 BitArray32 bitArray = default(BitArray32);
130 bitArray.SetInt(data);
131 return bitArray[digit];
132 }
133
134 public static T ToEnum<T>(this int value)
135 {
136 return (T)Enum.ToObject(typeof(T), value);
137 }
138
139 public static T ToEnum<T>(this long value)
140 {
141 return (T)Enum.ToObject(typeof(T), value);
142 }
143
144 public static T ToEnum<T>(this string value, bool ignoreCase = true)
145 {
146 return (T)Enum.Parse(typeof(T), value, ignoreCase);
147 }
148
149 public static Type ToType(this string value)
150 {
151 return Type.GetType("Elona." + value + ", Assembly-CSharp");
152 }
153
154 public static T NextEnum<T>(this T src) where T : struct
155 {
156 return ((T[])Enum.GetValues(src.GetType())).NextItem(src);
157 }
158
159 public static T PrevEnum<T>(this T src) where T : struct
160 {
161 return ((T[])Enum.GetValues(src.GetType())).PrevItem(src);
162 }
163
164 public static bool Within(this int v, int v2, int range)
165 {
166 if (v - v2 >= range)
167 {
168 return v - v2 < -range;
169 }
170 return true;
171 }
172
173 public static bool Within(this byte v, byte v2, byte range)
174 {
175 if (v - v2 >= range)
176 {
177 return v - v2 < -range;
178 }
179 return true;
180 }
181
182 public static int Clamp(this int v, int min, int max, bool loop = false)
183 {
184 if (v < min)
185 {
186 v = ((!loop) ? min : max);
187 }
188 else if (v > max)
189 {
190 v = ((!loop) ? max : min);
191 }
192 return v;
193 }
194
195 public static int ClampMin(this int v, int min)
196 {
197 if (v >= min)
198 {
199 return v;
200 }
201 return min;
202 }
203
204 public static int ClampMax(this int v, int max)
205 {
206 if (v <= max)
207 {
208 return v;
209 }
210 return max;
211 }
212
213 public static T ToField<T>(this string s, object o)
214 {
215 return (T)o.GetType().GetField(s).GetValue(o);
216 }
217
218 public static bool HasField<T>(this object o, string name)
219 {
220 FieldInfo field = o.GetType().GetField(name);
221 if (field != null)
222 {
223 return typeof(T).IsAssignableFrom(field.FieldType);
224 }
225 return false;
226 }
227
228 public static T GetField<T>(this object o, string name)
229 {
230 return (T)o.GetType().GetField(name).GetValue(o);
231 }
232
233 public static void SetField<T>(this object o, string name, T value)
234 {
235 o.GetType().GetField(name).SetValue(o, value);
236 }
237
238 public static T GetProperty<T>(this object o, string name)
239 {
240 return (T)o.GetType().GetProperty(name).GetValue(o);
241 }
242
243 public static void SetProperty<T>(this object o, string name, T value)
244 {
245 o.GetType().GetProperty(name).SetValue(o, value);
246 }
247
248 public static void Sort<T>(this IList<T> list, Comparison<T> comparison)
249 {
250 if (list is List<T>)
251 {
252 ((List<T>)list).Sort(comparison);
253 return;
254 }
255 List<T> list2 = new List<T>(list);
256 list2.Sort(comparison);
257 for (int i = 0; i < list.Count; i++)
258 {
259 list[i] = list2[i];
260 }
261 }
262
263 public static TValue TryGet<TValue>(this IList<TValue> array, int index, int defIndex = -1)
264 {
265 if (array.Count != 0)
266 {
267 if (index >= array.Count)
268 {
269 if (defIndex != -1)
270 {
271 if (array.Count <= defIndex)
272 {
273 return array[Mathf.Max(0, array.Count - 1)];
274 }
275 return array[defIndex];
276 }
277 return array[Mathf.Max(0, array.Count - 1)];
278 }
279 return array[Math.Max(0, index)];
280 }
281 return default(TValue);
282 }
283
284 public static TValue TryGet<TValue>(this IList<TValue> array, int index, bool returnNull)
285 {
286 if (index >= array.Count)
287 {
288 return default(TValue);
289 }
290 return array[index];
291 }
292
293 public static bool IsEmpty(this Array array)
294 {
295 if (array != null)
296 {
297 return array.Length == 0;
298 }
299 return true;
300 }
301
302 public static int IndexOf(this IList<Component> list, GameObject go)
303 {
304 if (!go)
305 {
306 return -1;
307 }
308 for (int i = 0; i < list.Count; i++)
309 {
310 if (list[i].gameObject == go)
311 {
312 return i;
313 }
314 }
315 return -1;
316 }
317
318 public static TValue Move<TValue>(this IList<TValue> list, TValue target, int a)
319 {
320 int num = list.IndexOf(target);
321 int num2 = num + a;
322 if (num2 < 0)
323 {
324 num2 = list.Count - 1;
325 }
326 if (num2 >= list.Count)
327 {
328 num2 = 0;
329 }
330 list.Remove(target);
331 list.Insert(num2, target);
332 return list[num];
333 }
334
335 public static IList<TValue> Copy<TValue>(this IList<TValue> list)
336 {
337 return list.ToList();
338 }
339
340 public static void Each<TValue>(this IList<TValue> list, Action<TValue> action)
341 {
342 for (int num = list.Count - 1; num >= 0; num--)
343 {
344 action(list[num]);
345 }
346 }
347
348 public static IList<TValue> Shuffle<TValue>(this IList<TValue> list)
349 {
350 int num = list.Count;
351 while (num > 1)
352 {
353 int index = Rand._random.Next(num);
354 num--;
355 TValue value = list[num];
356 list[num] = list[index];
357 list[index] = value;
358 }
359 return list;
360 }
361
362 public static TValue TryGetValue<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key, TValue fallback = default(TValue))
363 {
364 TValue value = default(TValue);
365 if (key != null && source.TryGetValue(key, out value))
366 {
367 return value;
368 }
369 return fallback;
370 }
371
372 public static TValue TryGetValue<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key, TKey key_fallback)
373 {
374 TValue value = default(TValue);
375 if (key != null && source.TryGetValue(key, out value))
376 {
377 return value;
378 }
379 return source[key_fallback];
380 }
381
382 public static TValue GetOrCreate<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, Func<TValue> func = null)
383 {
384 TValue val = dict.TryGetValue(key);
385 if (val == null)
386 {
387 val = ((func != null) ? func() : Activator.CreateInstance<TValue>());
388 dict.Add(key, val);
389 }
390 return val;
391 }
392
393 public static TKey[] CopyKeys<TKey, TValue>(this IDictionary<TKey, TValue> dict)
394 {
395 TKey[] array = new TKey[dict.Keys.Count];
396 dict.Keys.CopyTo(array, 0);
397 return array;
398 }
399
400 public static TValue[] CopyValues<TKey, TValue>(this IDictionary<TKey, TValue> dict)
401 {
402 TValue[] array = new TValue[dict.Keys.Count];
403 dict.Values.CopyTo(array, 0);
404 return array;
405 }
406
407 public static T RandomItem<T>(this IEnumerable<T> ie)
408 {
409 int num = ie.Count();
410 if (num == 0)
411 {
412 return default(T);
413 }
414 return ie.ElementAt(Rand.rnd(num));
415 }
416
417 public static TValue RandomItem<TKey, TValue>(this IDictionary<TKey, TValue> source)
418 {
419 if (source.Count != 0)
420 {
421 return source.ElementAt(Rand.rnd(source.Count)).Value;
422 }
423 return default(TValue);
424 }
425
426 public static TValue RandomItem<TValue>(this IList<TValue> source)
427 {
428 if (source.Count != 0)
429 {
430 return source[Rand.rnd(source.Count)];
431 }
432 return default(TValue);
433 }
434
435 public static TValue RandomItem<TValue>(this IList<TValue> source, TValue exclude)
436 {
437 return source.RandomItem(source.IndexOf(exclude));
438 }
439
440 public static TValue RandomItem<TValue>(this IList<TValue> source, int exclude)
441 {
442 if (source.Count > 1)
443 {
444 int num;
445 do
446 {
447 num = Rand.rnd(source.Count);
448 }
449 while (num == exclude);
450 return source[num];
451 }
452 if (source.Count == 1)
453 {
454 return source[0];
455 }
456 return default(TValue);
457 }
458
459 public static TValue RandomItem<TValue>(this IList<TValue> source, Func<TValue, bool> funcValid, TValue defaultValue = default(TValue))
460 {
461 for (int i = 0; i < 100; i++)
462 {
463 TValue val = source[Rand.rnd(source.Count)];
464 if (funcValid(val))
465 {
466 return val;
467 }
468 }
469 return defaultValue;
470 }
471
472 public static TValue RandomItemWeighted<TValue>(this IList<TValue> source, Func<TValue, float> getWeight)
473 {
474 if (source.Count == 0)
475 {
476 return default(TValue);
477 }
478 if (source.Count == 1)
479 {
480 return source[0];
481 }
482 float num = 0f;
483 foreach (TValue item in source)
484 {
485 num += getWeight(item);
486 }
487 float num2 = Rand.Range(0f, num);
488 num = 0f;
489 foreach (TValue item2 in source)
490 {
491 num += getWeight(item2);
492 if (num2 < num)
493 {
494 return item2;
495 }
496 }
497 return source.First();
498 }
499
500 public static TValue Remainder<TValue>(this IList<TValue> source, int divider)
501 {
502 if (source.Count != 0)
503 {
504 return source[divider % source.Count];
505 }
506 return default(TValue);
507 }
508
509 public static TValue FirstItem<TKey, TValue>(this IDictionary<TKey, TValue> source)
510 {
511 if (source == null)
512 {
513 return default(TValue);
514 }
515 return source[source.First().Key];
516 }
517
518 public static TValue LastItem<TValue>(this IList<TValue> source)
519 {
520 if (source.Count != 0)
521 {
522 return source[source.Count - 1];
523 }
524 return default(TValue);
525 }
526
527 public static TValue NextItem<TValue>(this IList<TValue> source, ref int index)
528 {
529 index++;
530 if (index >= source.Count)
531 {
532 index = 0;
533 }
534 if (source.Count != 0)
535 {
536 return source[index];
537 }
538 return default(TValue);
539 }
540
541 public static int NextIndex<TValue>(this IList<TValue> source, TValue val)
542 {
543 if (val == null)
544 {
545 return 0;
546 }
547 int num = source.IndexOf(val) + 1;
548 if (num >= source.Count)
549 {
550 num = 0;
551 }
552 return num;
553 }
554
555 public static TValue NextItem<TValue>(this IList<TValue> source, TValue val)
556 {
557 int num = source.IndexOf(val) + 1;
558 if (num >= source.Count)
559 {
560 num = 0;
561 }
562 if (source.Count != 0)
563 {
564 return source[num];
565 }
566 return default(TValue);
567 }
568
569 public static TValue PrevItem<TValue>(this IList<TValue> source, TValue val)
570 {
571 int num = source.IndexOf(val) - 1;
572 if (num < 0)
573 {
574 num = source.Count - 1;
575 }
576 if (source.Count != 0)
577 {
578 return source[num];
579 }
580 return default(TValue);
581 }
582
583 public static TValue Clamp<TValue>(this IList<TValue> source, int i)
584 {
585 if (i < 0)
586 {
587 i = 0;
588 }
589 else if (i >= source.Count)
590 {
591 i = source.Count - 1;
592 }
593 return source[i];
594 }
595
596 public static List<T> GetList<T>(this IDictionary source)
597 {
598 List<T> list = new List<T>();
599 foreach (object value in source.Values)
600 {
601 if (value is T)
602 {
603 list.Add((T)value);
604 }
605 }
606 return list;
607 }
608
609 public static void ToDictionary<T>(this IList<UPair<T>> list, ref Dictionary<string, T> dic)
610 {
611 dic = new Dictionary<string, T>();
612 for (int i = 0; i < list.Count; i++)
613 {
614 dic.Add(list[i].name, list[i].value);
615 }
616 }
617
618 public static T FindMax<T>(this List<T> list, Func<T, int> func)
619 {
620 int num = int.MinValue;
621 T result = default(T);
622 foreach (T item in list)
623 {
624 int num2 = func(item);
625 if (num2 > num)
626 {
627 num = num2;
628 result = item;
629 }
630 }
631 return result;
632 }
633
634 public static void Set<T1, T2>(this Dictionary<T1, T2> dic, Dictionary<T1, T2> from)
635 {
636 dic.Clear();
637 foreach (KeyValuePair<T1, T2> item in from)
638 {
639 dic[item.Key] = item.Value;
640 }
641 }
642
643 public static int Calc(this string str, int power = 0, int ele = 0, int p2 = 0)
644 {
645 return Cal.Calcuate(str.Replace("p2", p2.ToString() ?? "").Replace("p", power.ToString() ?? "").Replace("e", ele.ToString() ?? ""));
646 }
647
648 public static int ToInt<T>(this string str)
649 {
650 return str.ToInt(typeof(T));
651 }
652
653 public static int ToInt(this string str, Type type)
654 {
655 FieldInfo field = type.GetField(str, BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy);
656 if (field == null)
657 {
658 Debug.LogError("Field is null:" + str + "/" + type);
659 return -1;
660 }
661 return (int)field.GetValue(null);
662 }
663
664 public static int ToInt(this string str)
665 {
666 if (int.TryParse(str, out var result))
667 {
668 return result;
669 }
670 return 0;
671 }
672
673 public static float ToFloat(this string str)
674 {
675 float result = 0f;
676 try
677 {
678 if (!float.TryParse(str, out result))
679 {
680 Debug.Log("exception: ToFlat1" + str);
681 result = 1f;
682 }
683 }
684 catch
685 {
686 Debug.Log("exception: ToFlat2" + str);
687 result = 1f;
688 }
689 return result;
690 }
691
692 public static string StripLastPun(this string str)
693 {
694 if (str != null)
695 {
696 return str.TrimEnd(Lang.words.period);
697 }
698 return str;
699 }
700
701 public static string StripPun(this string str, bool stripComma, bool insertSpaceForComma = false)
702 {
703 StringBuilder stringBuilder = new StringBuilder();
704 foreach (char c in str)
705 {
706 if (c == Lang.words.comma)
707 {
708 if (stripComma)
709 {
710 if (insertSpaceForComma)
711 {
712 stringBuilder.Append('\u3000');
713 }
714 }
715 else
716 {
717 stringBuilder.Append(c);
718 }
719 }
720 else if (c != Lang.words.period)
721 {
722 stringBuilder.Append(c);
723 }
724 }
725 return stringBuilder.ToString();
726 }
727
728 public static string Repeat(this string str, int count)
729 {
730 StringBuilder stringBuilder = new StringBuilder();
731 for (int i = 0; i < Mathf.Abs(count); i++)
732 {
733 stringBuilder.Append(str);
734 }
735 return stringBuilder.ToString();
736 }
737
738 public static string StripBrackets(this string str)
739 {
740 return str.Replace("\"", "").Replace("「", "").Replace("」", "")
741 .Replace("“", "")
742 .Replace("\"", "");
743 }
744
745 public static string TryAddExtension(this string s, string ext)
746 {
747 if (!s.Contains("." + ext))
748 {
749 return s + "." + ext;
750 }
751 return s;
752 }
753
754 public static bool IsEmpty(this string str)
755 {
756 if (str != null)
757 {
758 return str == "";
759 }
760 return true;
761 }
762
763 public static string IsEmpty(this string str, string defaultStr)
764 {
765 if (str != null && !(str == ""))
766 {
767 return str;
768 }
769 return defaultStr;
770 }
771
772 public static string TrimNewLines(this string text)
773 {
774 while (text.EndsWith(Environment.NewLine))
775 {
776 text = text.Substring(0, text.Length - Environment.NewLine.Length);
777 }
778 return text;
779 }
780
781 public static int[] SplitToInts(this string str, char separator)
782 {
783 string[] array = str.Split(separator);
784 int[] array2 = new int[array.Length];
785 for (int i = 0; i < array.Length; i++)
786 {
787 array2[i] = int.Parse(array[i]);
788 }
789 return array2;
790 }
791
792 public static string[] SplitNewline(this string str)
793 {
794 return str.Split(Environment.NewLine.ToCharArray());
795 }
796
797 public static bool Contains(this string[] strs, string id)
798 {
799 if (strs == null || strs.Length == 0)
800 {
801 return false;
802 }
803 for (int i = 0; i < strs.Length; i++)
804 {
805 if (strs[i] == id)
806 {
807 return true;
808 }
809 }
810 return false;
811 }
812
813 public static string Evalute(this string[] array, float val)
814 {
815 return array[(int)Mathf.Clamp((float)(array.Length - 1) * val, 0f, array.Length - 1)];
816 }
817
818 public static string ToShortNumber(this int a)
819 {
820 string text;
821 if (a < 1000000)
822 {
823 if (a >= 1000)
824 {
825 return a / 1000 + "K";
826 }
827 text = a.ToString();
828 if (text == null)
829 {
830 return "";
831 }
832 }
833 else
834 {
835 text = a / 1000000 + "M";
836 }
837 return text;
838 }
839
840 public static string ToFormat(this int a)
841 {
842 return $"{a:#,0}";
843 }
844
845 public static string ToFormat(this long a)
846 {
847 return $"{a:#,0}";
848 }
849
850 public static string ToText(this int a, bool skipIfZero = true)
851 {
852 object obj;
853 if (!(a == 0 && skipIfZero))
854 {
855 if (a >= 0)
856 {
857 return "+" + a;
858 }
859 obj = a.ToString();
860 if (obj == null)
861 {
862 return "";
863 }
864 }
865 else
866 {
867 obj = "";
868 }
869 return (string)obj;
870 }
871
872 public static string TagColor(this string s, Color c, string txt)
873 {
874 return s + "<color=" + c.ToHex() + ">" + txt + "</color>";
875 }
876
877 public static string TagColor(this string s, Color c)
878 {
879 return "<color=" + c.ToHex() + ">" + s + "</color>";
880 }
881
882 public static string TagSize(this string s, string txt, int size)
883 {
884 return s + "<size=" + size + ">" + txt + "</size>";
885 }
886
887 public static string TagSize(this string s, int size)
888 {
889 return "<size=" + size + ">" + s + "</size>";
890 }
891
892 public static string GetFullFileNameWithoutExtension(this FileInfo fileInfo)
893 {
894 return fileInfo.Directory.FullName + "/" + Path.GetFileNameWithoutExtension(fileInfo.Name);
895 }
896
897 public static string GetFullFileNameWithoutExtension(this string path)
898 {
899 return new FileInfo(path).GetFullFileNameWithoutExtension();
900 }
901
902 public static string AddArticle(this string s)
903 {
904 if (!Lang.setting.addArticle || s.Length < 1)
905 {
906 return s;
907 }
908 char c = s[0];
909 s = ((c == 'a' || c == 'i' || c == 'u' || c == 'e' || c == 'o') ? "an " : "a ") + s;
910 return s;
911 }
912
913 public static string AddArticle(this string s, int num, ArticleStyle style = ArticleStyle.Default, string replace = null)
914 {
915 if (!Lang.setting.addArticle || s.Length < 1)
916 {
917 return s;
918 }
919 char c = s[0];
920 string text = ((num >= 2) ? (num.ToFormat() + " ") : ((c == 'a' || c == 'i' || c == 'u' || c == 'e' || c == 'o') ? "an " : "a "));
921 if (num >= 2 && Lang.setting.pluralize)
922 {
923 s = ((replace.IsEmpty() || !s.Contains(replace) || s.Contains("limestone stone")) ? pluralizer.Pluralize(s) : s.Replace(replace, pluralizer.Pluralize(replace)));
924 }
925 return style switch
926 {
927 ArticleStyle.The => "_the".lang().ToTitleCase() + " " + ((num > 1) ? (num + " ") : "") + s,
928 ArticleStyle.None => ((num > 1) ? (num.ToFormat() + " ") : "") + s.ToTitleCase(),
929 _ => text + s,
930 };
931 }
932
933 public static string ToTitleCase(this string s, bool wholeText = false)
934 {
936 {
937 return s;
938 }
939 char[] array = s.ToCharArray();
940 bool flag = true;
941 for (int i = 0; i < array.Length; i++)
942 {
943 if (flag)
944 {
945 array[i] = char.ToUpper(array[i]);
946 flag = false;
947 }
948 if (!wholeText)
949 {
950 break;
951 }
952 if (array[i] == ' ')
953 {
954 flag = true;
955 }
956 }
957 return new string(array);
958 }
959
960 public static void LoopTail<T>(this List<T> list, bool vertical = false) where T : Selectable
961 {
962 if (list.Count > 1)
963 {
964 Navigation navigation = list[0].navigation;
965 Navigation navigation2 = list[list.Count - 1].navigation;
966 if (vertical)
967 {
968 navigation.selectOnUp = list[list.Count - 1];
969 navigation2.selectOnDown = list[0];
970 }
971 else
972 {
973 navigation.selectOnLeft = list[list.Count - 1];
974 navigation2.selectOnRight = list[0];
975 }
976 list[0].navigation = navigation;
977 list[list.Count - 1].navigation = navigation2;
978 }
979 }
980
981 public static void SetNavigation(this Component a, Component b, bool vertical = false)
982 {
983 if (!a || !b)
984 {
985 return;
986 }
987 Selectable component = a.GetComponent<Selectable>();
988 Selectable component2 = b.GetComponent<Selectable>();
989 if ((bool)component && (bool)component2)
990 {
991 Navigation navigation = component.navigation;
992 Navigation navigation2 = component2.navigation;
993 if (vertical)
994 {
995 navigation.selectOnUp = component2;
996 navigation2.selectOnDown = component;
997 }
998 else
999 {
1000 navigation.selectOnLeft = component2;
1001 navigation2.selectOnRight = component;
1002 }
1003 component.navigation = navigation;
1004 component2.navigation = navigation2;
1005 }
1006 }
1007
1008 public static void LoopSelectable(this List<Selectable> sels, bool vertical = true, bool horizonal = true, bool asGroup = true)
1009 {
1010 for (int i = 0; i < sels.Count; i++)
1011 {
1012 Selectable selectable = sels[i];
1013 Selectable selectable2 = sels[0];
1014 Navigation navigation = selectable.navigation;
1015 if (horizonal)
1016 {
1017 navigation.selectOnRight = ((i + 1 < sels.Count) ? sels[i + 1] : selectable2);
1018 }
1019 if (asGroup)
1020 {
1021 for (int j = i + 1; j < sels.Count; j++)
1022 {
1023 if (sels[j].transform.position.y < selectable.transform.position.y)
1024 {
1025 selectable2 = sels[j];
1026 break;
1027 }
1028 }
1029 }
1030 else
1031 {
1032 selectable2 = ((i + 1 < sels.Count) ? sels[i + 1] : selectable2);
1033 }
1034 if (vertical)
1035 {
1036 navigation.selectOnDown = selectable2;
1037 }
1038 selectable.navigation = navigation;
1039 }
1040 for (int num = sels.Count - 1; num >= 0; num--)
1041 {
1042 Selectable selectable3 = sels[num];
1043 Selectable selectable4 = sels[sels.Count - 1];
1044 Navigation navigation2 = selectable3.navigation;
1045 if (horizonal)
1046 {
1047 navigation2.selectOnLeft = ((num > 0) ? sels[num - 1] : selectable4);
1048 }
1049 if (asGroup)
1050 {
1051 int num2 = sels.Count - 1;
1052 for (int num3 = num - 1; num3 >= 0; num3--)
1053 {
1054 if (sels[num3].transform.position.y > selectable3.transform.position.y)
1055 {
1056 num2 = num3;
1057 break;
1058 }
1059 }
1060 int num4 = num2;
1061 while (num4 >= 0 && !(sels[num4].transform.position.y > sels[num2].transform.position.y))
1062 {
1063 selectable4 = sels[num4];
1064 num4--;
1065 }
1066 }
1067 else
1068 {
1069 selectable4 = ((num > 0) ? sels[num - 1] : selectable4);
1070 }
1071 if (vertical)
1072 {
1073 navigation2.selectOnUp = ((selectable4 == selectable3) ? sels[sels.Count - 1] : selectable4);
1074 }
1075 navigation2.mode = Navigation.Mode.Explicit;
1076 selectable3.navigation = navigation2;
1077 }
1078 }
1079
1080 public static void LoopSelectable(this Transform l, bool vertical = true, bool horizonal = true, bool asGroup = true)
1081 {
1082 List<Selectable> list = l.GetComponentsInChildren<Selectable>().ToList();
1083 for (int num = list.Count - 1; num >= 0; num--)
1084 {
1085 if (!list[num].interactable || list[num].navigation.mode == Navigation.Mode.None)
1086 {
1087 list.RemoveAt(num);
1088 }
1089 }
1090 list.LoopSelectable(vertical, horizonal, asGroup);
1091 }
1092
1093 public static Color ToColor(this string s)
1094 {
1095 Color color = Color.white;
1096 ColorUtility.TryParseHtmlString("#" + s, out color);
1097 return color;
1098 }
1099
1100 public static void SetAlpha(this Image c, float a)
1101 {
1102 c.color = new Color(c.color.r, c.color.g, c.color.b, a);
1103 }
1104
1105 public static void SetAlpha(this RawImage c, float a)
1106 {
1107 c.color = new Color(c.color.r, c.color.g, c.color.b, a);
1108 }
1109
1110 public static Color SetAlpha(this Color c, float a)
1111 {
1112 c.a = a;
1113 return c;
1114 }
1115
1116 public static Color Multiply(this Color c, float mtp, float add)
1117 {
1118 return new Color(c.r * mtp + add, c.g * mtp + add, c.b * mtp + add, c.a);
1119 }
1120
1121 public static string Tag(this Color c)
1122 {
1123 return "<color=" + $"#{(int)(c.r * 255f):X2}{(int)(c.g * 255f):X2}{(int)(c.b * 255f):X2}" + ">";
1124 }
1125
1126 public static string ToHex(this Color c)
1127 {
1128 return $"#{(int)(c.r * 255f):X2}{(int)(c.g * 255f):X2}{(int)(c.b * 255f):X2}";
1129 }
1130
1131 public static void SetOnClick(this Button b, Action action)
1132 {
1133 b.onClick.RemoveAllListeners();
1134 b.onClick.AddListener(delegate
1135 {
1136 action();
1137 });
1138 }
1139
1140 public static void SetListener(this Button.ButtonClickedEvent e, Action action)
1141 {
1142 e.RemoveAllListeners();
1143 e.AddListener(delegate
1144 {
1145 action();
1146 });
1147 }
1148
1149 public static void SetAlpha(this Text text, float aloha = 1f)
1150 {
1151 text.color = new Color(text.color.r, text.color.g, text.color.b, aloha);
1152 }
1153
1154 public static void SetSlider(this Slider slider, float value, Func<float, string> action, bool notify)
1155 {
1156 slider.SetSlider(value, action, -1, -1, notify);
1157 }
1158
1159 public static void SetSlider(this Slider slider, float value, Func<float, string> action, int min = -1, int max = -1, bool notify = true)
1160 {
1161 slider.onValueChanged.RemoveAllListeners();
1162 slider.onValueChanged.AddListener(delegate(float a)
1163 {
1164 slider.GetComponentInChildren<Text>(includeInactive: true).text = action(a);
1165 });
1166 if (min != -1)
1167 {
1168 slider.minValue = min;
1169 slider.maxValue = max;
1170 }
1171 if (notify)
1172 {
1173 slider.value = value;
1174 }
1175 else
1176 {
1177 slider.SetValueWithoutNotify(value);
1178 }
1179 slider.GetComponentInChildren<Text>(includeInactive: true).text = action(value);
1180 }
1181
1182 public static T GetOrCreate<T>(this Component t) where T : Component
1183 {
1184 T val = t.gameObject.GetComponent<T>();
1185 if (!val)
1186 {
1187 val = t.gameObject.AddComponent<T>();
1188 }
1189 return val;
1190 }
1191
1192 public static RectTransform Rect(this Component c)
1193 {
1194 return c.transform as RectTransform;
1195 }
1196
1197 public static void CopyRect(this RectTransform r, RectTransform t)
1198 {
1199 r.pivot = t.pivot;
1200 r.sizeDelta = t.sizeDelta;
1201 r.anchorMin = t.anchorMin;
1202 r.anchorMax = t.anchorMax;
1203 r.anchoredPosition = t.anchoredPosition;
1204 }
1205
1206 public static void ToggleActive(this Component c)
1207 {
1208 c.SetActive(!c.gameObject.activeSelf);
1209 }
1210
1211 public static void SetActive(this Component c, bool enable)
1212 {
1213 if (c.gameObject.activeSelf != enable)
1214 {
1215 c.gameObject.SetActive(enable);
1216 }
1217 }
1218
1219 public static void SetActive(this Component c, bool enable, Action<bool> onChangeState)
1220 {
1221 if (c.gameObject.activeSelf != enable)
1222 {
1223 c.gameObject.SetActive(enable);
1224 onChangeState(enable);
1225 }
1226 }
1227
1228 public static Selectable GetSelectable(this GameObject go)
1229 {
1230 return go.GetComponentInChildren<Selectable>();
1231 }
1232
1233 public static void SetLayerRecursively(this GameObject obj, int layer)
1234 {
1235 obj.layer = layer;
1236 foreach (Transform item in obj.transform)
1237 {
1238 item.gameObject.SetLayerRecursively(layer);
1239 }
1240 }
1241
1242 public static bool IsInteractable(this GameObject obj)
1243 {
1244 Selectable selectable = (obj ? obj.GetComponent<Selectable>() : null);
1245 if ((bool)selectable)
1246 {
1247 return selectable.interactable;
1248 }
1249 return false;
1250 }
1251
1252 public static bool IsChildOf(this GameObject c, GameObject root)
1253 {
1254 if (c.transform == root.transform)
1255 {
1256 return true;
1257 }
1258 if ((bool)c.transform.parent)
1259 {
1260 return c.transform.parent.gameObject.IsChildOf(root);
1261 }
1262 return false;
1263 }
1264
1265 public static bool IsPrefab(this Component c)
1266 {
1267 return c.gameObject.scene.name == null;
1268 }
1269
1270 public static T CreateMold<T>(this Component c, string name = null) where T : Component
1271 {
1272 T result = null;
1273 for (int i = 0; i < c.transform.childCount; i++)
1274 {
1275 T component = c.transform.GetChild(i).GetComponent<T>();
1276 if ((bool)component && (name.IsEmpty() || name == component.name))
1277 {
1278 component.gameObject.SetActive(value: false);
1279 result = component;
1280 break;
1281 }
1282 }
1283 c.DestroyChildren();
1284 return result;
1285 }
1286
1287 public static Transform Find(this Component c, string name = null)
1288 {
1289 return c.Find<Transform>(name);
1290 }
1291
1292 public static T Find<T>(this Component c, string name = null, bool recursive = false) where T : Component
1293 {
1294 if (recursive)
1295 {
1296 T[] componentsInChildren = c.transform.GetComponentsInChildren<T>();
1297 foreach (T val in componentsInChildren)
1298 {
1299 if (name == null || name == val.name)
1300 {
1301 return val;
1302 }
1303 }
1304 return null;
1305 }
1306 for (int j = 0; j < c.transform.childCount; j++)
1307 {
1308 T component = c.transform.GetChild(j).GetComponent<T>();
1309 if ((bool)component && (name == null || name == component.name))
1310 {
1311 return component;
1312 }
1313 }
1314 return null;
1315 }
1316
1317 public static GameObject FindTagInParents(this Component c, string tag, bool includeInactive = true)
1318 {
1319 Transform transform = c.transform;
1320 for (int i = 0; i < transform.childCount; i++)
1321 {
1322 Transform child = transform.GetChild(i);
1323 if ((includeInactive || child.gameObject.activeSelf) && child.tag == tag)
1324 {
1325 return child.gameObject;
1326 }
1327 }
1328 if ((bool)transform.parent)
1329 {
1330 return transform.parent.FindTagInParents(tag, includeInactive);
1331 }
1332 return null;
1333 }
1334
1335 public static T GetComponentInChildrenExcludSelf<T>(this Transform c) where T : Component
1336 {
1337 for (int i = 0; i < c.childCount; i++)
1338 {
1339 T component = c.GetChild(i).GetComponent<T>();
1340 if ((bool)component)
1341 {
1342 return component;
1343 }
1344 }
1345 return null;
1346 }
1347
1348 public static List<T> GetComponentsInDirectChildren<T>(this Transform comp, bool includeInactive = true) where T : Component
1349 {
1350 List<T> list = new List<T>();
1351 Transform transform = comp.transform;
1352 for (int i = 0; i < transform.childCount; i++)
1353 {
1354 T component = transform.GetChild(i).GetComponent<T>();
1355 if ((bool)component && (includeInactive || component.gameObject.activeInHierarchy))
1356 {
1357 list.Add(component);
1358 }
1359 }
1360 return list;
1361 }
1362
1363 public static List<T> GetComponentsInDirectChildren<T>(this Component comp, bool includeInactive = true) where T : Component
1364 {
1365 List<T> list = new List<T>();
1366 Transform transform = comp.transform;
1367 for (int i = 0; i < transform.childCount; i++)
1368 {
1369 T component = transform.GetChild(i).GetComponent<T>();
1370 if ((bool)component && (includeInactive || component.gameObject.activeInHierarchy))
1371 {
1372 list.Add(component);
1373 }
1374 }
1375 return list;
1376 }
1377
1378 public static T GetComponentInDirectChildren<T>(this Component comp) where T : Component
1379 {
1380 Transform transform = comp.transform;
1381 for (int i = 0; i < transform.childCount; i++)
1382 {
1383 T component = transform.GetChild(i).GetComponent<T>();
1384 if ((bool)component)
1385 {
1386 return component;
1387 }
1388 }
1389 return null;
1390 }
1391
1392 public static void DestroyChildren(this Component component, bool destroyInactive = false, bool ignoreDestroy = true)
1393 {
1394 if (!component || !component.transform)
1395 {
1396 Debug.LogWarning("DestroyChlidren:" + component);
1397 return;
1398 }
1399 for (int num = component.transform.childCount - 1; num >= 0; num--)
1400 {
1401 GameObject gameObject = component.transform.GetChild(num).gameObject;
1402 if ((!ignoreDestroy || !(gameObject.tag == "IgnoreDestroy")) && (destroyInactive || gameObject.activeSelf))
1403 {
1404 UnityEngine.Object.DestroyImmediate(gameObject);
1405 }
1406 }
1407 }
1408
1409 public static bool IsMouseOver(this RectTransform r, Camera cam)
1410 {
1411 return RectTransformUtility.RectangleContainsScreenPoint(r, Input.mousePosition, cam);
1412 }
1413
1414 public static void RebuildLayout(this Component c, bool recursive = false)
1415 {
1416 if (recursive)
1417 {
1418 foreach (Transform item in c.transform)
1419 {
1420 if (item is RectTransform)
1421 {
1422 item.RebuildLayout(recursive: true);
1423 }
1424 }
1425 }
1426 LayoutRebuilder.ForceRebuildLayoutImmediate(c.transform as RectTransform);
1427 }
1428
1429 public static void RebuildLayoutTo<T>(this Component c) where T : Component
1430 {
1431 c.RebuildLayout();
1432 if ((bool)c.transform.parent && !c.transform.parent.GetComponent<T>())
1433 {
1434 c.transform.parent.RebuildLayoutTo<T>();
1435 }
1436 }
1437
1438 public static void RebuildLayoutTo(this Component c, Component target)
1439 {
1440 c.RebuildLayout();
1441 if (!(c == target) && (bool)c.transform.parent)
1442 {
1443 c.transform.parent.RebuildLayoutTo(target);
1444 }
1445 }
1446
1447 public static void SetRect(this RectTransform r, float x, float y, float w, float h, float pivotX, float pivotY, float minX, float minY, float maxX, float maxY)
1448 {
1449 r.SetPivot(pivotX, pivotY);
1450 r.SetAnchor(minX, minY, maxX, maxY);
1451 if (w != -1f)
1452 {
1453 r.sizeDelta = new Vector2(w, h);
1454 }
1455 r.anchoredPosition = new Vector2((x == -1f) ? r.anchoredPosition.x : x, (y == -1f) ? r.anchoredPosition.y : y);
1456 }
1457
1458 public static void SetPivot(this RectTransform r, float x, float y)
1459 {
1460 r.pivot = new Vector2(x, y);
1461 }
1462
1463 public static void SetAnchor(this RectTransform r, float minX, float minY, float maxX, float maxY)
1464 {
1465 r.anchorMin = new Vector2(minX, minY);
1466 r.anchorMax = new Vector2(maxX, maxY);
1467 }
1468
1469 public static void _SetAnchor(this RectTransform _rect, RectPosition anchor)
1470 {
1471 switch (anchor)
1472 {
1473 case RectPosition.TopCenter:
1474 _rect.SetAnchor(0.5f, 1f, 0.5f, 1f);
1475 break;
1476 case RectPosition.BottomCenter:
1477 _rect.SetAnchor(0.5f, 0f, 0.5f, 0f);
1478 break;
1479 case RectPosition.TopLEFT:
1480 _rect.SetAnchor(0f, 1f, 0f, 1f);
1481 break;
1482 case RectPosition.TopRIGHT:
1483 _rect.SetAnchor(1f, 1f, 1f, 1f);
1484 break;
1485 case RectPosition.BottomLEFT:
1486 _rect.SetAnchor(0f, 0f, 0f, 0f);
1487 break;
1488 case RectPosition.BottomRIGHT:
1489 _rect.SetAnchor(1f, 0f, 1f, 0f);
1490 break;
1491 case RectPosition.Left:
1492 _rect.SetAnchor(0f, 0.5f, 0f, 0.5f);
1493 break;
1494 case RectPosition.Right:
1495 _rect.SetAnchor(1f, 0.5f, 1f, 0.5f);
1496 break;
1497 default:
1498 _rect.SetAnchor(0.5f, 0.5f, 0.5f, 0.5f);
1499 break;
1500 }
1501 }
1502
1503 public static void SetAnchor(this RectTransform _rect, RectPosition anchor = RectPosition.Auto)
1504 {
1505 Vector3 position = _rect.position;
1506 _rect._SetAnchor((anchor == RectPosition.Auto) ? _rect.GetAnchor() : anchor);
1507 _rect.position = position;
1508 }
1509
1510 public static RectPosition GetAnchor(this RectTransform _rect)
1511 {
1512 Vector3 position = _rect.position;
1513 int width = Screen.width;
1514 int height = Screen.height;
1515 bool flag = position.y > (float)height * 0.5f;
1516 if (position.x > (float)width * 0.3f && position.x < (float)width * 0.7f)
1517 {
1518 if (position.y > (float)height * 0.3f && position.y < (float)height * 0.7f)
1519 {
1520 return RectPosition.Center;
1521 }
1522 if (!flag)
1523 {
1524 return RectPosition.BottomCenter;
1525 }
1526 return RectPosition.TopCenter;
1527 }
1528 if (position.x < (float)width * 0.5f)
1529 {
1530 if (!flag)
1531 {
1532 return RectPosition.BottomLEFT;
1533 }
1534 return RectPosition.TopLEFT;
1535 }
1536 if (!flag)
1537 {
1538 return RectPosition.BottomRIGHT;
1539 }
1540 return RectPosition.TopRIGHT;
1541 }
1542
1543 public static Transform GetLastChild(this Transform trans)
1544 {
1545 return trans.GetChild(trans.childCount - 1);
1546 }
1547
1548 public static Vector2 ToVector2(this Vector3 self)
1549 {
1550 return new Vector2(self.x, self.z);
1551 }
1552
1553 public static void SetScale(this SpriteRenderer renderer, float size)
1554 {
1555 float x = renderer.bounds.size.x;
1556 float y = renderer.bounds.size.y;
1557 float x2 = size / x;
1558 float y2 = size / y;
1559 renderer.transform.localScale = new Vector3(x2, y2, 1f);
1560 }
1561
1562 private static float GetForwardDiffPoint(Vector2 forward)
1563 {
1564 if (object.Equals(forward, Vector2.up))
1565 {
1566 return 90f;
1567 }
1568 object.Equals(forward, Vector2.right);
1569 return 0f;
1570 }
1571
1572 public static void LookAt2D(this Transform self, Transform target, Vector2 forward)
1573 {
1574 self.LookAt2D(target.position, forward);
1575 }
1576
1577 public static void LookAt2D(this Transform self, Vector3 target, Vector2 forward)
1578 {
1579 float forwardDiffPoint = GetForwardDiffPoint(forward);
1580 Vector3 vector = target - self.position;
1581 float num = Mathf.Atan2(vector.y, vector.x) * 57.29578f;
1582 self.rotation = Quaternion.AngleAxis(num - forwardDiffPoint, Vector3.forward);
1583 }
1584
1585 public static float Distance(this Transform t, Vector2 pos)
1586 {
1587 return Vector3.Distance(t.position, pos);
1588 }
1589
1590 public static Vector3 Plus(this Vector3 v, Vector2 v2)
1591 {
1592 v.x += v2.x;
1593 v.y += v2.y;
1594 return v;
1595 }
1596
1597 public static Vector3 SetZ(this Vector3 v, float a)
1598 {
1599 v.z = a;
1600 return v;
1601 }
1602
1603 public static Vector3 SetY(this Vector3 v, float a)
1604 {
1605 v.y = a;
1606 return v;
1607 }
1608
1609 public static Vector3 PlusX(this Vector3 v, float a)
1610 {
1611 v.x += a;
1612 return v;
1613 }
1614
1615 public static Vector3 PlusY(this Vector3 v, float a)
1616 {
1617 v.y += a;
1618 return v;
1619 }
1620
1621 public static Vector3 PlusZ(this Vector3 v, float a)
1622 {
1623 v.z += a;
1624 return v;
1625 }
1626
1627 public static void SetPosition(this Transform transform, float x, float y, float z)
1628 {
1629 vector3.Set(x, y, z);
1630 transform.position = vector3;
1631 }
1632
1633 public static void SetPositionX(this Transform transform, float x)
1634 {
1635 vector3.Set(x, transform.position.y, transform.position.z);
1636 transform.position = vector3;
1637 }
1638
1639 public static void SetPositionY(this Transform transform, float y)
1640 {
1641 vector3.Set(transform.position.x, y, transform.position.z);
1642 transform.position = vector3;
1643 }
1644
1645 public static void SetPositionZ(this Transform transform, float z)
1646 {
1647 vector3.Set(transform.position.x, transform.position.y, z);
1648 transform.position = vector3;
1649 }
1650
1651 public static void AddPosition(this Transform transform, float x, float y, float z)
1652 {
1653 vector3.Set(transform.position.x + x, transform.position.y + y, transform.position.z + z);
1654 transform.position = vector3;
1655 }
1656
1657 public static void AddPositionX(this Transform transform, float x)
1658 {
1659 vector3.Set(transform.position.x + x, transform.position.y, transform.position.z);
1660 transform.position = vector3;
1661 }
1662
1663 public static void AddPositionY(this Transform transform, float y)
1664 {
1665 vector3.Set(transform.position.x, transform.position.y + y, transform.position.z);
1666 transform.position = vector3;
1667 }
1668
1669 public static void AddPositionZ(this Transform transform, float z)
1670 {
1671 vector3.Set(transform.position.x, transform.position.y, transform.position.z + z);
1672 transform.position = vector3;
1673 }
1674
1675 public static void SetLocalPosition(this Transform transform, float x, float y, float z)
1676 {
1677 vector3.Set(x, y, z);
1678 transform.localPosition = vector3;
1679 }
1680
1681 public static void SetLocalPositionX(this Transform transform, float x)
1682 {
1683 vector3.Set(x, transform.localPosition.y, transform.localPosition.z);
1684 transform.localPosition = vector3;
1685 }
1686
1687 public static void SetLocalPositionY(this Transform transform, float y)
1688 {
1689 vector3.Set(transform.localPosition.x, y, transform.localPosition.z);
1690 transform.localPosition = vector3;
1691 }
1692
1693 public static void SetLocalPositionZ(this Transform transform, float z)
1694 {
1695 vector3.Set(transform.localPosition.x, transform.localPosition.y, z);
1696 transform.localPosition = vector3;
1697 }
1698
1699 public static void AddLocalPosition(this Transform transform, float x, float y, float z)
1700 {
1701 vector3.Set(transform.localPosition.x + x, transform.localPosition.y + y, transform.localPosition.z + z);
1702 transform.localPosition = vector3;
1703 }
1704
1705 public static void AddLocalPositionX(this Transform transform, float x)
1706 {
1707 vector3.Set(transform.localPosition.x + x, transform.localPosition.y, transform.localPosition.z);
1708 transform.localPosition = vector3;
1709 }
1710
1711 public static void AddLocalPositionY(this Transform transform, float y)
1712 {
1713 vector3.Set(transform.localPosition.x, transform.localPosition.y + y, transform.localPosition.z);
1714 transform.localPosition = vector3;
1715 }
1716
1717 public static void AddLocalPositionZ(this Transform transform, float z)
1718 {
1719 vector3.Set(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z + z);
1720 transform.localPosition = vector3;
1721 }
1722
1723 public static void SetLocalScale(this Transform transform, float x, float y, float z)
1724 {
1725 vector3.Set(x, y, z);
1726 transform.localScale = vector3;
1727 }
1728
1729 public static void SetLocalScaleX(this Transform transform, float x)
1730 {
1731 vector3.Set(x, transform.localScale.y, transform.localScale.z);
1732 transform.localScale = vector3;
1733 }
1734
1735 public static void SetLocalScaleY(this Transform transform, float y)
1736 {
1737 vector3.Set(transform.localScale.x, y, transform.localScale.z);
1738 transform.localScale = vector3;
1739 }
1740
1741 public static void SetLocalScaleZ(this Transform transform, float z)
1742 {
1743 vector3.Set(transform.localScale.x, transform.localScale.y, z);
1744 transform.localScale = vector3;
1745 }
1746
1747 public static void AddLocalScale(this Transform transform, float x, float y, float z)
1748 {
1749 vector3.Set(transform.localScale.x + x, transform.localScale.y + y, transform.localScale.z + z);
1750 transform.localScale = vector3;
1751 }
1752
1753 public static void AddLocalScaleX(this Transform transform, float x)
1754 {
1755 vector3.Set(transform.localScale.x + x, transform.localScale.y, transform.localScale.z);
1756 transform.localScale = vector3;
1757 }
1758
1759 public static void AddLocalScaleY(this Transform transform, float y)
1760 {
1761 vector3.Set(transform.localScale.x, transform.localScale.y + y, transform.localScale.z);
1762 transform.localScale = vector3;
1763 }
1764
1765 public static void AddLocalScaleZ(this Transform transform, float z)
1766 {
1767 vector3.Set(transform.localScale.x, transform.localScale.y, transform.localScale.z + z);
1768 transform.localScale = vector3;
1769 }
1770
1771 public static void SetEulerAngles(this Transform transform, float x, float y, float z)
1772 {
1773 vector3.Set(x, y, z);
1774 transform.eulerAngles = vector3;
1775 }
1776
1777 public static void SetEulerAnglesX(this Transform transform, float x)
1778 {
1779 vector3.Set(x, transform.localEulerAngles.y, transform.localEulerAngles.z);
1780 transform.eulerAngles = vector3;
1781 }
1782
1783 public static void SetEulerAnglesY(this Transform transform, float y)
1784 {
1785 vector3.Set(transform.localEulerAngles.x, y, transform.localEulerAngles.z);
1786 transform.eulerAngles = vector3;
1787 }
1788
1789 public static void SetEulerAnglesZ(this Transform transform, float z)
1790 {
1791 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y, z);
1792 transform.eulerAngles = vector3;
1793 }
1794
1795 public static void AddEulerAngles(this Transform transform, float x, float y, float z)
1796 {
1797 vector3.Set(transform.eulerAngles.x + x, transform.eulerAngles.y + y, transform.eulerAngles.z + z);
1798 transform.eulerAngles = vector3;
1799 }
1800
1801 public static void AddEulerAnglesX(this Transform transform, float x)
1802 {
1803 vector3.Set(transform.eulerAngles.x + x, transform.eulerAngles.y, transform.eulerAngles.z);
1804 transform.eulerAngles = vector3;
1805 }
1806
1807 public static void AddEulerAnglesY(this Transform transform, float y)
1808 {
1809 vector3.Set(transform.eulerAngles.x, transform.eulerAngles.y + y, transform.eulerAngles.z);
1810 transform.eulerAngles = vector3;
1811 }
1812
1813 public static void AddEulerAnglesZ(this Transform transform, float z)
1814 {
1815 vector3.Set(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z + z);
1816 transform.eulerAngles = vector3;
1817 }
1818
1819 public static void SetLocalEulerAngles(this Transform transform, float x, float y, float z)
1820 {
1821 vector3.Set(x, y, z);
1822 transform.localEulerAngles = vector3;
1823 }
1824
1825 public static void SetLocalEulerAnglesX(this Transform transform, float x)
1826 {
1827 vector3.Set(x, transform.localEulerAngles.y, transform.localEulerAngles.z);
1828 transform.localEulerAngles = vector3;
1829 }
1830
1831 public static void SetLocalEulerAnglesY(this Transform transform, float y)
1832 {
1833 vector3.Set(transform.localEulerAngles.x, y, transform.localEulerAngles.z);
1834 transform.localEulerAngles = vector3;
1835 }
1836
1837 public static void SetLocalEulerAnglesZ(this Transform transform, float z)
1838 {
1839 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y, z);
1840 transform.localEulerAngles = vector3;
1841 }
1842
1843 public static void AddLocalEulerAngles(this Transform transform, float x, float y, float z)
1844 {
1845 vector3.Set(transform.localEulerAngles.x + x, transform.localEulerAngles.y + y, transform.localEulerAngles.z + z);
1846 transform.localEulerAngles = vector3;
1847 }
1848
1849 public static void AddLocalEulerAnglesX(this Transform transform, float x)
1850 {
1851 vector3.Set(transform.localEulerAngles.x + x, transform.localEulerAngles.y, transform.localEulerAngles.z);
1852 transform.localEulerAngles = vector3;
1853 }
1854
1855 public static void AddLocalEulerAnglesY(this Transform transform, float y)
1856 {
1857 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y + y, transform.localEulerAngles.z);
1858 transform.localEulerAngles = vector3;
1859 }
1860
1861 public static void AddLocalEulerAnglesZ(this Transform transform, float z)
1862 {
1863 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y, transform.localEulerAngles.z + z);
1864 transform.localEulerAngles = vector3;
1865 }
1866
1867 public static void ToggleKeyword(this Material m, string id, bool enable)
1868 {
1869 if (enable)
1870 {
1871 m.EnableKeyword(id);
1872 }
1873 else
1874 {
1875 m.DisableKeyword(id);
1876 }
1877 }
1878
1879 public static void ForeachReverse<T>(this IList<T> items, Action<T> action)
1880 {
1881 for (int num = items.Count - 1; num >= 0; num--)
1882 {
1883 action(items[num]);
1884 }
1885 }
1886
1887 public static void ForeachReverse<T>(this IList<T> items, Func<T, bool> action)
1888 {
1889 int num = items.Count - 1;
1890 while (num >= 0 && !action(items[num]))
1891 {
1892 num--;
1893 }
1894 }
1895
1896 public static float ClampAngle(this float angle)
1897 {
1898 if (angle < 0f)
1899 {
1900 return 360f - (0f - angle) % 360f;
1901 }
1902 return angle % 360f;
1903 }
1904
1905 public static Vector3 Random(this Vector3 v)
1906 {
1907 return new Vector3(Rand.Range(0f - v.x, v.x), Rand.Range(0f - v.y, v.y), Rand.Range(0f - v.z, v.z));
1908 }
1909
1910 public static T Instantiate<T>(this T s) where T : ScriptableObject
1911 {
1912 string name = s.name;
1913 T val = UnityEngine.Object.Instantiate(s);
1914 val.name = name;
1915 return val;
1916 }
1917
1918 public static int GetRuntimeEventCount(this UnityEventBase unityEvent)
1919 {
1920 Type typeFromHandle = typeof(UnityEventBase);
1921 Assembly assembly = Assembly.GetAssembly(typeFromHandle);
1922 Type type = assembly.GetType("UnityEngine.Events.InvokableCallList");
1923 Type type2 = assembly.GetType("UnityEngine.Events.BaseInvokableCall");
1924 Type type3 = typeof(List<>).MakeGenericType(type2);
1925 FieldInfo field = typeFromHandle.GetField("m_Calls", BindingFlags.Instance | BindingFlags.NonPublic);
1926 FieldInfo field2 = type.GetField("m_RuntimeCalls", BindingFlags.Instance | BindingFlags.NonPublic);
1927 object value = field.GetValue(unityEvent);
1928 object value2 = field2.GetValue(value);
1929 return (int)type3.GetProperty("Count").GetValue(value2, null);
1930 }
1931}
ArticleStyle
Definition: ArticleStyle.cs:2
RectPosition
Definition: RectPosition.cs:2
static string TryAddExtension(this string s, string ext)
static string StripLastPun(this string str)
static byte SetBit(this byte pByte, int bitNo, bool value)
static T GetComponentInChildrenExcludSelf< T >(this Transform c)
static int[] SplitToInts(this string str, char separator)
static void SetEulerAnglesZ(this Transform transform, float z)
static T CreateMold< T >(this Component c, string name=null)
static void SetAnchor(this RectTransform r, float minX, float minY, float maxX, float maxY)
static T GetField< T >(this object o, string name)
static void SetPosition(this Transform transform, float x, float y, float z)
static string TagColor(this string s, Color c, string txt)
static void SetEulerAnglesX(this Transform transform, float x)
static int NextIndex< TValue >(this IList< TValue > source, TValue val)
static int ClampMax(this int v, int max)
static void Each< TValue >(this IList< TValue > list, Action< TValue > action)
static void AddLocalPosition(this Transform transform, float x, float y, float z)
static T PrevEnum< T >(this T src)
static string langGame(this string s, string ref1, string ref2=null, string ref3=null, string ref4=null)
static Vector3 vector3
static TKey[] CopyKeys< TKey, TValue >(this IDictionary< TKey, TValue > dict)
static void AddLocalEulerAnglesY(this Transform transform, float y)
static IList< TValue > Shuffle< TValue >(this IList< TValue > list)
static string Parentheses(this string str)
static void AddLocalScale(this Transform transform, float x, float y, float z)
static string ToTitleCase(this string s, bool wholeText=false)
static T Find< T >(this Component c, string name=null, bool recursive=false)
static TValue Clamp< TValue >(this IList< TValue > source, int i)
static TValue TryGetValue< TKey, TValue >(this IDictionary< TKey, TValue > source, TKey key, TValue fallback=default(TValue))
static void SetLocalEulerAngles(this Transform transform, float x, float y, float z)
static string ToFormat(this int a)
static void LoopSelectable(this List< Selectable > sels, bool vertical=true, bool horizonal=true, bool asGroup=true)
static string langPlural(this string s, int i)
static void SetScale(this SpriteRenderer renderer, float size)
static int ToInt(this string str, Type type)
static float GetForwardDiffPoint(Vector2 forward)
static T ToEnum< T >(this int value)
static bool IsChildOf(this GameObject c, GameObject root)
static int Calc(this string str, int power=0, int ele=0, int p2=0)
static void AddLocalScaleY(this Transform transform, float y)
static void SetSlider(this Slider slider, float value, Func< float, string > action, int min=-1, int max=-1, bool notify=true)
static string StripPun(this string str, bool stripComma, bool insertSpaceForComma=false)
static int IndexOf(this IList< Component > list, GameObject go)
static Vector3 SetY(this Vector3 v, float a)
static void AddPositionX(this Transform transform, float x)
static void LoopTail< T >(this List< T > list, bool vertical=false)
static T GetOrCreate< T >(this Component t)
static bool IsOn(this int data, int digit)
static IList< TValue > Copy< TValue >(this IList< TValue > list)
static float FromInt2(this int a)
static Selectable GetSelectable(this GameObject go)
static string AddArticle(this string s, int num, ArticleStyle style=ArticleStyle.Default, string replace=null)
static void SetLocalPositionZ(this Transform transform, float z)
static void SetLocalEulerAnglesZ(this Transform transform, float z)
static void RebuildLayoutTo(this Component c, Component target)
static bool IsEmpty(this string str)
static bool IsPrefab(this Component c)
static void SetActive(this Component c, bool enable)
static void ToDictionary< T >(this IList< UPair< T > > list, ref Dictionary< string, T > dic)
static void AddEulerAnglesZ(this Transform transform, float z)
static void SetProperty< T >(this object o, string name, T value)
static bool Within(this byte v, byte v2, byte range)
static void SetAlpha(this Text text, float aloha=1f)
static void ToggleActive(this Component c)
static bool Contains(this string[] strs, string id)
static int GetRuntimeEventCount(this UnityEventBase unityEvent)
static void SetLayerRecursively(this GameObject obj, int layer)
static void SetActive(this Component c, bool enable, Action< bool > onChangeState)
static void SetLocalEulerAnglesY(this Transform transform, float y)
static bool Within(this int v, int v2, int range)
static Vector2 ToVector2(this Vector3 self)
static void LoopSelectable(this Transform l, bool vertical=true, bool horizonal=true, bool asGroup=true)
static string[] langList(this string s)
static Color ToColor(this string s)
static void AddLocalEulerAnglesX(this Transform transform, float x)
static void SetLocalPosition(this Transform transform, float x, float y, float z)
static void AddPositionY(this Transform transform, float y)
static RectPosition GetAnchor(this RectTransform _rect)
static bool GetBit(this byte pByte, int bitNo)
static void ToggleKeyword(this Material m, string id, bool enable)
static string Tag(this Color c)
static T NextEnum< T >(this T src)
static void SetPositionX(this Transform transform, float x)
static void SetLocalScaleX(this Transform transform, float x)
static TValue GetOrCreate< TKey, TValue >(this IDictionary< TKey, TValue > dict, TKey key, Func< TValue > func=null)
static Vector3 PlusY(this Vector3 v, float a)
static bool IsEmpty(this Array array)
static T GetProperty< T >(this object o, string name)
static void SetLocalPositionX(this Transform transform, float x)
static void SetLocalEulerAnglesX(this Transform transform, float x)
static float Distance(this Transform t, Vector2 pos)
static void AddLocalScaleX(this Transform transform, float x)
static float FromInt3(this int a)
static void AddEulerAngles(this Transform transform, float x, float y, float z)
static string TagSize(this string s, int size)
static void AddLocalScaleZ(this Transform transform, float z)
static void SetAlpha(this RawImage c, float a)
static void AddEulerAnglesX(this Transform transform, float x)
static Transform Find(this Component c, string name=null)
static void DestroyChildren(this Component component, bool destroyInactive=false, bool ignoreDestroy=true)
static bool IsInteractable(this GameObject obj)
static void Sort< T >(this IList< T > list, Comparison< T > comparison)
static int ToInt3(this float a)
static TValue RandomItem< TKey, TValue >(this IDictionary< TKey, TValue > source)
static string StripBrackets(this string str)
static string ToHex(this Color c)
static TValue RandomItemWeighted< TValue >(this IList< TValue > source, Func< TValue, float > getWeight)
static string lang(this string s)
static float ToFloat(this string str)
static Vector3 SetZ(this Vector3 v, float a)
static void AddLocalEulerAnglesZ(this Transform transform, float z)
static bool IsNull(this object o)
static void SetAlpha(this Image c, float a)
static void SetAnchor(this RectTransform _rect, RectPosition anchor=RectPosition.Auto)
static bool IsMouseOver(this RectTransform r, Camera cam)
static Vector3 PlusX(this Vector3 v, float a)
static List< T > GetComponentsInDirectChildren< T >(this Transform comp, bool includeInactive=true)
static void SetSlider(this Slider slider, float value, Func< float, string > action, bool notify)
static string langGame(this string s)
static void SetNavigation(this Component a, Component b, bool vertical=false)
static TValue RandomItem< TValue >(this IList< TValue > source)
static void AddLocalEulerAngles(this Transform transform, float x, float y, float z)
static int ClampMin(this int v, int min)
static TValue FirstItem< TKey, TValue >(this IDictionary< TKey, TValue > source)
static void SetPivot(this RectTransform r, float x, float y)
static TValue NextItem< TValue >(this IList< TValue > source, ref int index)
static T FindMax< T >(this List< T > list, Func< T, int > func)
static void SetField< T >(this object o, string name, T value)
static TValue TryGet< TValue >(this IList< TValue > array, int index, int defIndex=-1)
static TValue Move< TValue >(this IList< TValue > list, TValue target, int a)
static T GetComponentInDirectChildren< T >(this Component comp)
static void SetRect(this RectTransform r, float x, float y, float w, float h, float pivotX, float pivotY, float minX, float minY, float maxX, float maxY)
static Type ToType(this string value)
static void ForeachReverse< T >(this IList< T > items, Action< T > action)
static TValue PrevItem< TValue >(this IList< TValue > source, TValue val)
static void RebuildLayout(this Component c, bool recursive=false)
static Vector3 Plus(this Vector3 v, Vector2 v2)
static GameObject FindTagInParents(this Component c, string tag, bool includeInactive=true)
static string GetFullFileNameWithoutExtension(this string path)
static int ToInt< T >(this string str)
static string ToShortNumber(this int a)
static void SetEulerAnglesY(this Transform transform, float y)
static IPluralize pluralizer
static void AddLocalPositionX(this Transform transform, float x)
static string IsEmpty(this string str, string defaultStr)
static void Set< T1, T2 >(this Dictionary< T1, T2 > dic, Dictionary< T1, T2 > from)
static T RandomItem< T >(this IEnumerable< T > ie)
static T Instantiate< T >(this T s)
static string TagSize(this string s, string txt, int size)
static string Repeat(this string str, int count)
static Transform GetLastChild(this Transform trans)
static int ToInt(this string str)
static void SetPositionY(this Transform transform, float y)
static string ToFormat(this long a)
static string ToText(this int a, bool skipIfZero=true)
static void _SetAnchor(this RectTransform _rect, RectPosition anchor)
static Vector3 Random(this Vector3 v)
static string GetFullFileNameWithoutExtension(this FileInfo fileInfo)
static void SetListener(this Button.ButtonClickedEvent e, Action action)
static void RebuildLayoutTo< T >(this Component c)
static void SetOnClick(this Button b, Action action)
static string Bracket(this string str, int type=0)
static void AddPosition(this Transform transform, float x, float y, float z)
static RectTransform Rect(this Component c)
static void AddLocalPositionZ(this Transform transform, float z)
static string Evalute(this string[] array, float val)
static string lang(this string s, string ref1, string ref2=null, string ref3=null, string ref4=null, string ref5=null)
static int Minimum(this int i)
static void LookAt2D(this Transform self, Transform target, Vector2 forward)
static void SetLocalScaleZ(this Transform transform, float z)
static void SetEulerAngles(this Transform transform, float x, float y, float z)
static float ClampAngle(this float angle)
static int Clamp(this int v, int min, int max, bool loop=false)
static string TrimNewLines(this string text)
static string TagColor(this string s, Color c)
static string[] SplitNewline(this string str)
static void CopyRect(this RectTransform r, RectTransform t)
static Color Multiply(this Color c, float mtp, float add)
static TValue[] CopyValues< TKey, TValue >(this IDictionary< TKey, TValue > dict)
static void SetLocalPositionY(this Transform transform, float y)
static Vector3 PlusZ(this Vector3 v, float a)
static void SetPositionZ(this Transform transform, float z)
static Color SetAlpha(this Color c, float a)
static void SetLocalScaleY(this Transform transform, float y)
static TValue LastItem< TValue >(this IList< TValue > source)
static byte[] ToBytes(this BitArray bits)
static T ToField< T >(this string s, object o)
static void SetLocalScale(this Transform transform, float x, float y, float z)
static string AddArticle(this string s)
static TValue Remainder< TValue >(this IList< TValue > source, int divider)
static int ToInt2(this float a)
static List< T > GetList< T >(this IDictionary source)
static void AddLocalPositionY(this Transform transform, float y)
static void AddPositionZ(this Transform transform, float z)
static bool HasField< T >(this object o, string name)
static void AddEulerAnglesY(this Transform transform, float y)
static void LookAt2D(this Transform self, Vector3 target, Vector2 forward)
bool pluralize
Definition: LangSetting.cs:32
bool addArticle
Definition: LangSetting.cs:30
bool capitalize
Definition: LangSetting.cs:34
char period
Definition: Lang.cs:19
char comma
Definition: Lang.cs:17
Definition: Lang.cs:6
static Words words
Definition: Lang.cs:26
static LangSetting setting
Definition: Lang.cs:54
static string Get(string id)
Definition: Lang.cs:91
static string[] GetList(string id)
Definition: Lang.cs:114
static LangGame Game
Definition: Lang.cs:48
static string Parse(string idLang, string val1, string val2=null, string val3=null, string val4=null, string val5=null)
Definition: Lang.cs:147
Definition: Rand.cs:4
static Random _random
Definition: Rand.cs:7
static int Range(int min, int max)
Definition: Rand.cs:42
static int rnd(int max)
Definition: Rand.cs:52
string Get(string id)
Definition: SourceLang.cs:12
string Parse(string idLang, string val1, string val2=null, string val3=null, string val4=null)
Definition: SourceLang.cs:43
Definition: UPair.cs:5
void SetInt(int i)
Definition: BitArray32.cs:89