|
@@ -1,4 +1,8 @@
|
|
|
+using System.IO;
|
|
|
+using Godot;
|
|
|
using Godot.NativeInterop;
|
|
|
+using GodotTools.Core;
|
|
|
+using static GodotTools.Internals.Globals;
|
|
|
|
|
|
namespace GodotTools.Internals
|
|
|
{
|
|
@@ -34,33 +38,87 @@ namespace GodotTools.Internals
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static string ProjectSlnPath
|
|
|
+ public static string DataEditorToolsDir
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
- Internal.godot_icall_GodotSharpDirs_ProjectSlnPath(out godot_string dest);
|
|
|
+ Internal.godot_icall_GodotSharpDirs_DataEditorToolsDir(out godot_string dest);
|
|
|
using (dest)
|
|
|
return Marshaling.ConvertStringToManaged(dest);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static string ProjectCsProjPath
|
|
|
+ public static void RegisterProjectSettings()
|
|
|
+ {
|
|
|
+ GlobalDef("dotnet/project/assembly_name", "");
|
|
|
+ GlobalDef("dotnet/project/solution_directory", "");
|
|
|
+ GlobalDef("dotnet/project/c#_project_directory", "");
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void DetermineProjectLocation()
|
|
|
+ {
|
|
|
+ static string DetermineProjectName()
|
|
|
+ {
|
|
|
+ string projectAssemblyName = (string)ProjectSettings.GetSetting("application/config/name");
|
|
|
+ projectAssemblyName = projectAssemblyName.ToSafeDirName();
|
|
|
+ if (string.IsNullOrEmpty(projectAssemblyName))
|
|
|
+ projectAssemblyName = "UnnamedProject";
|
|
|
+ return projectAssemblyName;
|
|
|
+ }
|
|
|
+
|
|
|
+ _projectAssemblyName = (string)ProjectSettings.GetSetting("dotnet/project/assembly_name");
|
|
|
+ if (string.IsNullOrEmpty(_projectAssemblyName))
|
|
|
+ {
|
|
|
+ _projectAssemblyName = DetermineProjectName();
|
|
|
+ ProjectSettings.SetSetting("dotnet/project/assembly_name", _projectAssemblyName);
|
|
|
+ }
|
|
|
+
|
|
|
+ string slnParentDir = (string)ProjectSettings.GetSetting("dotnet/project/solution_directory");
|
|
|
+ if (string.IsNullOrEmpty(slnParentDir))
|
|
|
+ slnParentDir = "res://";
|
|
|
+
|
|
|
+ string csprojParentDir = (string)ProjectSettings.GetSetting("dotnet/project/c#_project_directory");
|
|
|
+ if (string.IsNullOrEmpty(csprojParentDir))
|
|
|
+ csprojParentDir = "res://";
|
|
|
+
|
|
|
+ _projectSlnPath = Path.Combine(ProjectSettings.GlobalizePath(slnParentDir),
|
|
|
+ string.Concat(_projectAssemblyName, ".sln"));
|
|
|
+
|
|
|
+ _projectCsProjPath = Path.Combine(ProjectSettings.GlobalizePath(csprojParentDir),
|
|
|
+ string.Concat(_projectAssemblyName, ".csproj"));
|
|
|
+ }
|
|
|
+
|
|
|
+ private static string _projectAssemblyName;
|
|
|
+ private static string _projectSlnPath;
|
|
|
+ private static string _projectCsProjPath;
|
|
|
+
|
|
|
+ public static string ProjectAssemblyName
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
- Internal.godot_icall_GodotSharpDirs_ProjectCsProjPath(out godot_string dest);
|
|
|
- using (dest)
|
|
|
- return Marshaling.ConvertStringToManaged(dest);
|
|
|
+ if (_projectAssemblyName == null)
|
|
|
+ DetermineProjectLocation();
|
|
|
+ return _projectAssemblyName;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static string DataEditorToolsDir
|
|
|
+ public static string ProjectSlnPath
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
- Internal.godot_icall_GodotSharpDirs_DataEditorToolsDir(out godot_string dest);
|
|
|
- using (dest)
|
|
|
- return Marshaling.ConvertStringToManaged(dest);
|
|
|
+ if (_projectSlnPath == null)
|
|
|
+ DetermineProjectLocation();
|
|
|
+ return _projectSlnPath;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static string ProjectCsProjPath
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ if (_projectCsProjPath == null)
|
|
|
+ DetermineProjectLocation();
|
|
|
+ return _projectCsProjPath;
|
|
|
}
|
|
|
}
|
|
|
}
|