| 3268 | } |
| 3269 | |
| 3270 | bool |
| 3271 | SK_Unity_SetupInputHooks (void) |
| 3272 | { |
| 3273 | // Mono not init'd |
| 3274 | if (SK_mono_thread_attach == nullptr) |
| 3275 | return false; |
| 3276 | |
| 3277 | if (! SK_mono_image_loaded ("Assembly-CSharp")) |
| 3278 | { |
| 3279 | return false; |
| 3280 | } |
| 3281 | |
| 3282 | static HANDLE hMonoInitFinished = |
| 3283 | SK_CreateEvent (nullptr, FALSE, FALSE, nullptr); |
| 3284 | |
| 3285 | // Create a managed thread to keep assemblies and their JIT'd functions alive. |
| 3286 | SK_RunOnce ( |
| 3287 | SK_Thread_CreateEx ([](LPVOID)->DWORD |
| 3288 | { |
| 3289 | AttachThread (); |
| 3290 | |
| 3291 | // Optional, may not exist. |
| 3292 | LoadMonoAssembly ("Assembly-CSharp-firstpass"); |
| 3293 | LoadMonoAssembly ("InControl"); |
| 3294 | LoadMonoAssembly ("Rewired_Core"); |
| 3295 | LoadMonoAssembly ("UnityEngine.CoreModule"); |
| 3296 | |
| 3297 | SK_Unity_MonoAssemblies.assemblyCSharp = SK_mono_image_loaded ("Assembly-CSharp"); |
| 3298 | SK_Unity_MonoAssemblies.assemblyCSharp_firstpass = SK_mono_image_loaded ("Assembly-CSharp-firstpass"); |
| 3299 | SK_Unity_MonoAssemblies.assemblyInControl = SK_mono_image_loaded ("InControl"); |
| 3300 | SK_Unity_MonoAssemblies.assemblyRewired = SK_mono_image_loaded ("Rewired_Core"); |
| 3301 | |
| 3302 | auto assemblyInControl = |
| 3303 | SK_Unity_MonoAssemblies.assemblyInControl != nullptr ? |
| 3304 | SK_Unity_MonoAssemblies.assemblyInControl : |
| 3305 | SK_Unity_MonoAssemblies.assemblyCSharp; |
| 3306 | |
| 3307 | if (assemblyInControl == SK_Unity_MonoAssemblies.assemblyCSharp && |
| 3308 | assemblyInControl != nullptr && |
| 3309 | SK_mono_class_from_name (assemblyInControl, "InControl", "InputDevice") == nullptr) |
| 3310 | { |
| 3311 | assemblyInControl = SK_Unity_MonoAssemblies.assemblyCSharp_firstpass; |
| 3312 | |
| 3313 | if ( assemblyInControl != nullptr && |
| 3314 | SK_mono_class_from_name (assemblyInControl, "InControl", "InputDevice")) |
| 3315 | { |
| 3316 | SK_LOGi0 ( |
| 3317 | L"InControl not found in Assembly-CSharp, but was found in Assembly-CSharp-firstpass!" |
| 3318 | ); |
| 3319 | } |
| 3320 | } |
| 3321 | |
| 3322 | const char* assemblyInControl_filename = |
| 3323 | assemblyInControl == SK_Unity_MonoAssemblies.assemblyCSharp ? "Assembly-CSharp" : |
| 3324 | assemblyInControl == SK_Unity_MonoAssemblies.assemblyCSharp_firstpass ? "Assembly-CSharp-firstpass" |
| 3325 | : "InControl"; |
| 3326 | |
| 3327 | SK_Unity_MonoAssemblies.assemblyInControl = assemblyInControl; |
no test coverage detected