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 void SetSlider(
this Slider slider,
float value, Func<float, string> action,
bool notify)
1351 slider.SetSlider(value, action, -1, -1, notify);
1354 public static void SetSlider(
this Slider slider,
float value, Func<float, string> action,
int min = -1,
int max = -1,
bool notify =
true)
1356 slider.onValueChanged.RemoveAllListeners();
1357 slider.onValueChanged.AddListener(delegate(
float a)
1359 slider.GetComponentInChildren<Text>(includeInactive:
true).text = action(a);
1363 slider.minValue = min;
1364 slider.maxValue = max;
1368 slider.value = value;
1372 slider.SetValueWithoutNotify(value);
1374 slider.GetComponentInChildren<Text>(includeInactive:
true).text = action(value);
1379 T val = t.gameObject.GetComponent<T>();
1382 val = t.gameObject.AddComponent<T>();
1387 public static RectTransform
Rect(
this Component c)
1389 return c.transform as RectTransform;
1392 public static void CopyRect(
this RectTransform r, RectTransform t)
1395 r.sizeDelta = t.sizeDelta;
1396 r.anchorMin = t.anchorMin;
1397 r.anchorMax = t.anchorMax;
1398 r.anchoredPosition = t.anchoredPosition;
1403 c.SetActive(!c.gameObject.activeSelf);
1408 if (c.gameObject.activeSelf != enable)
1410 c.gameObject.SetActive(enable);
1414 public static void SetActive(
this Component c,
bool enable, Action<bool> onChangeState)
1416 if (c.gameObject.activeSelf != enable)
1418 c.gameObject.SetActive(enable);
1419 onChangeState(enable);
1425 return go.GetComponentInChildren<Selectable>();
1431 foreach (Transform
item in obj.transform)
1433 item.gameObject.SetLayerRecursively(layer);
1439 Selectable selectable = (obj ? obj.GetComponent<Selectable>() :
null);
1440 if ((
bool)selectable)
1442 return selectable.interactable;
1447 public static bool IsChildOf(
this GameObject c, GameObject root)
1449 if (c.transform == root.transform)
1453 if ((
bool)c.transform.parent)
1455 return c.transform.parent.gameObject.IsChildOf(root);
1462 return c.gameObject.scene.name ==
null;
1465 public static T
CreateMold<T>(
this Component c,
string name =
null) where T : Component
1468 for (
int i = 0; i < c.transform.childCount; i++)
1470 T component = c.transform.GetChild(i).GetComponent<T>();
1471 if ((
bool)component && (name.IsEmpty() || name == component.name))
1473 component.gameObject.SetActive(value:
false);
1478 c.DestroyChildren();
1482 public static Transform
Find(
this Component c,
string name =
null)
1484 return c.Find<Transform>(name);
1487 public static T
Find<T>(
this Component c,
string name =
null,
bool recursive =
false) where T : Component
1491 T[] componentsInChildren = c.transform.GetComponentsInChildren<T>();
1492 foreach (T val
in componentsInChildren)
1494 if (name ==
null || name == val.name)
1501 for (
int j = 0; j < c.transform.childCount; j++)
1503 T component = c.transform.GetChild(j).GetComponent<T>();
1504 if ((
bool)component && (name ==
null || name == component.name))
1512 public static GameObject
FindTagInParents(
this Component c,
string tag,
bool includeInactive =
true)
1514 Transform transform = c.transform;
1515 for (
int i = 0; i < transform.childCount; i++)
1517 Transform child = transform.GetChild(i);
1518 if ((includeInactive || child.gameObject.activeSelf) && child.tag == tag)
1520 return child.gameObject;
1523 if ((
bool)transform.parent)
1525 return transform.parent.FindTagInParents(tag, includeInactive);
1532 for (
int i = 0; i < c.childCount; i++)
1534 T component = c.GetChild(i).GetComponent<T>();
1535 if ((
bool)component)
1545 List<T> list =
new List<T>();
1546 Transform transform = comp.transform;
1547 for (
int i = 0; i < transform.childCount; i++)
1549 T component = transform.GetChild(i).GetComponent<T>();
1550 if ((
bool)component && (includeInactive || component.gameObject.activeInHierarchy))
1552 list.Add(component);
1560 List<T> list =
new List<T>();
1561 Transform transform = comp.transform;
1562 for (
int i = 0; i < transform.childCount; i++)
1564 T component = transform.GetChild(i).GetComponent<T>();
1565 if ((
bool)component && (includeInactive || component.gameObject.activeInHierarchy))
1567 list.Add(component);
1575 Transform transform = comp.transform;
1576 for (
int i = 0; i < transform.childCount; i++)
1578 T component = transform.GetChild(i).GetComponent<T>();
1579 if ((
bool)component)
1587 public static void DestroyChildren(
this Component component,
bool destroyInactive =
false,
bool ignoreDestroy =
true)
1589 if (!component || !component.transform)
1591 Debug.LogWarning(
"DestroyChlidren:" + component);
1594 for (
int num = component.transform.childCount - 1; num >= 0; num--)
1596 GameObject gameObject = component.transform.GetChild(num).gameObject;
1597 if ((!ignoreDestroy || !(gameObject.tag ==
"IgnoreDestroy")) && (destroyInactive || gameObject.activeSelf))
1599 UnityEngine.Object.DestroyImmediate(gameObject);
1606 return RectTransformUtility.RectangleContainsScreenPoint(r, Input.mousePosition, cam);
1613 foreach (Transform
item in c.transform)
1615 if (
item is RectTransform)
1617 item.RebuildLayout(recursive:
true);
1621 LayoutRebuilder.ForceRebuildLayoutImmediate(c.transform as RectTransform);
1627 if ((
bool)c.transform.parent && !c.transform.parent.GetComponent<T>())
1629 c.transform.parent.RebuildLayoutTo<T>();
1636 if (!(c == target) && (
bool)c.transform.parent)
1638 c.transform.parent.RebuildLayoutTo(target);
1642 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)
1644 r.SetPivot(pivotX, pivotY);
1645 r.SetAnchor(minX, minY, maxX, maxY);
1648 r.sizeDelta =
new Vector2(w, h);
1650 r.anchoredPosition =
new Vector2((x == -1f) ? r.anchoredPosition.x : x, (y == -1f) ? r.anchoredPosition.y : y);
1653 public static void SetPivot(
this RectTransform r,
float x,
float y)
1655 r.pivot =
new Vector2(x, y);
1658 public static void SetAnchor(
this RectTransform r,
float minX,
float minY,
float maxX,
float maxY)
1660 r.anchorMin =
new Vector2(minX, minY);
1661 r.anchorMax =
new Vector2(maxX, maxY);
1669 _rect.SetAnchor(0.5f, 1f, 0.5f, 1f);
1672 _rect.SetAnchor(0.5f, 0f, 0.5f, 0f);
1675 _rect.SetAnchor(0f, 1f, 0f, 1f);
1678 _rect.SetAnchor(1f, 1f, 1f, 1f);
1681 _rect.SetAnchor(0f, 0f, 0f, 0f);
1684 _rect.SetAnchor(1f, 0f, 1f, 0f);
1687 _rect.SetAnchor(0f, 0.5f, 0f, 0.5f);
1690 _rect.SetAnchor(1f, 0.5f, 1f, 0.5f);
1693 _rect.SetAnchor(0.5f, 0.5f, 0.5f, 0.5f);
1700 Vector3 position = _rect.position;
1701 _rect._SetAnchor((anchor ==
RectPosition.Auto) ? _rect.GetAnchor() : anchor);
1702 _rect.position = position;
1707 Vector3 position = _rect.position;
1708 int width = Screen.width;
1709 int height = Screen.height;
1710 bool flag = position.y > (float)height * 0.5f;
1711 if (position.x > (
float)width * 0.3f && position.x < (float)width * 0.7f)
1713 if (position.y > (
float)height * 0.3f && position.y < (float)height * 0.7f)
1723 if (position.x < (
float)width * 0.5f)
1740 return trans.GetChild(trans.childCount - 1);
1745 return new Vector2(
self.x,
self.z);
1748 public static void SetScale(
this SpriteRenderer renderer,
float size)
1750 float x = renderer.bounds.size.x;
1751 float y = renderer.bounds.size.y;
1752 float x2 = size / x;
1753 float y2 = size / y;
1754 renderer.transform.localScale =
new Vector3(x2, y2, 1f);
1759 if (
object.Equals(
forward, Vector2.up))
1763 object.Equals(
forward, Vector2.right);
1769 self.LookAt2D(target.position,
forward);
1775 Vector3 vector = target -
self.position;
1776 float num = Mathf.Atan2(vector.y, vector.x) * 57.29578f;
1777 self.rotation = Quaternion.AngleAxis(num - forwardDiffPoint, Vector3.forward);
1780 public static float Distance(
this Transform t, Vector2 pos)
1782 return Vector3.Distance(t.position, pos);
1785 public static Vector3
Plus(
this Vector3 v, Vector2 v2)
1792 public static Vector3
SetZ(
this Vector3 v,
float a)
1798 public static Vector3
SetY(
this Vector3 v,
float a)
1804 public static Vector3
PlusX(
this Vector3 v,
float a)
1810 public static Vector3
PlusY(
this Vector3 v,
float a)
1816 public static Vector3
PlusZ(
this Vector3 v,
float a)
1822 public static void SetPosition(
this Transform transform,
float x,
float y,
float z)
1830 vector3.Set(x, transform.position.y, transform.position.z);
1836 vector3.Set(transform.position.x, y, transform.position.z);
1842 vector3.Set(transform.position.x, transform.position.y, z);
1846 public static void AddPosition(
this Transform transform,
float x,
float y,
float z)
1848 vector3.Set(transform.position.x + x, transform.position.y + y, transform.position.z + z);
1854 vector3.Set(transform.position.x + x, transform.position.y, transform.position.z);
1860 vector3.Set(transform.position.x, transform.position.y + y, transform.position.z);
1866 vector3.Set(transform.position.x, transform.position.y, transform.position.z + z);
1873 transform.localPosition =
vector3;
1878 vector3.Set(x, transform.localPosition.y, transform.localPosition.z);
1879 transform.localPosition =
vector3;
1884 vector3.Set(transform.localPosition.x, y, transform.localPosition.z);
1885 transform.localPosition =
vector3;
1890 vector3.Set(transform.localPosition.x, transform.localPosition.y, z);
1891 transform.localPosition =
vector3;
1896 vector3.Set(transform.localPosition.x + x, transform.localPosition.y + y, transform.localPosition.z + z);
1897 transform.localPosition =
vector3;
1902 vector3.Set(transform.localPosition.x + x, transform.localPosition.y, transform.localPosition.z);
1903 transform.localPosition =
vector3;
1908 vector3.Set(transform.localPosition.x, transform.localPosition.y + y, transform.localPosition.z);
1909 transform.localPosition =
vector3;
1914 vector3.Set(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z + z);
1915 transform.localPosition =
vector3;
1918 public static void SetLocalScale(
this Transform transform,
float x,
float y,
float z)
1921 transform.localScale =
vector3;
1926 vector3.Set(x, transform.localScale.y, transform.localScale.z);
1927 transform.localScale =
vector3;
1932 vector3.Set(transform.localScale.x, y, transform.localScale.z);
1933 transform.localScale =
vector3;
1938 vector3.Set(transform.localScale.x, transform.localScale.y, z);
1939 transform.localScale =
vector3;
1942 public static void AddLocalScale(
this Transform transform,
float x,
float y,
float z)
1944 vector3.Set(transform.localScale.x + x, transform.localScale.y + y, transform.localScale.z + z);
1945 transform.localScale =
vector3;
1950 vector3.Set(transform.localScale.x + x, transform.localScale.y, transform.localScale.z);
1951 transform.localScale =
vector3;
1956 vector3.Set(transform.localScale.x, transform.localScale.y + y, transform.localScale.z);
1957 transform.localScale =
vector3;
1962 vector3.Set(transform.localScale.x, transform.localScale.y, transform.localScale.z + z);
1963 transform.localScale =
vector3;
1966 public static void SetEulerAngles(
this Transform transform,
float x,
float y,
float z)
1969 transform.eulerAngles =
vector3;
1974 vector3.Set(x, transform.localEulerAngles.y, transform.localEulerAngles.z);
1975 transform.eulerAngles =
vector3;
1980 vector3.Set(transform.localEulerAngles.x, y, transform.localEulerAngles.z);
1981 transform.eulerAngles =
vector3;
1986 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y, z);
1987 transform.eulerAngles =
vector3;
1990 public static void AddEulerAngles(
this Transform transform,
float x,
float y,
float z)
1992 vector3.Set(transform.eulerAngles.x + x, transform.eulerAngles.y + y, transform.eulerAngles.z + z);
1993 transform.eulerAngles =
vector3;
1998 vector3.Set(transform.eulerAngles.x + x, transform.eulerAngles.y, transform.eulerAngles.z);
1999 transform.eulerAngles =
vector3;
2004 vector3.Set(transform.eulerAngles.x, transform.eulerAngles.y + y, transform.eulerAngles.z);
2005 transform.eulerAngles =
vector3;
2010 vector3.Set(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z + z);
2011 transform.eulerAngles =
vector3;
2017 transform.localEulerAngles =
vector3;
2022 vector3.Set(x, transform.localEulerAngles.y, transform.localEulerAngles.z);
2023 transform.localEulerAngles =
vector3;
2028 vector3.Set(transform.localEulerAngles.x, y, transform.localEulerAngles.z);
2029 transform.localEulerAngles =
vector3;
2034 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y, z);
2035 transform.localEulerAngles =
vector3;
2040 vector3.Set(transform.localEulerAngles.x + x, transform.localEulerAngles.y + y, transform.localEulerAngles.z + z);
2041 transform.localEulerAngles =
vector3;
2046 vector3.Set(transform.localEulerAngles.x + x, transform.localEulerAngles.y, transform.localEulerAngles.z);
2047 transform.localEulerAngles =
vector3;
2052 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y + y, transform.localEulerAngles.z);
2053 transform.localEulerAngles =
vector3;
2058 vector3.Set(transform.localEulerAngles.x, transform.localEulerAngles.y, transform.localEulerAngles.z + z);
2059 transform.localEulerAngles =
vector3;
2066 m.EnableKeyword(
id);
2070 m.DisableKeyword(
id);
2076 for (
int num = items.Count - 1; num >= 0; num--)
2084 int num = items.Count - 1;
2085 while (num >= 0 && !action(items[num]))
2093 int num = items.LastIndexOf(
item);
2098 items.RemoveAt(num);
2106 return 360f - (0f - angle) % 360f;
2108 return angle % 360f;
2118 string name = s.name;
2119 T val = UnityEngine.Object.Instantiate(s);
2126 Type typeFromHandle = typeof(UnityEventBase);
2127 Assembly assembly = Assembly.GetAssembly(typeFromHandle);
2128 Type type = assembly.GetType(
"UnityEngine.Events.InvokableCallList");
2129 Type type2 = assembly.GetType(
"UnityEngine.Events.BaseInvokableCall");
2130 Type type3 = typeof(List<>).MakeGenericType(type2);
2131 FieldInfo field = typeFromHandle.GetField(
"m_Calls", BindingFlags.Instance | BindingFlags.NonPublic);
2132 FieldInfo field2 = type.GetField(
"m_RuntimeCalls", BindingFlags.Instance | BindingFlags.NonPublic);
2133 object value = field.GetValue(unityEvent);
2134 object value2 = field2.GetValue(value);
2135 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 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)