mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	 687633e5bd
			
		
	
	
		687633e5bd
		
			
		
	
	
	
	
		
			
			Use the `.generated` suffix instead of `_Generated` so .NET marks C# file generated by Godot source generators as generated code.
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Text;
 | |
| using Microsoft.CodeAnalysis;
 | |
| using Microsoft.CodeAnalysis.Text;
 | |
| 
 | |
| namespace Godot.SourceGenerators
 | |
| {
 | |
|     [Generator]
 | |
|     public class GodotPluginsInitializerGenerator : ISourceGenerator
 | |
|     {
 | |
|         public void Initialize(GeneratorInitializationContext context)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         public void Execute(GeneratorExecutionContext context)
 | |
|         {
 | |
|             if (context.IsGodotToolsProject())
 | |
|                 return;
 | |
| 
 | |
|             string source =
 | |
|                 @"using System;
 | |
| using System.Runtime.InteropServices;
 | |
| using Godot.Bridge;
 | |
| using Godot.NativeInterop;
 | |
| 
 | |
| namespace GodotPlugins.Game
 | |
| {
 | |
|     internal static partial class Main
 | |
|     {
 | |
|         [UnmanagedCallersOnly(EntryPoint = ""godotsharp_game_main_init"")]
 | |
|         private static godot_bool InitializeFromGameProject(IntPtr godotDllHandle, IntPtr outManagedCallbacks,
 | |
|             IntPtr unmanagedCallbacks, int unmanagedCallbacksSize)
 | |
|         {
 | |
|             try
 | |
|             {
 | |
|                 DllImportResolver dllImportResolver = new GodotDllImportResolver(godotDllHandle).OnResolveDllImport;
 | |
| 
 | |
|                 var coreApiAssembly = typeof(Godot.Object).Assembly;
 | |
| 
 | |
|                 NativeLibrary.SetDllImportResolver(coreApiAssembly, dllImportResolver);
 | |
| 
 | |
|                 NativeFuncs.Initialize(unmanagedCallbacks, unmanagedCallbacksSize);
 | |
| 
 | |
|                 ManagedCallbacks.Create(outManagedCallbacks);
 | |
| 
 | |
|                 ScriptManagerBridge.LookupScriptsInAssembly(typeof(GodotPlugins.Game.Main).Assembly);
 | |
| 
 | |
|                 return godot_bool.True;
 | |
|             }
 | |
|             catch (Exception e)
 | |
|             {
 | |
|                 Console.Error.WriteLine(e);
 | |
|                 return false.ToGodotBool();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| ";
 | |
| 
 | |
|             context.AddSource("GodotPlugins.Game.generated",
 | |
|                 SourceText.From(source, Encoding.UTF8));
 | |
|         }
 | |
|     }
 | |
| }
 |