2using System.Collections;
3using System.Collections.Generic;
6using System.Reflection;
8using System.Text.RegularExpressions;
10using Unity.Collections.LowLevel.Unsafe;
12using UnityEngine.Events;
19 public static readonly
bool IsInt = typeof(T).IsEnum && Enum.GetUnderlyingType(typeof(T)) == typeof(
int);
21 public static readonly
bool IsLong = typeof(T).IsEnum && Enum.GetUnderlyingType(typeof(T)) == typeof(
long);
26 public static readonly Dictionary<string, T>
cached;
28 public static readonly Dictionary<string, T>
fuzzy;
32 cached =
new Dictionary<string, T>();
33 fuzzy =
new Dictionary<string, T>(StringComparer.OrdinalIgnoreCase);
34 string[] names = Enum.GetNames(typeof(T));
35 foreach (
string text
in names)
37 T value = (T)Enum.Parse(typeof(T), text);
39 fuzzy.TryAdd(text, value);
48 public static string lang(
this string s)
59 public static string lang(
this string s,
string ref1,
string ref2 =
null,
string ref3 =
null,
string ref4 =
null,
string ref5 =
null)
61 return Lang.
Parse(s, ref1, ref2, ref3, ref4, ref5);
74 public static string langGame(
this string s,
string ref1,
string ref2 =
null,
string ref3 =
null,
string ref4 =
null)
81 return "(" + str +
")";
84 public static string Bracket(
this string str,
int type = 0)
97 return list[0] + str + list[1];
100 return "_bracketLeft".lang() + str +
"_bracketRight".lang();
104 public static byte[]
ToBytes(
this BitArray bits)
106 byte[] array =
new byte[(bits.Length - 1) / 8 + 1];
107 bits.CopyTo(array, 0);
111 public static bool GetBit(
this byte pByte,
int bitNo)
113 return (pByte & (1 << bitNo)) != 0;
116 public static byte SetBit(
this byte pByte,
int bitNo,
bool value)
120 return Convert.ToByte(pByte & ~(1 << bitNo));
122 return Convert.ToByte(pByte | (1 << bitNo));
127 return (
int)(a * 1000f);
132 return (
float)a / 1000f;
137 return (
int)(a * 100f);
142 return (
float)a / 100f;
163 public static bool IsOn(
this int data,
int digit)
167 return bitArray[digit];
174 return (T)Enum.ToObject(typeof(T), value);
176 return UnsafeUtility.As<int, T>(ref value);
183 return (T)Enum.ToObject(typeof(T), value);
185 return UnsafeUtility.As<long, T>(ref value);
188 public static T
ToEnum<T>(
this string value,
bool ignoreCase =
true)
190 if (
EnumNames<T>.cached.TryGetValue(value, out var value2))
194 if (ignoreCase &&
EnumNames<T>.fuzzy.TryGetValue(value, out value2))
198 return (T)Enum.Parse(typeof(T), value, ignoreCase);
201 public static Type
ToType(
this string value)
203 return Type.GetType(
"Elona." + value +
", Assembly-CSharp");
208 return ((T[])Enum.GetValues(src.GetType())).NextItem(src);
213 return ((T[])Enum.GetValues(src.GetType())).PrevItem(src);
216 public static bool Within(
this int v,
int v2,
int range)
220 return v - v2 < -range;
225 public static bool Within(
this byte v,
byte v2,
byte range)
229 return v - v2 < -range;
234 public static int Clamp(
this int v,
int min,
int max,
bool loop =
false)
238 v = ((!loop) ? min : max);
242 v = ((!loop) ? max : min);
267 return (T)o.GetType().GetField(s).GetValue(o);
272 FieldInfo field = o.GetType().GetField(name);
275 return typeof(T).IsAssignableFrom(field.FieldType);
282 return (T)o.GetType().GetField(name).GetValue(o);
285 public static void SetField<T>(
this object o,
string name, T value)
287 o.GetType().GetField(name).SetValue(o, value);
292 return (T)o.GetType().GetProperty(name).GetValue(o);
297 o.GetType().GetProperty(name).SetValue(o, value);
300 public static void Sort<T>(
this IList<T> list, Comparison<T> comparison)
304 ((List<T>)list).Sort(comparison);
307 List<T> list2 =
new List<T>(list);
308 list2.Sort(comparison);
309 for (
int i = 0; i < list.Count; i++)
315 public static void Sort<T>(
this IList<T> list, Func<T, int> keySelector)
317 List<T> list2 = list.OrderBy(keySelector).ToList();
319 foreach (T
item in list2)
325 public static TValue
TryGet<TValue>(
this IList<TValue> array,
int index,
int defIndex = -1)
327 if (array.Count != 0)
329 if (index >= array.Count)
333 if (array.Count <= defIndex)
335 return array[Mathf.Max(0, array.Count - 1)];
337 return array[defIndex];
339 return array[Mathf.Max(0, array.Count - 1)];
341 return array[Math.Max(0, index)];
343 return default(TValue);
346 public static TValue
TryGet<TValue>(
this IList<TValue> array,
int index,
bool returnNull)
348 if (index >= array.Count)
350 return default(TValue);
359 return array.Length == 0;
364 public static int IndexOf(
this IList<Component> list, GameObject go)
370 for (
int i = 0; i < list.Count; i++)
372 if (list[i].gameObject == go)
380 public static TValue
Move<TValue>(
this IList<TValue> list, TValue target,
int a)
382 int num = list.IndexOf(target);
386 num2 = list.Count - 1;
388 if (num2 >= list.Count)
393 list.Insert(num2, target);
399 return list.ToList();
402 public static void Each<TValue>(
this IList<TValue> list, Action<TValue> action)
404 for (
int num = list.Count - 1; num >= 0; num--)
412 int num = list.Count;
417 TValue value = list[num];
418 list[num] = list[index];
426 TValue value =
default(TValue);
427 if (key !=
null && source.TryGetValue(key, out value))
436 TValue value =
default(TValue);
437 if (key !=
null && source.TryGetValue(key, out value))
441 return source[key_fallback];
446 TValue val = dict.TryGetValue(key);
449 val = ((func !=
null) ? func() : Activator.CreateInstance<TValue>());
457 TKey[] array =
new TKey[dict.Keys.Count];
458 dict.Keys.CopyTo(array, 0);
464 TValue[] array =
new TValue[dict.Keys.Count];
465 dict.Values.CopyTo(array, 0);
471 int num = ie.Count();
476 return ie.ElementAt(
Rand.
rnd(num));
481 if (source.Count != 0)
483 return source.ElementAt(
Rand.
rnd(source.Count)).Value;
485 return default(TValue);
490 if (source.Count != 0)
492 return source[
Rand.
rnd(source.Count)];
494 return default(TValue);
499 return source.RandomItem(source.IndexOf(exclude));
504 if (source.Count > 1)
511 while (num == exclude);
514 if (source.Count == 1)
518 return default(TValue);
521 public static TValue
RandomItem<TValue>(
this IList<TValue> source, Func<TValue, bool> funcValid, TValue defaultValue =
default(TValue))
523 for (
int i = 0; i < 100; i++)
525 TValue val = source[
Rand.
rnd(source.Count)];
536 if (source.Count == 0)
538 return default(TValue);
540 if (source.Count == 1)
545 foreach (TValue
item in source)
547 num += getWeight(
item);
551 foreach (TValue item2
in source)
553 num += getWeight(item2);
559 return source.First();
564 if (source.Count != 0)
566 return source[divider % source.Count];
568 return default(TValue);
575 return default(TValue);
577 return source[source.First().Key];
582 if (source.Count != 0)
584 return source[source.Count - 1];
586 return default(TValue);
592 if (index >= source.Count)
596 if (source.Count != 0)
598 return source[index];
600 return default(TValue);
609 int num = source.IndexOf(val) + 1;
610 if (num >= source.Count)
619 int num = source.IndexOf(val) + 1;
620 if (num >= source.Count)
624 if (source.Count != 0)
628 return default(TValue);
633 int num = source.IndexOf(val) - 1;
636 num = source.Count - 1;
638 if (source.Count != 0)
642 return default(TValue);
651 else if (i >= source.Count)
653 i = source.Count - 1;
660 List<T> list =
new List<T>();
661 foreach (
object value
in source.Values)
673 dic =
new Dictionary<string, T>();
674 for (
int i = 0; i < list.Count; i++)
676 dic.Add(list[i].name, list[i].value);
680 public static T
FindMax<T>(
this List<T> list, Func<T, int> func)
682 int num =
int.MinValue;
683 T result =
default(T);
684 foreach (T
item in list)
686 int num2 = func(
item);
696 public static void Set<T1, T2>(
this Dictionary<T1, T2> dic, Dictionary<T1, T2> from)
699 foreach (KeyValuePair<T1, T2>
item in from)
707 if (
string.IsNullOrEmpty(text))
709 return new string[0];
711 return text.Split(
new string[3] {
"\r\n",
"\n",
"\r" }, StringSplitOptions.None);
716 if (
string.IsNullOrEmpty(text))
720 return text.Replace(
"\r",
"").Replace(
"\n",
"");
725 if (
string.IsNullOrEmpty(text))
729 return Regex.Replace(text,
"<.*?>",
"");
732 public static int Calc(
this string str,
int power = 0,
int ele = 0,
int p2 = 0)
734 return Cal.Calcuate(str.Replace(
"p2", p2.ToString() ??
"").Replace(
"p", power.ToString() ??
"").Replace(
"e", ele.ToString() ??
"")
740 return str.ToInt(typeof(T));
743 public static int ToInt(
this string str, Type type)
745 FieldInfo field = type.GetField(str, BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy);
748 Debug.LogError(
"Field is null:" + str +
"/" + type);
751 return (
int)field.GetValue(
null);
754 public static int ToInt(
this string str)
756 if (
int.TryParse(str, out var result))
763 public static long ToLong(
this string str)
765 if (
long.TryParse(str, out var result))
777 if (!
float.TryParse(str, out result))
779 Debug.Log(
"exception: ToFlat1" + str);
785 Debug.Log(
"exception: ToFlat2" + str);
800 public static string StripPun(
this string str,
bool stripComma,
bool insertSpaceForComma =
false)
802 StringBuilder stringBuilder =
new StringBuilder();
803 foreach (
char c
in str)
809 if (insertSpaceForComma)
811 stringBuilder.Append(
'\u3000');
816 stringBuilder.Append(c);
821 stringBuilder.Append(c);
824 return stringBuilder.ToString();
827 public static string Repeat(
this string str,
int count)
829 StringBuilder stringBuilder =
new StringBuilder();
830 for (
int i = 0; i < Mathf.Abs(count); i++)
832 stringBuilder.Append(str);
834 return stringBuilder.ToString();
839 HashSet<char> brackets =
new HashSet<char> {
'"',
'「',
'」',
'“',
'”' };
840 return string.Concat(str.Where((
char c) => !brackets.Contains(c)));
845 if (!s.Contains(
"." + ext))
847 return s +
"." + ext;
861 public static string IsEmpty(
this string str,
string defaultStr)
863 if (str !=
null && !(str ==
""))
872 while (text.EndsWith(Environment.NewLine))
874 text = text.Substring(0, text.Length - Environment.NewLine.Length);
881 string[] array = str.Split(separator);
882 int[] array2 =
new int[array.Length];
883 for (
int i = 0; i < array.Length; i++)
885 array2[i] =
int.Parse(array[i]);
892 return str.Split(Environment.NewLine.ToCharArray());
895 public static bool Contains(
this string[] strs,
string id)
897 if (strs ==
null || strs.Length == 0)
901 for (
int i = 0; i < strs.Length; i++)
911 public static string Evalute(
this string[] array,
float val)
913 return array[(int)Mathf.Clamp((
float)(array.Length - 1) * val, 0f, array.Length - 1)];
925 return a / 1000 +
"K";
935 text = a / 1000000 +
"M";
944 return a / 1000 +
"K";
946 text2 = a.ToString();
954 text2 = a / 1000000 +
"M";
969 public static string ToText(
this int a,
bool skipIfZero =
true)
972 if (!(a == 0 && skipIfZero))
993 return s +
"<color=" + c.ToHex() +
">" + txt +
"</color>";
998 return "<color=" + c.ToHex() +
">" + s +
"</color>";
1001 public static string TagSize(
this string s,
string txt,
int size)
1003 return s +
"<size=" + size +
">" + txt +
"</size>";
1006 public static string TagSize(
this string s,
int size)
1008 return "<size=" + size +
">" + s +
"</size>";
1011 public static bool HasTag(
this string s,
string id,
char splitter =
'/')
1013 return s.Split(splitter).Contains(
id);
1016 public static string SetTag(
this string s,
string id,
bool enable,
char splitter =
'/')
1018 s = ((!enable) ? s.RemoveTag(
id, splitter) : s.AddTag(
id, splitter));
1022 public static string AddTag(
this string s,
string id,
char splitter =
'/')
1024 if (!s.HasTag(
id, splitter))
1026 s = s + (s.IsEmpty() ?
"" : ((object)splitter))?.ToString() + id;
1031 public static string RemoveTag(
this string s,
string id,
char splitter =
'/')
1033 string[] array = s.Split(splitter);
1035 string[] array2 = array;
1036 foreach (
string text
in array2)
1040 s.AddTag(text, splitter);
1048 return fileInfo.Directory.FullName +
"/" + Path.GetFileNameWithoutExtension(fileInfo.Name);
1053 return new FileInfo(path).GetFullFileNameWithoutExtension();
1058 if (s ==
"talisman")
1067 if (a.ToLower() ==
"unicorn")
1080 char c = s.ToLower()[0];
1081 s = (
GetSpecialArticle(s) ?? ((c ==
'a' || c ==
'i' || c ==
'u' || c ==
'e' || c ==
'o') ?
"an " :
"a ")) + s;
1092 string text = ((num >= 2) ? (num.ToFormat() +
" ") : (
GetSpecialArticle(s) ?? ((c ==
'a' || c ==
'i' || c ==
'u' || c ==
'e' || c ==
'o') ?
"an " :
"a ")));
1095 s = ((replace.IsEmpty() || !s.Contains(replace) || s.Contains(
"limestone stone")) ?
Pluralize(s) : s.Replace(replace,
Pluralize(replace)));
1099 ArticleStyle.The =>
"_the".lang().ToTitleCase() +
" " + ((num > 1) ? (num +
" ") :
"") + s,
1100 ArticleStyle.None => ((num > 1) ? (num.ToFormat() +
" ") :
"") + s.ToTitleCase(),
1105 public static string ToTitleCase(
this string s,
bool wholeText =
false)
1111 char[] array = s.ToCharArray();
1113 for (
int i = 0; i < array.Length; i++)
1117 array[i] =
char.ToUpper(array[i]);
1124 if (array[i] ==
' ')
1129 return new string(array);
1134 char[] array = s.ToCharArray();
1136 for (
int i = 0; i < array.Length; i++)
1139 if (
char.IsLetter(c))
1143 array[i] =
char.ToUpperInvariant(c);
1147 else if (c ==
'.' || c ==
'!' || c ==
'?')
1152 return new string(array);
1155 public static void LoopTail<T>(
this List<T> list,
bool vertical =
false) where T : Selectable
1159 Navigation navigation = list[0].navigation;
1160 Navigation navigation2 = list[list.Count - 1].navigation;
1163 navigation.selectOnUp = list[list.Count - 1];
1164 navigation2.selectOnDown = list[0];
1168 navigation.selectOnLeft = list[list.Count - 1];
1169 navigation2.selectOnRight = list[0];
1171 list[0].navigation = navigation;
1172 list[list.Count - 1].navigation = navigation2;
1176 public static void SetNavigation(
this Component a, Component b,
bool vertical =
false)
1182 Selectable component = a.GetComponent<Selectable>();
1183 Selectable component2 = b.GetComponent<Selectable>();
1184 if ((
bool)component && (bool)component2)
1186 Navigation navigation = component.navigation;
1187 Navigation navigation2 = component2.navigation;
1190 navigation.selectOnUp = component2;
1191 navigation2.selectOnDown = component;
1195 navigation.selectOnLeft = component2;
1196 navigation2.selectOnRight = component;
1198 component.navigation = navigation;
1199 component2.navigation = navigation2;
1203 public static void LoopSelectable(
this List<Selectable> sels,
bool vertical =
true,
bool horizonal =
true,
bool asGroup =
true)
1205 for (
int i = 0; i < sels.Count; i++)
1207 Selectable selectable = sels[i];
1208 Selectable selectable2 = sels[0];
1209 Navigation navigation = selectable.navigation;
1212 navigation.selectOnRight = ((i + 1 < sels.Count) ? sels[i + 1] : selectable2);
1216 for (
int j = i + 1; j < sels.Count; j++)
1218 if (sels[j].transform.position.y < selectable.transform.position.y)
1220 selectable2 = sels[j];
1227 selectable2 = ((i + 1 < sels.Count) ? sels[i + 1] : selectable2);
1231 navigation.selectOnDown = selectable2;
1233 selectable.navigation = navigation;
1235 for (
int num = sels.Count - 1; num >= 0; num--)
1237 Selectable selectable3 = sels[num];
1238 Selectable selectable4 = sels[sels.Count - 1];
1239 Navigation navigation2 = selectable3.navigation;
1242 navigation2.selectOnLeft = ((num > 0) ? sels[num - 1] : selectable4);
1246 int num2 = sels.Count - 1;
1247 for (
int num3 = num - 1; num3 >= 0; num3--)
1249 if (sels[num3].transform.position.y > selectable3.transform.position.y)
1256 while (num4 >= 0 && !(sels[num4].transform.position.y > sels[num2].transform.position.y))
1258 selectable4 = sels[num4];
1264 selectable4 = ((num > 0) ? sels[num - 1] : selectable4);
1268 navigation2.selectOnUp = ((selectable4 == selectable3) ? sels[sels.Count - 1] : selectable4);
1270 navigation2.mode = Navigation.Mode.Explicit;
1271 selectable3.navigation = navigation2;
1275 public static void LoopSelectable(
this Transform l,
bool vertical =
true,
bool horizonal =
true,
bool asGroup =
true)
1277 List<Selectable> list = l.GetComponentsInChildren<Selectable>().ToList();
1278 for (
int num = list.Count - 1; num >= 0; num--)
1280 if (!list[num].interactable || list[num].navigation.mode == Navigation.Mode.None)
1285 list.LoopSelectable(vertical, horizonal, asGroup);
1291 ColorUtility.TryParseHtmlString(
"#" + s, out color);
1297 c.color =
new Color(c.color.r, c.color.g, c.color.b, a);
1302 c.color =
new Color(c.color.r, c.color.g, c.color.b, a);
1313 return new Color(c.r * mtp + add, c.g * mtp + add, c.b * mtp + add, c.a);
1318 return "<color=" +
$"#{(int)(c.r * 255f):X2}{(int)(c.g * 255f):X2}{(int)(c.b * 255f):X2}" +
">";
1323 return $"#{(int)(c.r * 255f):X2}{(int)(c.g * 255f):X2}{(int)(c.b * 255f):X2}";
1328 b.onClick.RemoveAllListeners();
1329 b.onClick.AddListener(delegate
1337 e.RemoveAllListeners();
1338 e.AddListener(delegate
1344 public static void SetAlpha(
this Text text,
float aloha = 1f)
1346 text.color =
new Color(text.color.r, text.color.g, text.color.b, aloha);
1349 public static string Fit(
this Text text,
string s,
string suffix =
"")
1351 TextGenerationSettings generationSettings = text.GetGenerationSettings(Vector2.zero);
1352 TextGenerator cachedTextGeneratorForLayout = text.cachedTextGeneratorForLayout;
1353 float num = text.rectTransform.rect.width * text.pixelsPerUnit;
1354 if (cachedTextGeneratorForLayout.GetPreferredWidth(s + suffix, generationSettings) <= num)
1358 int num2 = s.Length;
1359 while (num2 > 1 && cachedTextGeneratorForLayout.GetPreferredWidth(s[..num2].TrimEnd() +
".." + suffix, generationSettings) > num)
1363 return s[..num2].TrimEnd() +
".." + suffix;
1366 public static void SetSlider(
this Slider slider,
float value, Func<float, string> action,
bool notify)
1368 slider.SetSlider(value, action, -1, -1, notify);
1371 public static void SetSlider(
this Slider slider,
float value, Func<float, string> action,
int min = -1,
int max = -1,
bool notify =
true)
1373 slider.onValueChanged.RemoveAllListeners();
1374 slider.onValueChanged.AddListener(delegate(
float a)
1376 slider.GetComponentInChildren<Text>(includeInactive:
true).text = action(a);
1380 slider.minValue = min;
1381 slider.maxValue = max;
1385 slider.value = value;
1389 slider.SetValueWithoutNotify(value);
1391 slider.GetComponentInChildren<Text>(includeInactive:
true).text = action(value);
1396 T val = t.gameObject.GetComponent<T>();
1399 val = t.gameObject.AddComponent<T>();
1404 public static RectTransform
Rect(
this Component c)
1406 return c.transform as RectTransform;
1409 public static void CopyRect(
this RectTransform r, RectTransform t)
1412 r.sizeDelta = t.sizeDelta;
1413 r.anchorMin = t.anchorMin;
1414 r.anchorMax = t.anchorMax;
1415 r.anchoredPosition = t.anchoredPosition;
1420 c.SetActive(!c.gameObject.activeSelf);
1425 if (c.gameObject.activeSelf != enable)
1427 c.gameObject.SetActive(enable);
1431 public static void SetActive(
this Component c,
bool enable, Action<bool> onChangeState)
1433 if (c.gameObject.activeSelf != enable)
1435 c.gameObject.SetActive(enable);
1436 onChangeState(enable);
1442 return go.GetComponentInChildren<Selectable>();
1448 foreach (Transform
item in obj.transform)
1450 item.gameObject.SetLayerRecursively(layer);
1456 Selectable selectable = (obj ? obj.GetComponent<Selectable>() :
null);
1457 if ((
bool)selectable)
1459 return selectable.interactable;
1464 public static bool IsChildOf(
this GameObject c, GameObject root)
1466 if (c.transform == root.transform)
1470 if ((
bool)c.transform.parent)
1472 return c.transform.parent.gameObject.IsChildOf(root);
1479 return c.gameObject.scene.name ==
null;
1482 public static T
CreateMold<T>(
this Component c,
string name =
null) where T : Component
1485 for (
int i = 0; i < c.transform.childCount; i++)
1487 T component = c.transform.GetChild(i).GetComponent<T>();
1488 if ((
bool)component && (name.IsEmpty() || name == component.name))
1490 component.gameObject.SetActive(value:
false);
1495 c.DestroyChildren();
1499 public static Transform
Find(
this Component c,
string name =
null)
1501 return c.Find<Transform>(name);
1504 public static T
Find<T>(
this Component c,
string name =
null,
bool recursive =
false) where T : Component
1508 T[] componentsInChildren = c.transform.GetComponentsInChildren<T>();
1509 foreach (T val
in componentsInChildren)
1511 if (name ==
null || name == val.name)
1518 for (
int j = 0; j < c.transform.childCount; j++)
1520 T component = c.transform.GetChild(j).GetComponent<T>();
1521 if ((
bool)component && (name ==
null || name == component.name))
1529 public static GameObject
FindTagInParents(
this Component c,
string tag,
bool includeInactive =
true)
1531 Transform transform = c.transform;
1532 for (
int i = 0; i < transform.childCount; i++)
1534 Transform child = transform.GetChild(i);
1535 if ((includeInactive || child.gameObject.activeSelf) && child.tag == tag)
1537 return child.gameObject;
1540 if ((
bool)transform.parent)
1542 return transform.parent.FindTagInParents(tag, includeInactive);
1549 for (
int i = 0; i < c.childCount; i++)
1551 T component = c.GetChild(i).GetComponent<T>();
1552 if ((
bool)component)
1562 List<T> list =
new List<T>();
1563 Transform transform = comp.transform;
1564 for (
int i = 0; i < transform.childCount; i++)
1566 T component = transform.GetChild(i).GetComponent<T>();
1567 if ((
bool)component && (includeInactive || component.gameObject.activeInHierarchy))
1569 list.Add(component);
1577 List<T> list =
new List<T>();
1578 Transform transform = comp.transform;
1579 for (
int i = 0; i < transform.childCount; i++)
1581 T component = transform.GetChild(i).GetComponent<T>();
1582 if ((
bool)component && (includeInactive || component.gameObject.activeInHierarchy))
1584 list.Add(component);
1592 Transform transform = comp.transform;
1593 for (
int i = 0; i < transform.childCount; i++)
1595 T component = transform.GetChild(i).GetComponent<T>();
1596 if ((
bool)component)
1604 public static void DestroyChildren(
this Component component,
bool destroyInactive =
false,
bool ignoreDestroy =
true)
1606 if (!component || !component.transform)
1608 Debug.LogWarning(
"DestroyChlidren:" + component);
1611 for (
int num = component.transform.childCount - 1; num >= 0; num--)
1613 GameObject gameObject = component.transform.GetChild(num).gameObject;
1614 if ((!ignoreDestroy || !(gameObject.tag ==
"IgnoreDestroy")) && (destroyInactive || gameObject.activeSelf))
1616 UnityEngine.Object.DestroyImmediate(gameObject);
1623 return RectTransformUtility.RectangleContainsScreenPoint(r, Input.mousePosition, cam);
1630 foreach (Transform
item in c.transform)
1632 if (
item is RectTransform)
1634 item.RebuildLayout(recursive:
true);
1638 LayoutRebuilder.ForceRebuildLayoutImmediate(c.transform as RectTransform);
1644 if ((
bool)c.transform.parent && !c.transform.parent.GetComponent<T>())
1646 c.transform.parent.RebuildLayoutTo<T>();
1653 if (!(c == target) && (
bool)c.transform.parent)
1655 c.transform.parent.RebuildLayoutTo(target);
1659 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)
1661 r.SetPivot(pivotX, pivotY);
1662 r.SetAnchor(minX, minY, maxX, maxY);
1665 r.sizeDelta =
new Vector2(w, h);
1667 r.anchoredPosition =
new Vector2((x == -1f) ? r.anchoredPosition.x : x, (y == -1f) ? r.anchoredPosition.y : y);
1670 public static void SetPivot(
this RectTransform r,
float x,
float y)
1672 r.pivot =
new Vector2(x, y);
1675 public static void SetAnchor(
this RectTransform r,
float minX,
float minY,
float maxX,
float maxY)
1677 r.anchorMin =
new Vector2(minX, minY);
1678 r.anchorMax =
new Vector2(maxX, maxY);
1686 _rect.SetAnchor(0.5f, 1f, 0.5f, 1f);
1689 _rect.SetAnchor(0.5f, 0f, 0.5f, 0f);
1692 _rect.SetAnchor(0f, 1f, 0f, 1f);
1695 _rect.SetAnchor(1f, 1f, 1f, 1f);
1698 _rect.SetAnchor(0f, 0f, 0f, 0f);
1701 _rect.SetAnchor(1f, 0f, 1f, 0f);
1704 _rect.SetAnchor(0f, 0.5f, 0f, 0.5f);
1707 _rect.SetAnchor(1f, 0.5f, 1f, 0.5f);
1710 _rect.SetAnchor(0.5f, 0.5f, 0.5f, 0.5f);
1717 Vector3 position = _rect.position;
1718 _rect._SetAnchor((anchor ==
RectPosition.Auto) ? _rect.GetAnchor() : anchor);
1719 _rect.position = position;
1724 Vector3 position = _rect.position;
1725 int width = Screen.width;
1726 int height = Screen.height;
1727 bool flag = position.y > (float)height * 0.5f;
1728 if (position.x > (
float)width * 0.3f && position.x < (float)width * 0.7f)
1730 if (position.y > (
float)height * 0.3f && position.y < (float)height * 0.7f)
1740 if (position.x < (
float)width * 0.5f)
1757 return trans.GetChild(trans.childCount - 1);
1762 return new Vector2(
self.x,
self.z);
1765 public static void SetScale(
this SpriteRenderer renderer,
float size)
1767 float x = renderer.bounds.size.x;
1768 float y = renderer.bounds.size.y;
1769 float x2 = size / x;
1770 float y2 = size / y;
1771 renderer.transform.localScale =
new Vector3(x2, y2, 1f);
1776 if (
object.Equals(
forward, Vector2.up))
1780 object.Equals(
forward, Vector2.right);
1786 self.LookAt2D(target.position,
forward);
1792 Vector3 vector = target -
self.position;
1793 float num = Mathf.Atan2(vector.y, vector.x) * 57.29578f;
1794 self.rotation = Quaternion.AngleAxis(num - forwardDiffPoint, Vector3.forward);
1797 public static float Distance(
this Transform t, Vector2 pos)
1799 return Vector3.Distance(t.position, pos);
1802 public static Vector3
Plus(
this Vector3 v, Vector2 v2)
1809 public static Vector3
SetZ(
this Vector3 v,
float a)
1815 public static Vector3
SetY(
this Vector3 v,
float a)
1821 public static Vector3
PlusX(
this Vector3 v,
float a)
1827 public static Vector3
PlusY(
this Vector3 v,
float a)
1833 public static Vector3
PlusZ(
this Vector3 v,
float a)
1839 public static void SetPosition(
this Transform transform,
float x,
float y,
float z)
1847 vector3.Set(x, transform.position.y, transform.position.z);
1853 vector3.Set(transform.position.x, y, transform.position.z);
1859 vector3.Set(transform.position.x, transform.position.y, z);
1863 public static void AddPosition(
this Transform transform,
float x,
float y,
float z)
1865 vector3.Set(transform.position.x + x, transform.position.y + y, transform.position.z + z);
1871 vector3.Set(transform.position.x + x, transform.position.y, transform.position.z);
1877 vector3.Set(transform.position.x, transform.position.y + y, transform.position.z);
1883 vector3.Set(transform.position.x, transform.position.y, transform.position.z + z);
1890 transform.localPosition =
vector3;
1895 vector3.Set(x, transform.localPosition.y, transform.localPosition.z);
1896 transform.localPosition =
vector3;
1901 vector3.Set(transform.localPosition.x, y, transform.localPosition.z);
1902 transform.localPosition =
vector3;
1907 vector3.Set(transform.localPosition.x, transform.localPosition.y, z);
1908 transform.localPosition =
vector3;
1913 vector3.Set(transform.localPosition.x + x, transform.localPosition.y + y, transform.localPosition.z + z);
1914 transform.localPosition =
vector3;
1919 vector3.Set(transform.localPosition.x + x, transform.localPosition.y, transform.localPosition.z);
1920 transform.localPosition =
vector3;
1925 vector3.Set(transform.localPosition.x, transform.localPosition.y + y, transform.localPosition.z);
1926 transform.localPosition =
vector3;
1931 vector3.Set(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z + z);
1932 transform.localPosition =
vector3;
1935 public static void SetLocalScale(
this Transform transform,
float x,
float y,
float z)
1938 transform.localScale =
vector3;
1943 vector3.Set(x, transform.localScale.y, transform.localScale.z);
1944 transform.localScale =
vector3;
1949 vector3.Set(transform.localScale.x, y, transform.localScale.z);
1950 transform.localScale =
vector3;
1955 vector3.Set(transform.localScale.x, transform.localScale.y, z);
1956 transform.localScale =
vector3;
1959 public static void AddLocalScale(
this Transform transform,
float x,
float y,
float z)
1961 vector3.Set(transform.localScale.x + x, transform.localScale.y + y, transform.localScale.z + z);
1962 transform.localScale =
vector3;
1967 vector3.Set(transform.localScale.x + x, transform.localScale.y, transform.localScale.z);
1968 transform.localScale =
vector3;
1973 vector3.Set(transform.localScale.x, transform.localScale.y + y, transform.localScale.z);
1974 transform.localScale =
vector3;
1979 vector3.Set(transform.localScale.x, transform.localScale.y, transform.localScale.z + z);
1980 transform.localScale =
vector3;
1983 public static void SetEulerAngles(
this Transform transform,
float x,
float y,
float z)
1986 transform.eulerAngles =
vector3;
1991 vector3.Set(x, transform.localEulerAngles.y, transform.localEulerAngles.z);
1992 transform.eulerAngles =
vector3;
1997 vector3.Set(transform.localEulerAngles.x, y, transform.localEulerAngles.z);
1998 transform.eulerAngles =
vector3;
2003 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y, z);
2004 transform.eulerAngles =
vector3;
2007 public static void AddEulerAngles(
this Transform transform,
float x,
float y,
float z)
2009 vector3.Set(transform.eulerAngles.x + x, transform.eulerAngles.y + y, transform.eulerAngles.z + z);
2010 transform.eulerAngles =
vector3;
2015 vector3.Set(transform.eulerAngles.x + x, transform.eulerAngles.y, transform.eulerAngles.z);
2016 transform.eulerAngles =
vector3;
2021 vector3.Set(transform.eulerAngles.x, transform.eulerAngles.y + y, transform.eulerAngles.z);
2022 transform.eulerAngles =
vector3;
2027 vector3.Set(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z + z);
2028 transform.eulerAngles =
vector3;
2034 transform.localEulerAngles =
vector3;
2039 vector3.Set(x, transform.localEulerAngles.y, transform.localEulerAngles.z);
2040 transform.localEulerAngles =
vector3;
2045 vector3.Set(transform.localEulerAngles.x, y, transform.localEulerAngles.z);
2046 transform.localEulerAngles =
vector3;
2051 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y, z);
2052 transform.localEulerAngles =
vector3;
2057 vector3.Set(transform.localEulerAngles.x + x, transform.localEulerAngles.y + y, transform.localEulerAngles.z + z);
2058 transform.localEulerAngles =
vector3;
2063 vector3.Set(transform.localEulerAngles.x + x, transform.localEulerAngles.y, transform.localEulerAngles.z);
2064 transform.localEulerAngles =
vector3;
2069 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y + y, transform.localEulerAngles.z);
2070 transform.localEulerAngles =
vector3;
2075 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y, transform.localEulerAngles.z + z);
2076 transform.localEulerAngles =
vector3;
2083 m.EnableKeyword(
id);
2087 m.DisableKeyword(
id);
2093 for (
int num = items.Count - 1; num >= 0; num--)
2101 int num = items.Count - 1;
2102 while (num >= 0 && !action(items[num]))
2110 int num = items.LastIndexOf(
item);
2115 items.RemoveAt(num);
2123 return 360f - (0f - angle) % 360f;
2125 return angle % 360f;
2135 string name = s.name;
2136 T val = UnityEngine.Object.Instantiate(s);
2143 Type typeFromHandle = typeof(UnityEventBase);
2144 Assembly assembly = Assembly.GetAssembly(typeFromHandle);
2145 Type type = assembly.GetType(
"UnityEngine.Events.InvokableCallList");
2146 Type type2 = assembly.GetType(
"UnityEngine.Events.BaseInvokableCall");
2147 Type type3 = typeof(List<>).MakeGenericType(type2);
2148 FieldInfo field = typeFromHandle.GetField(
"m_Calls", BindingFlags.Instance | BindingFlags.NonPublic);
2149 FieldInfo field2 = type.GetField(
"m_RuntimeCalls", BindingFlags.Instance | BindingFlags.NonPublic);
2150 object value = field.GetValue(unityEvent);
2151 object value2 = field2.GetValue(value);
2152 return (
int)type3.GetProperty(
"Count").GetValue(value2,
null);
static readonly Dictionary< string, T > fuzzy
static readonly Dictionary< string, T > cached
static readonly bool IsLong
static readonly bool IsInt
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 string RemoveAllTags(this string text)
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 string Pluralize(string s)
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 string Fit(this Text text, string s, string suffix="")
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 string RemoveTag(this string s, string id, char splitter='/')
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 string[] SplitByNewline(this string text)
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 bool HasTag(this string s, string id, char splitter='/')
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 string RemoveNewline(this string text)
static void SetSlider(this Slider slider, float value, Func< float, string > action, bool notify)
static bool RemoveFromEnd< T >(this List< T > items, T item)
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 string AddTag(this string s, string id, char splitter='/')
static void ForeachReverse< T >(this IList< T > items, Action< T > action)
static string ToSentenceCase(this string s)
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 SetTag(this string s, string id, bool enable, char splitter='/')
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 long ToLong(this string str)
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 string GetSpecialArticle(string a)
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)
static LangSetting setting
static string Get(string id)
static string[] GetList(string id)
static string Parse(string idLang, string val1, string val2=null, string val3=null, string val4=null, string val5=null)
static int Range(int min, int max)
string Parse(string idLang, string val1, string val2=null, string val3=null, string val4=null)