You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
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.
53 lines
1.7 KiB
C#
53 lines
1.7 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Text;
|
|
using Microsoft.Build.Construction;
|
|
using Microsoft.Build.Evaluation;
|
|
using GodotTools.Shared;
|
|
|
|
namespace GodotTools.ProjectEditor
|
|
{
|
|
public static class ProjectGenerator
|
|
{
|
|
public static string GodotSdkAttrValue => $"Godot.NET.Sdk/{GeneratedGodotNupkgsVersions.GodotNETSdk}";
|
|
|
|
public static ProjectRootElement GenGameProject(string name)
|
|
{
|
|
if (name.Length == 0)
|
|
throw new ArgumentException("Project name is empty", nameof(name));
|
|
|
|
var root = ProjectRootElement.Create(NewProjectFileOptions.None);
|
|
|
|
root.Sdk = GodotSdkAttrValue;
|
|
|
|
var mainGroup = root.AddPropertyGroup();
|
|
mainGroup.AddProperty("TargetFramework", "net5.0");
|
|
mainGroup.AddProperty("EnableDynamicLoading", "true");
|
|
|
|
string sanitizedName = IdentifierUtils.SanitizeQualifiedIdentifier(name, allowEmptyIdentifiers: true);
|
|
|
|
// If the name is not a valid namespace, manually set RootNamespace to a sanitized one.
|
|
if (sanitizedName != name)
|
|
mainGroup.AddProperty("RootNamespace", sanitizedName);
|
|
|
|
return root;
|
|
}
|
|
|
|
public static string GenAndSaveGameProject(string dir, string name)
|
|
{
|
|
if (name.Length == 0)
|
|
throw new ArgumentException("Project name is empty", nameof(name));
|
|
|
|
string path = Path.Combine(dir, name + ".csproj");
|
|
|
|
var root = GenGameProject(name);
|
|
|
|
// Save (without BOM)
|
|
root.Save(path, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
|
|
|
|
return Guid.NewGuid().ToString().ToUpperInvariant();
|
|
}
|
|
}
|
|
}
|