123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using Harmony;
- using UnityEngine;
- using UnityEngine.UI;
- using XUnity.AutoTranslator.Plugin.Core.Constants;
- using XUnity.AutoTranslator.Plugin.Core.Extensions;
- namespace XUnity.AutoTranslator.Plugin.Core.Hooks
- {
- internal static class ImageHooks
- {
- public static readonly Type[] All = new[] {
- typeof( MaskableGraphic_OnEnable_Hook ),
- typeof( Image_sprite_Hook ),
- typeof( Image_overrideSprite_Hook ),
- typeof( Image_material_Hook ),
- typeof( RawImage_texture_Hook ),
- typeof( Cursor_SetCursor_Hook ),
- typeof( SpriteRenderer_sprite_Hook ),
- typeof( Sprite_texture_Hook ),
- // fallback hooks on material (Prefix hooks)
- typeof( Material_mainTexture_Hook ),
- // Live2D
- typeof( CubismRenderer_MainTexture_Hook ),
- typeof( CubismRenderer_TryInitialize_Hook ),
- // NGUI
- typeof( UIAtlas_spriteMaterial_Hook ),
- typeof( UISprite_OnInit_Hook ),
- typeof( UISprite_material_Hook ),
- typeof( UISprite_atlas_Hook ),
- typeof( UI2DSprite_sprite2D_Hook ),
- typeof( UI2DSprite_material_Hook ),
- typeof( UITexture_mainTexture_Hook ),
- typeof( UITexture_material_Hook ),
- typeof( UIPanel_clipTexture_Hook ),
- typeof( UIRect_OnInit_Hook ),
- // Utage
- typeof( DicingTextures_GetTexture_Hook ),
- };
- }
- [Harmony]
- internal static class DicingTextures_GetTexture_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.DicingTextures != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Method( ClrTypes.DicingTextures, "GetTexture", new[] { typeof( string ) } );
- }
- public static void Postfix( object __instance, Texture2D __result )
- {
- AutoTranslationPlugin.Current.Hook_ImageChanged( __result, false );
- }
- }
- [Harmony]
- internal static class Sprite_texture_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.Sprite != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.Sprite, "texture" )?.GetGetMethod();
- }
- static void Postfix( Texture2D __result )
- {
- AutoTranslationPlugin.Current.Hook_ImageChanged( __result, true );
- }
- static bool RequireRuntimeHooker => true;
- }
- [Harmony]
- internal static class SpriteRenderer_sprite_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.SpriteRenderer != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.SpriteRenderer, "sprite" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class CubismRenderer_MainTexture_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.CubismRenderer != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.CubismRenderer, "MainTexture" )?.GetSetMethod();
- }
- public static void Prefix( object __instance, Texture2D value )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, value, true , false);
- }
- }
- [Harmony]
- internal static class CubismRenderer_TryInitialize_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.CubismRenderer != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Method( ClrTypes.CubismRenderer, "TryInitialize" );
- }
- public static void Prefix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, true, true );
- }
- }
- [Harmony]
- internal static class Material_mainTexture_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return true;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( typeof( Material ), "mainTexture" )?.GetSetMethod();
- }
- public static void Prefix( object __instance, Texture value )
- {
- if( value is Texture2D texture2d )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, texture2d, true, false );
- }
- }
- }
- [Harmony]
- internal static class MaskableGraphic_OnEnable_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return true;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Method( typeof( MaskableGraphic ), "OnEnable" );
- }
- public static void Postfix( object __instance )
- {
- if( __instance is Image || __instance is RawImage )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, true );
- }
- }
- }
- [Harmony]
- internal static class Image_sprite_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return true;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( typeof( Image ), "sprite" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class Image_overrideSprite_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return true;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( typeof( Image ), "overrideSprite" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class Image_material_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return true;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( typeof( Image ), "material" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class RawImage_texture_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return true;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( typeof( RawImage ), "texture" )?.GetSetMethod();
- }
- public static void Prefix( object __instance, Texture value )
- {
- if( value is Texture2D texture2d )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, texture2d, true, false );
- }
- }
- }
- [Harmony]
- internal static class Cursor_SetCursor_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return true;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Method( typeof( Cursor ), "SetCursor", new[] { typeof( Texture2D ), typeof( Vector2 ), typeof( CursorMode ) } );
- }
- public static void Prefix( Texture2D texture )
- {
- AutoTranslationPlugin.Current.Hook_ImageChanged( texture, true );
- }
- }
- [Harmony]
- internal static class UIAtlas_spriteMaterial_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UIAtlas != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UIAtlas, "spriteMaterial" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UISprite_OnInit_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UISprite != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Method( Constants.ClrTypes.UISprite, "OnInit" );
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, true );
- }
- }
- [Harmony]
- internal static class UISprite_material_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UISprite != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UISprite, "material" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UISprite_atlas_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UISprite != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UISprite, "atlas" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UITexture_mainTexture_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UITexture != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UITexture, "mainTexture" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UITexture_material_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UITexture != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UITexture, "material" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UIRect_OnInit_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UIRect != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Method( ClrTypes.UIRect, "OnInit" );
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, true );
- }
- }
- [Harmony]
- internal static class UI2DSprite_sprite2D_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UI2DSprite != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UI2DSprite, "sprite2D" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UI2DSprite_material_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UI2DSprite != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UI2DSprite, "material" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UIPanel_clipTexture_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UIPanel != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UIPanel, "clipTexture" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UIFont_material_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UIFont != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UIFont, "material" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UIFont_dynamicFont_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UIFont != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UIFont, "dynamicFont" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UILabel_bitmapFont_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UILabel != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UILabel, "bitmapFont" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- [Harmony]
- internal static class UILabel_trueTypeFont_Hook
- {
- static bool Prepare( HarmonyInstance instance )
- {
- return ClrTypes.UILabel != null;
- }
- static MethodBase TargetMethod( HarmonyInstance instance )
- {
- return AccessTools.Property( ClrTypes.UILabel, "trueTypeFont" )?.GetSetMethod();
- }
- public static void Postfix( object __instance )
- {
- AutoTranslationPlugin.Current.Hook_ImageChangedOnComponent( __instance, null, false, false );
- }
- }
- }
|