88e367a406
This base implementation is still very barebones but it defines the path for how exporting will work (at least when embedding the .NET runtime). Many manual steps are still needed, which should be automatized in the future. For example, in addition to the API assemblies, now you also need to copy the GodotPlugins assembly to each game project.
58 lines
1.5 KiB
C#
58 lines
1.5 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]
|
|
private static godot_bool InitializeFromGameProject(IntPtr outManagedCallbacks)
|
|
{
|
|
try
|
|
{
|
|
var coreApiAssembly = typeof(Godot.Object).Assembly;
|
|
|
|
NativeLibrary.SetDllImportResolver(coreApiAssembly, GodotDllImportResolver.OnResolveDllImport);
|
|
|
|
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));
|
|
}
|
|
}
|
|
}
|