mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-20 11:39:54 +00:00
* Well lets try check this * Some changes * Change * Well * Change ControllerManager.Update * Nothing * Optimaze more? * Fix error build * Fix win check * Change * Fix * Optimaze some roles in OnCheckPlayerPosition * More optimaze * Full optimaze roles in OnGlobalFixedUpdate * Optimaze some add-ons * ProgressText * Change * Optimaze NameNotifyManager * Optimaze NotifyRoles and some roles * Move the displayed version * Some changes * Optimaze OnFixedUpdate in some roles * Fix bugs * Optimaze IsActive & V4 version * Optimaze MapRoom.DoorsUpdate * Cache TryCatch in IsActive * Change * Fix * More optimze TaskPanelBehaviour * Cache GetRoleColor & ColorString & AllStringNames & Change RemoveHtmlTags * Cache TryCast VentilationSystem & ICriticalSabotage & IUsable and more optimaze * Fix CountAlivePlayers * Fix exceptios * Replace some CachedAllPlayerControls to EnumeratePlayerControls * Replace some CachedAlivePlayerControls to EnumerateAlivePlayerControls * Fixes * Fix modded clients * Fix errors * Fix again * Optimaze & add null check * Fix crash in Starlight * Use only Main.PluginVersion in LobbySharingAPI * Optimaze code in FixedUpdate * Fix * Optimize GetProgressText for Roles * Some changes in Translations * Cache Enum.GetValues and StringBuilder * Changes * CustomRole.ColoredTextByRole() * Optimaze Lobby & Meeting * ColorStringPrefix => ColorPrefix * Add null check * Remove * Fixes & optimaze * Fixes * Changes * Fix * Fix * Fix * Remove * Fix * Change * Revert
96 lines
2.6 KiB
C#
96 lines
2.6 KiB
C#
using System;
|
|
using System.Linq.Expressions;
|
|
using System.Reflection;
|
|
using Il2CppInterop.Runtime.InteropTypes;
|
|
using UnityEngine;
|
|
|
|
namespace EHR;
|
|
|
|
public static class ObjectHelper
|
|
{
|
|
public static void DestroyTranslator(this GameObject obj)
|
|
{
|
|
if (!obj) return;
|
|
|
|
obj.ForEachChild((Il2CppSystem.Action<GameObject>)(x => x.DestroyTranslator()));
|
|
TextTranslatorTMP[] translator = obj.GetComponentsInChildren<TextTranslatorTMP>(true);
|
|
translator?.Do(Object.Destroy);
|
|
}
|
|
|
|
public static void DestroyTranslator(this MonoBehaviour obj)
|
|
{
|
|
obj?.gameObject.DestroyTranslator();
|
|
}
|
|
|
|
// From: Project Lotus - by Discussions
|
|
public static bool HasParentInHierarchy(this GameObject obj, string parentPath)
|
|
{
|
|
string[] pathParts = parentPath.Split('/');
|
|
int pathIndex = pathParts.Length - 1;
|
|
Transform current = obj.transform;
|
|
|
|
while (current)
|
|
{
|
|
if (current.name == pathParts[pathIndex])
|
|
{
|
|
pathIndex--;
|
|
if (pathIndex < 0) return true;
|
|
}
|
|
else pathIndex = pathParts.Length - 1;
|
|
|
|
current = current.parent;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// The codes below I stole from TommyXL
|
|
public static class Il2CppCastHelper
|
|
{
|
|
public static T CastFast<T>(this Il2CppObjectBase obj) where T : Il2CppObjectBase
|
|
{
|
|
if (obj is T casted) return casted;
|
|
return OperatingSystem.IsAndroid() ? obj.Cast<T>() : obj.Pointer.CastFast<T>();
|
|
}
|
|
|
|
private static T CastFast<T>(this IntPtr ptr) where T : Il2CppObjectBase
|
|
{
|
|
return CastHelper<T>.Cast(ptr);
|
|
}
|
|
|
|
private static class CastHelper<T> where T : Il2CppObjectBase
|
|
{
|
|
public static readonly Func<IntPtr, T> Cast;
|
|
|
|
static CastHelper()
|
|
{
|
|
ConstructorInfo constructor = typeof(T).GetConstructor([typeof(IntPtr)]);
|
|
ParameterExpression ptr = Expression.Parameter(typeof(IntPtr));
|
|
NewExpression create = Expression.New(constructor!, ptr);
|
|
Expression<Func<IntPtr, T>> lambda = Expression.Lambda<Func<IntPtr, T>>(create, ptr);
|
|
Cast = lambda.Compile();
|
|
}
|
|
}
|
|
|
|
public static bool TryCastFast<T>(this Il2CppObjectBase obj, out T casted) where T : Il2CppObjectBase
|
|
{
|
|
if (obj is T t)
|
|
{
|
|
casted = t;
|
|
return true;
|
|
}
|
|
|
|
if (obj == null)
|
|
{
|
|
casted = null;
|
|
return false;
|
|
}
|
|
|
|
casted = OperatingSystem.IsAndroid()
|
|
? obj.Cast<T>()
|
|
: obj.Pointer.CastFast<T>();
|
|
|
|
return casted != null;
|
|
}
|
|
} |