[3.x] Some more C# formatting and style fixes

This commit is contained in:
Aaron Franke 2021-09-17 21:01:08 -05:00
parent bb2772d2f2
commit 298e29c772
No known key found for this signature in database
GPG Key ID: 40A1750B977E56BF
46 changed files with 899 additions and 874 deletions

View File

@ -12,12 +12,16 @@ namespace GodotTools.BuildLogger
public string Parameters { get; set; }
public LoggerVerbosity Verbosity { get; set; }
private StreamWriter _logStreamWriter;
private StreamWriter _issuesStreamWriter;
private int _indent;
public void Initialize(IEventSource eventSource)
{
if (null == Parameters)
throw new LoggerException("Log directory parameter not specified.");
var parameters = Parameters.Split(new[] {';'});
string[] parameters = Parameters.Split(new[] { ';' });
string logDir = parameters[0];
@ -35,8 +39,8 @@ namespace GodotTools.BuildLogger
if (!Directory.Exists(logDir))
Directory.CreateDirectory(logDir);
logStreamWriter = new StreamWriter(logFile);
issuesStreamWriter = new StreamWriter(issuesFile);
_logStreamWriter = new StreamWriter(logFile);
_issuesStreamWriter = new StreamWriter(issuesFile);
}
catch (Exception ex)
{
@ -66,12 +70,12 @@ namespace GodotTools.BuildLogger
private void eventSource_ProjectStarted(object sender, ProjectStartedEventArgs e)
{
WriteLine(e.Message);
indent++;
_indent++;
}
private void eventSource_ProjectFinished(object sender, ProjectFinishedEventArgs e)
{
indent--;
_indent--;
WriteLine(e.Message);
}
@ -87,7 +91,7 @@ namespace GodotTools.BuildLogger
string errorLine = $@"error,{e.File.CsvEscape()},{e.LineNumber},{e.ColumnNumber}," +
$"{e.Code?.CsvEscape() ?? string.Empty},{e.Message.CsvEscape()}," +
$"{e.ProjectFile?.CsvEscape() ?? string.Empty}";
issuesStreamWriter.WriteLine(errorLine);
_issuesStreamWriter.WriteLine(errorLine);
}
private void eventSource_WarningRaised(object sender, BuildWarningEventArgs e)
@ -102,7 +106,7 @@ namespace GodotTools.BuildLogger
string warningLine = $@"warning,{e.File.CsvEscape()},{e.LineNumber},{e.ColumnNumber}," +
$"{e.Code?.CsvEscape() ?? string.Empty},{e.Message.CsvEscape()}," +
$"{e.ProjectFile?.CsvEscape() ?? string.Empty}";
issuesStreamWriter.WriteLine(warningLine);
_issuesStreamWriter.WriteLine(warningLine);
}
private void eventSource_MessageRaised(object sender, BuildMessageEventArgs e)
@ -136,35 +140,31 @@ namespace GodotTools.BuildLogger
private void WriteLine(string line)
{
for (int i = indent; i > 0; i--)
for (int i = _indent; i > 0; i--)
{
logStreamWriter.Write("\t");
_logStreamWriter.Write("\t");
}
logStreamWriter.WriteLine(line);
_logStreamWriter.WriteLine(line);
}
public void Shutdown()
{
logStreamWriter.Close();
issuesStreamWriter.Close();
_logStreamWriter.Close();
_issuesStreamWriter.Close();
}
private bool IsVerbosityAtLeast(LoggerVerbosity checkVerbosity)
{
return Verbosity >= checkVerbosity;
}
private StreamWriter logStreamWriter;
private StreamWriter issuesStreamWriter;
private int indent;
}
internal static class StringExtensions
{
public static string CsvEscape(this string value, char delimiter = ',')
{
bool hasSpecialChar = value.IndexOfAny(new[] {'\"', '\n', '\r', delimiter}) != -1;
bool hasSpecialChar = value.IndexOfAny(new[] { '\"', '\n', '\r', delimiter }) != -1;
if (hasSpecialChar)
return "\"" + value.Replace("\"", "\"\"") + "\"";

View File

@ -7,6 +7,8 @@ namespace GodotTools.Core
{
public static class StringExtensions
{
private static readonly string _driveRoot = Path.GetPathRoot(Environment.CurrentDirectory);
public static string RelativeToPath(this string path, string dir)
{
// Make sure the directory ends with a path separator
@ -49,13 +51,11 @@ namespace GodotTools.Core
return Path.DirectorySeparatorChar + path;
}
private static readonly string DriveRoot = Path.GetPathRoot(Environment.CurrentDirectory);
public static bool IsAbsolutePath(this string path)
{
return path.StartsWith("/", StringComparison.Ordinal) ||
path.StartsWith("\\", StringComparison.Ordinal) ||
path.StartsWith(DriveRoot, StringComparison.Ordinal);
path.StartsWith(_driveRoot, StringComparison.Ordinal);
}
public static string ToSafeDirName(this string dirName, bool allowDirSeparator = false)

View File

@ -9,95 +9,7 @@ namespace GodotTools.ProjectEditor
{
public class DotNetSolution
{
private string directoryPath;
private readonly Dictionary<string, ProjectInfo> projects = new Dictionary<string, ProjectInfo>();
public string Name { get; }
public string DirectoryPath
{
get => directoryPath;
set => directoryPath = value.IsAbsolutePath() ? value : Path.GetFullPath(value);
}
public class ProjectInfo
{
public string Guid;
public string PathRelativeToSolution;
public List<string> Configs = new List<string>();
}
public void AddNewProject(string name, ProjectInfo projectInfo)
{
projects[name] = projectInfo;
}
public bool HasProject(string name)
{
return projects.ContainsKey(name);
}
public ProjectInfo GetProjectInfo(string name)
{
return projects[name];
}
public bool RemoveProject(string name)
{
return projects.Remove(name);
}
public void Save()
{
if (!Directory.Exists(DirectoryPath))
throw new FileNotFoundException("The solution directory does not exist.");
string projectsDecl = string.Empty;
string slnPlatformsCfg = string.Empty;
string projPlatformsCfg = string.Empty;
bool isFirstProject = true;
foreach (var pair in projects)
{
string name = pair.Key;
ProjectInfo projectInfo = pair.Value;
if (!isFirstProject)
projectsDecl += "\n";
projectsDecl += string.Format(ProjectDeclaration,
name, projectInfo.PathRelativeToSolution.Replace("/", "\\"), projectInfo.Guid);
for (int i = 0; i < projectInfo.Configs.Count; i++)
{
string config = projectInfo.Configs[i];
if (i != 0 || !isFirstProject)
{
slnPlatformsCfg += "\n";
projPlatformsCfg += "\n";
}
slnPlatformsCfg += string.Format(SolutionPlatformsConfig, config);
projPlatformsCfg += string.Format(ProjectPlatformsConfig, projectInfo.Guid, config);
}
isFirstProject = false;
}
string solutionPath = Path.Combine(DirectoryPath, Name + ".sln");
string content = string.Format(SolutionTemplate, projectsDecl, slnPlatformsCfg, projPlatformsCfg);
File.WriteAllText(solutionPath, content, Encoding.UTF8); // UTF-8 with BOM
}
public DotNetSolution(string name)
{
Name = name;
}
const string SolutionTemplate =
private const string _solutionTemplate =
@"Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
{0}
@ -111,23 +23,111 @@ Global
EndGlobal
";
const string ProjectDeclaration =
private const string _projectDeclaration =
@"Project(""{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}}"") = ""{0}"", ""{1}"", ""{{{2}}}""
EndProject";
const string SolutionPlatformsConfig =
private const string _solutionPlatformsConfig =
@" {0}|Any CPU = {0}|Any CPU";
const string ProjectPlatformsConfig =
private const string _projectPlatformsConfig =
@" {{{0}}}.{1}|Any CPU.ActiveCfg = {1}|Any CPU
{{{0}}}.{1}|Any CPU.Build.0 = {1}|Any CPU";
private string _directoryPath;
private readonly Dictionary<string, ProjectInfo> _projects = new Dictionary<string, ProjectInfo>();
public string Name { get; }
public string DirectoryPath
{
get => _directoryPath;
set => _directoryPath = value.IsAbsolutePath() ? value : Path.GetFullPath(value);
}
public class ProjectInfo
{
public string Guid;
public string PathRelativeToSolution;
public List<string> Configs = new List<string>();
}
public void AddNewProject(string name, ProjectInfo projectInfo)
{
_projects[name] = projectInfo;
}
public bool HasProject(string name)
{
return _projects.ContainsKey(name);
}
public ProjectInfo GetProjectInfo(string name)
{
return _projects[name];
}
public bool RemoveProject(string name)
{
return _projects.Remove(name);
}
public void Save()
{
if (!Directory.Exists(DirectoryPath))
throw new FileNotFoundException("The solution directory does not exist.");
string projectsDecl = string.Empty;
string slnPlatformsCfg = string.Empty;
string projPlatformsCfg = string.Empty;
bool isFirstProject = true;
foreach (var pair in _projects)
{
string name = pair.Key;
ProjectInfo projectInfo = pair.Value;
if (!isFirstProject)
projectsDecl += "\n";
projectsDecl += string.Format(_projectDeclaration,
name, projectInfo.PathRelativeToSolution.Replace("/", "\\"), projectInfo.Guid);
for (int i = 0; i < projectInfo.Configs.Count; i++)
{
string config = projectInfo.Configs[i];
if (i != 0 || !isFirstProject)
{
slnPlatformsCfg += "\n";
projPlatformsCfg += "\n";
}
slnPlatformsCfg += string.Format(_solutionPlatformsConfig, config);
projPlatformsCfg += string.Format(_projectPlatformsConfig, projectInfo.Guid, config);
}
isFirstProject = false;
}
string solutionPath = Path.Combine(DirectoryPath, Name + ".sln");
string content = string.Format(_solutionTemplate, projectsDecl, slnPlatformsCfg, projPlatformsCfg);
File.WriteAllText(solutionPath, content, Encoding.UTF8); // UTF-8 with BOM
}
public DotNetSolution(string name)
{
Name = name;
}
public static void MigrateFromOldConfigNames(string slnPath)
{
if (!File.Exists(slnPath))
return;
var input = File.ReadAllText(slnPath);
string input = File.ReadAllText(slnPath);
if (!Regex.IsMatch(input, Regex.Escape("Tools|Any CPU")))
return;
@ -151,7 +151,7 @@ EndProject";
};
var regex = new Regex(string.Join("|", dict.Keys.Select(Regex.Escape)));
var result = regex.Replace(input, m => dict[m.Value]);
string result = regex.Replace(input, m => dict[m.Value]);
if (result != input)
{

View File

@ -91,7 +91,7 @@ namespace GodotTools.ProjectEditor
return identifier;
}
static bool IsKeyword(string value, bool anyDoubleUnderscore)
private static bool IsKeyword(string value, bool anyDoubleUnderscore)
{
// Identifiers that start with double underscore are meant to be used for reserved keywords.
// Only existing keywords are enforced, but it may be useful to forbid any identifier
@ -103,14 +103,14 @@ namespace GodotTools.ProjectEditor
}
else
{
if (DoubleUnderscoreKeywords.Contains(value))
if (_doubleUnderscoreKeywords.Contains(value))
return true;
}
return Keywords.Contains(value);
return _keywords.Contains(value);
}
private static readonly HashSet<string> DoubleUnderscoreKeywords = new HashSet<string>
private static readonly HashSet<string> _doubleUnderscoreKeywords = new HashSet<string>
{
"__arglist",
"__makeref",
@ -118,7 +118,7 @@ namespace GodotTools.ProjectEditor
"__refvalue",
};
private static readonly HashSet<string> Keywords = new HashSet<string>
private static readonly HashSet<string> _keywords = new HashSet<string>
{
"as",
"do",

View File

@ -13,7 +13,8 @@ namespace GodotTools.Build
public string[] Targets { get; }
public string Configuration { get; }
public bool Restore { get; }
public Array<string> CustomProperties { get; } = new Array<string>(); // TODO Use List once we have proper serialization
// TODO Use List once we have proper serialization
public Array<string> CustomProperties { get; } = new Array<string>();
public string LogsDirPath => Path.Combine(GodotSharpDirs.BuildLogsDirs, $"{Solution.MD5Text()}_{Configuration}");
@ -32,12 +33,12 @@ namespace GodotTools.Build
unchecked
{
int hash = 17;
hash = hash * 29 + Solution.GetHashCode();
hash = hash * 29 + Targets.GetHashCode();
hash = hash * 29 + Configuration.GetHashCode();
hash = hash * 29 + Restore.GetHashCode();
hash = hash * 29 + CustomProperties.GetHashCode();
hash = hash * 29 + LogsDirPath.GetHashCode();
hash = (hash * 29) + Solution.GetHashCode();
hash = (hash * 29) + Targets.GetHashCode();
hash = (hash * 29) + Configuration.GetHashCode();
hash = (hash * 29) + Restore.GetHashCode();
hash = (hash * 29) + CustomProperties.GetHashCode();
hash = (hash * 29) + LogsDirPath.GetHashCode();
return hash;
}
}

View File

@ -33,7 +33,7 @@ namespace GodotTools.Build
private static void RemoveOldIssuesFile(BuildInfo buildInfo)
{
var issuesFile = GetIssuesFilePath(buildInfo);
string issuesFile = GetIssuesFilePath(buildInfo);
if (!File.Exists(issuesFile))
return;

View File

@ -22,14 +22,6 @@ namespace GodotTools.Build
public string ProjectFile { get; set; }
}
private readonly Array<BuildIssue> issues = new Array<BuildIssue>(); // TODO Use List once we have proper serialization
private ItemList issuesList;
private TextEdit buildLog;
private PopupMenu issuesListContextMenu;
private readonly object pendingBuildLogTextLock = new object();
[NotNull] private string pendingBuildLogText = string.Empty;
[Signal]
public delegate void BuildStateChanged();
@ -61,13 +53,21 @@ namespace GodotTools.Build
}
}
private BuildInfo BuildInfo { get; set; }
public bool LogVisible
{
set => buildLog.Visible = value;
set => _buildLog.Visible = value;
}
// TODO Use List once we have proper serialization.
private readonly Array<BuildIssue> _issues = new Array<BuildIssue>();
private ItemList _issuesList;
private PopupMenu _issuesListContextMenu;
private TextEdit _buildLog;
private BuildInfo _buildInfo;
private readonly object _pendingBuildLogTextLock = new object();
[NotNull] private string _pendingBuildLogText = string.Empty;
private void LoadIssuesFromFile(string csvFile)
{
using (var file = new Godot.File())
@ -108,7 +108,7 @@ namespace GodotTools.Build
else
ErrorCount += 1;
issues.Add(issue);
_issues.Add(issue);
}
}
finally
@ -120,21 +120,21 @@ namespace GodotTools.Build
private void IssueActivated(int idx)
{
if (idx < 0 || idx >= issuesList.GetItemCount())
if (idx < 0 || idx >= _issuesList.GetItemCount())
throw new IndexOutOfRangeException("Item list index out of range");
// Get correct issue idx from issue list
int issueIndex = (int)issuesList.GetItemMetadata(idx);
int issueIndex = (int)_issuesList.GetItemMetadata(idx);
if (issueIndex < 0 || issueIndex >= issues.Count)
if (issueIndex < 0 || issueIndex >= _issues.Count)
throw new IndexOutOfRangeException("Issue index out of range");
BuildIssue issue = issues[issueIndex];
BuildIssue issue = _issues[issueIndex];
if (string.IsNullOrEmpty(issue.ProjectFile) && string.IsNullOrEmpty(issue.File))
return;
string projectDir = issue.ProjectFile.Length > 0 ? issue.ProjectFile.GetBaseDir() : BuildInfo.Solution.GetBaseDir();
string projectDir = issue.ProjectFile.Length > 0 ? issue.ProjectFile.GetBaseDir() : _buildInfo.Solution.GetBaseDir();
string file = Path.Combine(projectDir.SimplifyGodotPath(), issue.File.SimplifyGodotPath());
@ -154,14 +154,14 @@ namespace GodotTools.Build
public void UpdateIssuesList()
{
issuesList.Clear();
_issuesList.Clear();
using (var warningIcon = GetIcon("Warning", "EditorIcons"))
using (var errorIcon = GetIcon("Error", "EditorIcons"))
{
for (int i = 0; i < issues.Count; i++)
for (int i = 0; i < _issues.Count; i++)
{
BuildIssue issue = issues[i];
BuildIssue issue = _issues[i];
if (!(issue.Warning ? WarningsVisible : ErrorsVisible))
continue;
@ -192,11 +192,11 @@ namespace GodotTools.Build
int lineBreakIdx = text.IndexOf("\n", StringComparison.Ordinal);
string itemText = lineBreakIdx == -1 ? text : text.Substring(0, lineBreakIdx);
issuesList.AddItem(itemText, issue.Warning ? warningIcon : errorIcon);
_issuesList.AddItem(itemText, issue.Warning ? warningIcon : errorIcon);
int index = issuesList.GetItemCount() - 1;
issuesList.SetItemTooltip(index, tooltip);
issuesList.SetItemMetadata(index, i);
int index = _issuesList.GetItemCount() - 1;
_issuesList.SetItemTooltip(index, tooltip);
_issuesList.SetItemMetadata(index, i);
}
}
}
@ -206,12 +206,12 @@ namespace GodotTools.Build
HasBuildExited = true;
BuildResult = Build.BuildResult.Error;
issuesList.Clear();
_issuesList.Clear();
var issue = new BuildIssue {Message = cause, Warning = false};
ErrorCount += 1;
issues.Add(issue);
_issues.Add(issue);
UpdateIssuesList();
@ -220,13 +220,13 @@ namespace GodotTools.Build
private void BuildStarted(BuildInfo buildInfo)
{
BuildInfo = buildInfo;
_buildInfo = buildInfo;
HasBuildExited = false;
issues.Clear();
_issues.Clear();
WarningCount = 0;
ErrorCount = 0;
buildLog.Text = string.Empty;
_buildLog.Text = string.Empty;
UpdateIssuesList();
@ -238,7 +238,7 @@ namespace GodotTools.Build
HasBuildExited = true;
BuildResult = result;
LoadIssuesFromFile(Path.Combine(BuildInfo.LogsDirPath, BuildManager.MsBuildIssuesFileName));
LoadIssuesFromFile(Path.Combine(_buildInfo.LogsDirPath, BuildManager.MsBuildIssuesFileName));
UpdateIssuesList();
@ -247,46 +247,46 @@ namespace GodotTools.Build
private void UpdateBuildLogText()
{
lock (pendingBuildLogTextLock)
lock (_pendingBuildLogTextLock)
{
buildLog.Text += pendingBuildLogText;
pendingBuildLogText = string.Empty;
_buildLog.Text += _pendingBuildLogText;
_pendingBuildLogText = string.Empty;
ScrollToLastNonEmptyLogLine();
}
}
private void StdOutputReceived(string text)
{
lock (pendingBuildLogTextLock)
lock (_pendingBuildLogTextLock)
{
if (pendingBuildLogText.Length == 0)
if (_pendingBuildLogText.Length == 0)
CallDeferred(nameof(UpdateBuildLogText));
pendingBuildLogText += text + "\n";
_pendingBuildLogText += text + "\n";
}
}
private void StdErrorReceived(string text)
{
lock (pendingBuildLogTextLock)
lock (_pendingBuildLogTextLock)
{
if (pendingBuildLogText.Length == 0)
if (_pendingBuildLogText.Length == 0)
CallDeferred(nameof(UpdateBuildLogText));
pendingBuildLogText += text + "\n";
_pendingBuildLogText += text + "\n";
}
}
private void ScrollToLastNonEmptyLogLine()
{
int line;
for (line = buildLog.GetLineCount(); line > 0; line--)
for (line = _buildLog.GetLineCount(); line > 0; line--)
{
string lineText = buildLog.GetLine(line);
string lineText = _buildLog.GetLine(line);
if (!string.IsNullOrEmpty(lineText) || !string.IsNullOrEmpty(lineText?.Trim()))
break;
}
buildLog.CursorSetLine(line);
_buildLog.CursorSetLine(line);
}
public void RestartBuild()
@ -319,11 +319,11 @@ namespace GodotTools.Build
// We don't allow multi-selection but just in case that changes later...
string text = null;
foreach (int issueIndex in issuesList.GetSelectedItems())
foreach (int issueIndex in _issuesList.GetSelectedItems())
{
if (text != null)
text += "\n";
text += issuesList.GetItemText(issueIndex);
text += _issuesList.GetItemText(issueIndex);
}
if (text != null)
@ -339,20 +339,20 @@ namespace GodotTools.Build
{
_ = index; // Unused
issuesListContextMenu.Clear();
issuesListContextMenu.SetSize(new Vector2(1, 1));
_issuesListContextMenu.Clear();
_issuesListContextMenu.SetSize(new Vector2(1, 1));
if (issuesList.IsAnythingSelected())
if (_issuesList.IsAnythingSelected())
{
// Add menu entries for the selected item
issuesListContextMenu.AddIconItem(GetIcon("ActionCopy", "EditorIcons"),
_issuesListContextMenu.AddIconItem(GetIcon("ActionCopy", "EditorIcons"),
label: "Copy Error".TTR(), (int)IssuesContextMenuOption.Copy);
}
if (issuesListContextMenu.GetItemCount() > 0)
if (_issuesListContextMenu.GetItemCount() > 0)
{
issuesListContextMenu.SetPosition(issuesList.RectGlobalPosition + atPosition);
issuesListContextMenu.Popup_();
_issuesListContextMenu.SetPosition(_issuesList.RectGlobalPosition + atPosition);
_issuesListContextMenu.Popup_();
}
}
@ -369,27 +369,27 @@ namespace GodotTools.Build
};
AddChild(hsc);
issuesList = new ItemList
_issuesList = new ItemList
{
SizeFlagsVertical = (int)SizeFlags.ExpandFill,
SizeFlagsHorizontal = (int)SizeFlags.ExpandFill // Avoid being squashed by the build log
};
issuesList.Connect("item_activated", this, nameof(IssueActivated));
issuesList.AllowRmbSelect = true;
issuesList.Connect("item_rmb_selected", this, nameof(IssuesListRmbSelected));
hsc.AddChild(issuesList);
_issuesList.Connect("item_activated", this, nameof(IssueActivated));
_issuesList.AllowRmbSelect = true;
_issuesList.Connect("item_rmb_selected", this, nameof(IssuesListRmbSelected));
hsc.AddChild(_issuesList);
issuesListContextMenu = new PopupMenu();
issuesListContextMenu.Connect("id_pressed", this, nameof(IssuesListContextOptionPressed));
issuesList.AddChild(issuesListContextMenu);
_issuesListContextMenu = new PopupMenu();
_issuesListContextMenu.Connect("id_pressed", this, nameof(IssuesListContextOptionPressed));
_issuesList.AddChild(_issuesListContextMenu);
buildLog = new TextEdit
_buildLog = new TextEdit
{
Readonly = true,
SizeFlagsVertical = (int)SizeFlags.ExpandFill,
SizeFlagsHorizontal = (int)SizeFlags.ExpandFill // Avoid being squashed by the issues list
};
hsc.AddChild(buildLog);
hsc.AddChild(_buildLog);
AddBuildEventListeners();
}

View File

@ -11,10 +11,10 @@ namespace GodotTools.Build
{
public BuildOutputView BuildOutputView { get; private set; }
private MenuButton buildMenuBtn;
private Button errorsBtn;
private Button warningsBtn;
private Button viewLogBtn;
private MenuButton _buildMenuBtn;
private Button _errorsBtn;
private Button _warningsBtn;
private Button _viewLogBtn;
private void WarningsToggled(bool pressed)
{
@ -116,16 +116,16 @@ namespace GodotTools.Build
var toolBarHBox = new HBoxContainer { SizeFlagsHorizontal = (int)SizeFlags.ExpandFill };
AddChild(toolBarHBox);
buildMenuBtn = new MenuButton { Text = "Build", Icon = GetIcon("Play", "EditorIcons") };
toolBarHBox.AddChild(buildMenuBtn);
_buildMenuBtn = new MenuButton { Text = "Build", Icon = GetIcon("Play", "EditorIcons") };
toolBarHBox.AddChild(_buildMenuBtn);
var buildMenu = buildMenuBtn.GetPopup();
var buildMenu = _buildMenuBtn.GetPopup();
buildMenu.AddItem("Build Solution".TTR(), (int)BuildMenuOptions.BuildSolution);
buildMenu.AddItem("Rebuild Solution".TTR(), (int)BuildMenuOptions.RebuildSolution);
buildMenu.AddItem("Clean Solution".TTR(), (int)BuildMenuOptions.CleanSolution);
buildMenu.Connect("id_pressed", this, nameof(BuildMenuOptionPressed));
errorsBtn = new Button
_errorsBtn = new Button
{
HintTooltip = "Show Errors".TTR(),
Icon = GetIcon("StatusError", "EditorIcons"),
@ -134,10 +134,10 @@ namespace GodotTools.Build
Pressed = true,
FocusMode = FocusModeEnum.None
};
errorsBtn.Connect("toggled", this, nameof(ErrorsToggled));
toolBarHBox.AddChild(errorsBtn);
_errorsBtn.Connect("toggled", this, nameof(ErrorsToggled));
toolBarHBox.AddChild(_errorsBtn);
warningsBtn = new Button
_warningsBtn = new Button
{
HintTooltip = "Show Warnings".TTR(),
Icon = GetIcon("NodeWarning", "EditorIcons"),
@ -146,18 +146,18 @@ namespace GodotTools.Build
Pressed = true,
FocusMode = FocusModeEnum.None
};
warningsBtn.Connect("toggled", this, nameof(WarningsToggled));
toolBarHBox.AddChild(warningsBtn);
_warningsBtn.Connect("toggled", this, nameof(WarningsToggled));
toolBarHBox.AddChild(_warningsBtn);
viewLogBtn = new Button
_viewLogBtn = new Button
{
Text = "Show Output".TTR(),
ToggleMode = true,
Pressed = true,
FocusMode = FocusModeEnum.None
};
viewLogBtn.Connect("toggled", this, nameof(ViewLogToggled));
toolBarHBox.AddChild(viewLogBtn);
_viewLogBtn.Connect("toggled", this, nameof(ViewLogToggled));
toolBarHBox.AddChild(_viewLogBtn);
BuildOutputView = new BuildOutputView();
AddChild(BuildOutputView);
@ -169,12 +169,12 @@ namespace GodotTools.Build
if (what == NotificationThemeChanged)
{
if (buildMenuBtn != null)
buildMenuBtn.Icon = GetIcon("Play", "EditorIcons");
if (errorsBtn != null)
errorsBtn.Icon = GetIcon("StatusError", "EditorIcons");
if (warningsBtn != null)
warningsBtn.Icon = GetIcon("NodeWarning", "EditorIcons");
if (_buildMenuBtn != null)
_buildMenuBtn.Icon = GetIcon("Play", "EditorIcons");
if (_errorsBtn != null)
_errorsBtn.Icon = GetIcon("StatusError", "EditorIcons");
if (_warningsBtn != null)
_warningsBtn.Icon = GetIcon("NodeWarning", "EditorIcons");
}
}
}

View File

@ -61,7 +61,7 @@ namespace GodotTools.Build
}
case BuildTool.JetBrainsMsBuild:
{
var editorPath = (string)editorSettings.GetSetting(RiderPathManager.EditorPathSettingName);
string editorPath = (string)editorSettings.GetSetting(RiderPathManager.EditorPathSettingName);
if (!File.Exists(editorPath))
throw new FileNotFoundException($"Cannot find Rider executable. Tried with path: {editorPath}");
@ -165,7 +165,9 @@ namespace GodotTools.Build
// Try to find 15.0 with vswhere
var envNames = Internal.GodotIs32Bits() ? new[] {"ProgramFiles", "ProgramW6432"} : new[] {"ProgramFiles(x86)", "ProgramFiles"};
string[] envNames = Internal.GodotIs32Bits() ?
envNames = new[] { "ProgramFiles", "ProgramW6432" } :
envNames = new[] { "ProgramFiles(x86)", "ProgramFiles" };
string vsWherePath = null;
foreach (var envName in envNames)

View File

@ -73,12 +73,12 @@ namespace GodotTools.Export
if (platform == OS.Platforms.iOS)
{
var architectures = GetEnablediOSArchs(features).ToArray();
string[] architectures = GetEnablediOSArchs(features).ToArray();
CompileAssembliesForiOS(exporter, isDebug, architectures, aotOpts, aotTempDir, assembliesPrepared, bclDir);
}
else if (platform == OS.Platforms.Android)
{
var abis = GetEnabledAndroidAbis(features).ToArray();
string[] abis = GetEnabledAndroidAbis(features).ToArray();
CompileAssembliesForAndroid(exporter, isDebug, abis, aotOpts, aotTempDir, assembliesPrepared, bclDir);
}
else
@ -114,7 +114,7 @@ namespace GodotTools.Export
ExecuteCompiler(FindCrossCompiler(compilerDirPath), compilerArgs, bclDir);
// The Godot exporter expects us to pass the abi in the tags parameter
exporter.AddSharedObject(soFilePath, tags: new[] {abi});
exporter.AddSharedObject(soFilePath, tags: new[] { abi });
}
}
}
@ -145,7 +145,8 @@ namespace GodotTools.Export
}
else
{
string outputDataLibDir = Path.Combine(outputDataDir, "Mono", platform == OS.Platforms.Windows ? "bin" : "lib");
string libDir = platform == OS.Platforms.Windows ? "bin" : "lib";
string outputDataLibDir = Path.Combine(outputDataDir, "Mono", libDir);
File.Copy(tempOutputFilePath, Path.Combine(outputDataLibDir, outputFileName));
}
}

View File

@ -20,7 +20,7 @@ namespace GodotTools.Export
public class ExportPlugin : EditorExportPlugin
{
[Flags]
enum I18NCodesets
private enum I18NCodesets
{
None = 0,
CJK = 1,
@ -31,6 +31,8 @@ namespace GodotTools.Export
All = CJK | MidEast | Other | Rare | West
}
private string _maybeLastExportError;
private void AddI18NAssemblies(Godot.Collections.Dictionary<string, string> assemblies, string bclDir)
{
var codesets = (I18NCodesets)ProjectSettings.GetSetting("mono/export/i18n_codesets");
@ -83,8 +85,6 @@ namespace GodotTools.Export
GlobalDef("mono/export/aot/android_toolchain_path", "");
}
private string maybeLastExportError;
private void AddFile(string srcPath, string dstPath, bool remap = false)
{
// Add file to the PCK
@ -129,14 +129,14 @@ namespace GodotTools.Export
}
catch (Exception e)
{
maybeLastExportError = e.Message;
_maybeLastExportError = e.Message;
// 'maybeLastExportError' cannot be null or empty if there was an error, so we
// must consider the possibility of exceptions being thrown without a message.
if (string.IsNullOrEmpty(maybeLastExportError))
maybeLastExportError = $"Exception thrown: {e.GetType().Name}";
if (string.IsNullOrEmpty(_maybeLastExportError))
_maybeLastExportError = $"Exception thrown: {e.GetType().Name}";
GD.PushError($"Failed to export project: {maybeLastExportError}");
GD.PushError($"Failed to export project: {_maybeLastExportError}");
Console.Error.WriteLine(e);
// TODO: Do something on error once _ExportBegin supports failing.
}
@ -320,10 +320,10 @@ namespace GodotTools.Export
Directory.Delete(aotTempDir, recursive: true);
// TODO: Just a workaround until the export plugins can be made to abort with errors
if (!string.IsNullOrEmpty(maybeLastExportError)) // Check empty as well, because it's set to empty after hot-reloading
if (!string.IsNullOrEmpty(_maybeLastExportError)) // Check empty as well, because it's set to empty after hot-reloading
{
string lastExportError = maybeLastExportError;
maybeLastExportError = null;
string lastExportError = _maybeLastExportError;
_maybeLastExportError = null;
GodotSharpEditor.Instance.ShowErrorDialog(lastExportError, "Failed to export C# project");
}
@ -473,7 +473,7 @@ namespace GodotTools.Export
private static string DetermineDataDirNameForProject()
{
var appName = (string)ProjectSettings.GetSetting("application/config/name");
string appName = (string)ProjectSettings.GetSetting("application/config/name");
string appNameSafe = appName.ToSafeDirName();
return $"data_{appNameSafe}";
}

View File

@ -21,19 +21,20 @@ namespace GodotTools
{
public class GodotSharpEditor : EditorPlugin, ISerializationListener
{
private EditorSettings editorSettings;
private EditorSettings _editorSettings;
private PopupMenu menuPopup;
private PopupMenu _menuPopup;
private AcceptDialog errorDialog;
private AcceptDialog _errorDialog;
private ToolButton bottomPanelBtn;
private ToolButton toolBarButton;
private ToolButton _bottomPanelBtn;
private ToolButton _toolBarButton;
// TODO Use WeakReference once we have proper serialization.
private WeakRef _exportPluginWeak;
public GodotIdeManager GodotIdeManager { get; private set; }
private WeakRef exportPluginWeak; // TODO Use WeakReference once we have proper serialization
public MSBuildPanel MSBuildPanel { get; private set; }
public bool SkipBuildBeforePlaying { get; set; } = false;
@ -42,7 +43,7 @@ namespace GodotTools
{
get
{
var projectAssemblyName = (string)ProjectSettings.GetSetting("application/config/name");
string projectAssemblyName = (string)ProjectSettings.GetSetting("application/config/name");
projectAssemblyName = projectAssemblyName.ToSafeDirName();
if (string.IsNullOrEmpty(projectAssemblyName))
projectAssemblyName = "UnnamedProject";
@ -123,9 +124,9 @@ namespace GodotTools
private void _RemoveCreateSlnMenuOption()
{
menuPopup.RemoveItem(menuPopup.GetItemIndex((int)MenuOptions.CreateSln));
bottomPanelBtn.Show();
toolBarButton.Show();
_menuPopup.RemoveItem(_menuPopup.GetItemIndex((int)MenuOptions.CreateSln));
_bottomPanelBtn.Show();
_toolBarButton.Show();
}
private void _MenuOptionPressed(MenuOptions id)
@ -201,9 +202,9 @@ namespace GodotTools
public void ShowErrorDialog(string message, string title = "Error")
{
errorDialog.WindowTitle = title;
errorDialog.DialogText = message;
errorDialog.PopupCenteredMinsize();
_errorDialog.WindowTitle = title;
_errorDialog.DialogText = message;
_errorDialog.PopupCenteredMinsize();
}
private static string _vsCodePath = string.Empty;
@ -216,7 +217,7 @@ namespace GodotTools
[UsedImplicitly]
public Error OpenInExternalEditor(Script script, int line, int col)
{
var editorId = (ExternalEditorId)editorSettings.GetSetting("mono/editor/external_editor");
var editorId = (ExternalEditorId)_editorSettings.GetSetting("mono/editor/external_editor");
switch (editorId)
{
@ -272,7 +273,6 @@ namespace GodotTools
break;
}
case ExternalEditorId.VsCode:
{
if (string.IsNullOrEmpty(_vsCodePath) || !File.Exists(_vsCodePath))
@ -308,7 +308,7 @@ namespace GodotTools
}
}
var resourcePath = ProjectSettings.GlobalizePath("res://");
string resourcePath = ProjectSettings.GlobalizePath("res://");
args.Add(resourcePath);
string scriptPath = ProjectSettings.GlobalizePath(script.ResourcePath);
@ -357,7 +357,6 @@ namespace GodotTools
break;
}
default:
throw new ArgumentOutOfRangeException();
}
@ -368,7 +367,7 @@ namespace GodotTools
[UsedImplicitly]
public bool OverridesExternalEditor()
{
return (ExternalEditorId)editorSettings.GetSetting("mono/editor/external_editor") != ExternalEditorId.None;
return (ExternalEditorId)_editorSettings.GetSetting("mono/editor/external_editor") != ExternalEditorId.None;
}
public override bool Build()
@ -409,8 +408,8 @@ namespace GodotTools
private void BuildStateChanged()
{
if (bottomPanelBtn != null)
bottomPanelBtn.Icon = MSBuildPanel.BuildOutputView.BuildStateIcon;
if (_bottomPanelBtn != null)
_bottomPanelBtn.Icon = MSBuildPanel.BuildOutputView.BuildStateIcon;
}
public override void EnablePlugin()
@ -424,25 +423,25 @@ namespace GodotTools
var editorInterface = GetEditorInterface();
var editorBaseControl = editorInterface.GetBaseControl();
editorSettings = editorInterface.GetEditorSettings();
_editorSettings = editorInterface.GetEditorSettings();
errorDialog = new AcceptDialog();
editorBaseControl.AddChild(errorDialog);
_errorDialog = new AcceptDialog();
editorBaseControl.AddChild(_errorDialog);
MSBuildPanel = new MSBuildPanel();
bottomPanelBtn = AddControlToBottomPanel(MSBuildPanel, "MSBuild".TTR());
_bottomPanelBtn = AddControlToBottomPanel(MSBuildPanel, "MSBuild".TTR());
AddChild(new HotReloadAssemblyWatcher {Name = "HotReloadAssemblyWatcher"});
menuPopup = new PopupMenu();
menuPopup.Hide();
menuPopup.SetAsToplevel(true);
_menuPopup = new PopupMenu();
_menuPopup.Hide();
_menuPopup.SetAsToplevel(true);
AddToolSubmenuItem("C#", menuPopup);
AddToolSubmenuItem("C#", _menuPopup);
var buildSolutionShortcut = (ShortCut)EditorShortcut("mono/build_solution");
toolBarButton = new ToolButton
_toolBarButton = new ToolButton
{
Text = "Build",
HintTooltip = "Build Solution".TTR(),
@ -450,8 +449,8 @@ namespace GodotTools
Shortcut = buildSolutionShortcut,
ShortcutInTooltip = true
};
toolBarButton.Connect("pressed", this, nameof(BuildSolutionPressed));
AddControlToContainer(CustomControlContainer.Toolbar, toolBarButton);
_toolBarButton.Connect("pressed", this, nameof(BuildSolutionPressed));
AddControlToContainer(CustomControlContainer.Toolbar, _toolBarButton);
if (File.Exists(GodotSharpDirs.ProjectSlnPath) && File.Exists(GodotSharpDirs.ProjectCsProjPath))
{
@ -459,12 +458,12 @@ namespace GodotTools
}
else
{
bottomPanelBtn.Hide();
toolBarButton.Hide();
menuPopup.AddItem("Create C# solution".TTR(), (int)MenuOptions.CreateSln);
_bottomPanelBtn.Hide();
_toolBarButton.Hide();
_menuPopup.AddItem("Create C# solution".TTR(), (int)MenuOptions.CreateSln);
}
menuPopup.Connect("id_pressed", this, nameof(_MenuOptionPressed));
_menuPopup.Connect("id_pressed", this, nameof(_MenuOptionPressed));
// External editor settings
EditorDef("mono/editor/external_editor", ExternalEditorId.None);
@ -492,7 +491,7 @@ namespace GodotTools
$",JetBrains Rider:{(int)ExternalEditorId.Rider}";
}
editorSettings.AddPropertyInfo(new Godot.Collections.Dictionary
_editorSettings.AddPropertyInfo(new Godot.Collections.Dictionary
{
["type"] = Variant.Type.Int,
["name"] = "mono/editor/external_editor",
@ -504,7 +503,7 @@ namespace GodotTools
var exportPlugin = new ExportPlugin();
AddExportPlugin(exportPlugin);
exportPlugin.RegisterExportSettings();
exportPluginWeak = WeakRef(exportPlugin);
_exportPluginWeak = WeakRef(exportPlugin);
BuildManager.Initialize();
RiderPathManager.Initialize();
@ -517,15 +516,15 @@ namespace GodotTools
{
base.Dispose(disposing);
if (exportPluginWeak != null)
if (_exportPluginWeak != null)
{
// We need to dispose our export plugin before the editor destroys EditorSettings.
// Otherwise, if the GC disposes it at a later time, EditorExportPlatformAndroid
// will be freed after EditorSettings already was, and its device polling thread
// will try to access the EditorSettings singleton, resulting in null dereferencing.
(exportPluginWeak.GetRef() as ExportPlugin)?.Dispose();
(_exportPluginWeak.GetRef() as ExportPlugin)?.Dispose();
exportPluginWeak.Dispose();
_exportPluginWeak.Dispose();
}
GodotIdeManager?.Dispose();

View File

@ -6,7 +6,7 @@ namespace GodotTools
{
public class HotReloadAssemblyWatcher : Node
{
private Timer watchTimer;
private Timer _watchTimer;
public override void _Notification(int what)
{
@ -27,22 +27,22 @@ namespace GodotTools
public void RestartTimer()
{
watchTimer.Stop();
watchTimer.Start();
_watchTimer.Stop();
_watchTimer.Start();
}
public override void _Ready()
{
base._Ready();
watchTimer = new Timer
_watchTimer = new Timer
{
OneShot = false,
WaitTime = (float)EditorDef("mono/assembly_watch_interval_sec", 0.5)
};
watchTimer.Connect("timeout", this, nameof(TimerTimeout));
AddChild(watchTimer);
watchTimer.Start();
_watchTimer.Connect("timeout", this, nameof(TimerTimeout));
AddChild(_watchTimer);
_watchTimer.Start();
}
}
}

View File

@ -10,22 +10,22 @@ namespace GodotTools.Ides
{
public sealed class GodotIdeManager : Node, ISerializationListener
{
private MessagingServer MessagingServer { get; set; }
private MessagingServer _messagingServer;
private MonoDevelop.Instance monoDevelInstance;
private MonoDevelop.Instance vsForMacInstance;
private MonoDevelop.Instance _monoDevelInstance;
private MonoDevelop.Instance _vsForMacInstance;
private MessagingServer GetRunningOrNewServer()
{
if (MessagingServer != null && !MessagingServer.IsDisposed)
return MessagingServer;
if (_messagingServer != null && !_messagingServer.IsDisposed)
return _messagingServer;
MessagingServer?.Dispose();
MessagingServer = new MessagingServer(OS.GetExecutablePath(), ProjectSettings.GlobalizePath(GodotSharpDirs.ResMetadataDir), new GodotLogger());
_messagingServer?.Dispose();
_messagingServer = new MessagingServer(OS.GetExecutablePath(), ProjectSettings.GlobalizePath(GodotSharpDirs.ResMetadataDir), new GodotLogger());
_ = MessagingServer.Listen();
_ = _messagingServer.Listen();
return MessagingServer;
return _messagingServer;
}
public override void _Ready()
@ -48,7 +48,7 @@ namespace GodotTools.Ides
if (disposing)
{
MessagingServer?.Dispose();
_messagingServer?.Dispose();
}
}
@ -113,14 +113,14 @@ namespace GodotTools.Ides
{
if (Utils.OS.IsOSX && editorId == ExternalEditorId.VisualStudioForMac)
{
vsForMacInstance = (vsForMacInstance?.IsDisposed ?? true ? null : vsForMacInstance) ??
_vsForMacInstance = (_vsForMacInstance?.IsDisposed ?? true ? null : _vsForMacInstance) ??
new MonoDevelop.Instance(solutionPath, MonoDevelop.EditorId.VisualStudioForMac);
return vsForMacInstance;
return _vsForMacInstance;
}
monoDevelInstance = (monoDevelInstance?.IsDisposed ?? true ? null : monoDevelInstance) ??
_monoDevelInstance = (_monoDevelInstance?.IsDisposed ?? true ? null : _monoDevelInstance) ??
new MonoDevelop.Instance(solutionPath, MonoDevelop.EditorId.MonoDevelop);
return monoDevelInstance;
return _monoDevelInstance;
}
try
@ -157,17 +157,17 @@ namespace GodotTools.Ides
}
}
public struct EditorPick
public readonly struct EditorPick
{
private readonly string identity;
private readonly string _identity;
public EditorPick(string identity)
{
this.identity = identity;
_identity = identity;
}
public bool IsAnyConnected() =>
GodotSharpEditor.Instance.GodotIdeManager.GetRunningOrNewServer().IsAnyConnected(identity);
GodotSharpEditor.Instance.GodotIdeManager.GetRunningOrNewServer().IsAnyConnected(_identity);
private void SendRequest<TResponse>(Request request)
where TResponse : Response, new()
@ -175,7 +175,7 @@ namespace GodotTools.Ides
// Logs an error if no client is connected with the specified identity
GodotSharpEditor.Instance.GodotIdeManager
.GetRunningOrNewServer()
.BroadcastRequest<TResponse>(identity, request);
.BroadcastRequest<TResponse>(_identity, request);
}
public void SendOpenFile(string file)

View File

@ -21,24 +21,26 @@ namespace GodotTools.Ides
{
public sealed class MessagingServer : IDisposable
{
private readonly ILogger logger;
private readonly ILogger _logger;
private readonly FileStream metaFile;
private string MetaFilePath { get; }
private readonly FileStream _metaFile;
private string _metaFilePath;
private readonly SemaphoreSlim peersSem = new SemaphoreSlim(1);
private readonly SemaphoreSlim _peersSem = new SemaphoreSlim(1);
private readonly TcpListener listener;
private readonly TcpListener _listener;
private readonly Dictionary<string, Queue<NotifyAwaiter<bool>>> clientConnectedAwaiters = new Dictionary<string, Queue<NotifyAwaiter<bool>>>();
private readonly Dictionary<string, Queue<NotifyAwaiter<bool>>> clientDisconnectedAwaiters = new Dictionary<string, Queue<NotifyAwaiter<bool>>>();
private readonly Dictionary<string, Queue<NotifyAwaiter<bool>>> _clientConnectedAwaiters =
new Dictionary<string, Queue<NotifyAwaiter<bool>>>();
private readonly Dictionary<string, Queue<NotifyAwaiter<bool>>> _clientDisconnectedAwaiters =
new Dictionary<string, Queue<NotifyAwaiter<bool>>>();
public async Task<bool> AwaitClientConnected(string identity)
{
if (!clientConnectedAwaiters.TryGetValue(identity, out var queue))
if (!_clientConnectedAwaiters.TryGetValue(identity, out var queue))
{
queue = new Queue<NotifyAwaiter<bool>>();
clientConnectedAwaiters.Add(identity, queue);
_clientConnectedAwaiters.Add(identity, queue);
}
var awaiter = new NotifyAwaiter<bool>();
@ -48,10 +50,10 @@ namespace GodotTools.Ides
public async Task<bool> AwaitClientDisconnected(string identity)
{
if (!clientDisconnectedAwaiters.TryGetValue(identity, out var queue))
if (!_clientDisconnectedAwaiters.TryGetValue(identity, out var queue))
{
queue = new Queue<NotifyAwaiter<bool>>();
clientDisconnectedAwaiters.Add(identity, queue);
_clientDisconnectedAwaiters.Add(identity, queue);
}
var awaiter = new NotifyAwaiter<bool>();
@ -77,7 +79,7 @@ namespace GodotTools.Ides
if (IsDisposed)
return;
using (await peersSem.UseAsync())
using (await _peersSem.UseAsync())
{
if (IsDisposed) // lock may not be fair
return;
@ -95,19 +97,19 @@ namespace GodotTools.Ides
foreach (var connection in Peers)
connection.Dispose();
Peers.Clear();
listener?.Stop();
_listener?.Stop();
metaFile?.Dispose();
_metaFile?.Dispose();
File.Delete(MetaFilePath);
File.Delete(_metaFilePath);
}
}
public MessagingServer(string editorExecutablePath, string projectMetadataDir, ILogger logger)
{
this.logger = logger;
this._logger = logger;
MetaFilePath = Path.Combine(projectMetadataDir, GodotIdeMetadata.DefaultFileName);
_metaFilePath = Path.Combine(projectMetadataDir, GodotIdeMetadata.DefaultFileName);
// Make sure the directory exists
Directory.CreateDirectory(projectMetadataDir);
@ -115,13 +117,13 @@ namespace GodotTools.Ides
// The Godot editor's file system thread can keep the file open for writing, so we are forced to allow write sharing...
const FileShare metaFileShare = FileShare.ReadWrite;
metaFile = File.Open(MetaFilePath, FileMode.Create, FileAccess.Write, metaFileShare);
_metaFile = File.Open(_metaFilePath, FileMode.Create, FileAccess.Write, metaFileShare);
listener = new TcpListener(new IPEndPoint(IPAddress.Loopback, port: 0));
listener.Start();
_listener = new TcpListener(new IPEndPoint(IPAddress.Loopback, port: 0));
_listener.Start();
int port = ((IPEndPoint)listener.Server.LocalEndPoint).Port;
using (var metaFileWriter = new StreamWriter(metaFile, Encoding.UTF8))
int port = ((IPEndPoint)_listener.Server.LocalEndPoint).Port;
using (var metaFileWriter = new StreamWriter(_metaFile, Encoding.UTF8))
{
metaFileWriter.WriteLine(port);
metaFileWriter.WriteLine(editorExecutablePath);
@ -130,30 +132,30 @@ namespace GodotTools.Ides
private async Task AcceptClient(TcpClient tcpClient)
{
logger.LogDebug("Accept client...");
_logger.LogDebug("Accept client...");
using (var peer = new Peer(tcpClient, new ServerHandshake(), new ServerMessageHandler(), logger))
using (var peer = new Peer(tcpClient, new ServerHandshake(), new ServerMessageHandler(), _logger))
{
// ReSharper disable AccessToDisposedClosure
peer.Connected += () =>
{
logger.LogInfo("Connection open with Ide Client");
_logger.LogInfo("Connection open with Ide Client");
if (clientConnectedAwaiters.TryGetValue(peer.RemoteIdentity, out var queue))
if (_clientConnectedAwaiters.TryGetValue(peer.RemoteIdentity, out var queue))
{
while (queue.Count > 0)
queue.Dequeue().SetResult(true);
clientConnectedAwaiters.Remove(peer.RemoteIdentity);
_clientConnectedAwaiters.Remove(peer.RemoteIdentity);
}
};
peer.Disconnected += () =>
{
if (clientDisconnectedAwaiters.TryGetValue(peer.RemoteIdentity, out var queue))
if (_clientDisconnectedAwaiters.TryGetValue(peer.RemoteIdentity, out var queue))
{
while (queue.Count > 0)
queue.Dequeue().SetResult(true);
clientDisconnectedAwaiters.Remove(peer.RemoteIdentity);
_clientDisconnectedAwaiters.Remove(peer.RemoteIdentity);
}
};
// ReSharper restore AccessToDisposedClosure
@ -162,17 +164,17 @@ namespace GodotTools.Ides
{
if (!await peer.DoHandshake("server"))
{
logger.LogError("Handshake failed");
_logger.LogError("Handshake failed");
return;
}
}
catch (Exception e)
{
logger.LogError("Handshake failed with unhandled exception: ", e);
_logger.LogError("Handshake failed with unhandled exception: ", e);
return;
}
using (await peersSem.UseAsync())
using (await _peersSem.UseAsync())
Peers.Add(peer);
try
@ -181,7 +183,7 @@ namespace GodotTools.Ides
}
finally
{
using (await peersSem.UseAsync())
using (await _peersSem.UseAsync())
Peers.Remove(peer);
}
}
@ -192,7 +194,7 @@ namespace GodotTools.Ides
try
{
while (!IsDisposed)
_ = AcceptClient(await listener.AcceptTcpClientAsync());
_ = AcceptClient(await _listener.AcceptTcpClientAsync());
}
catch (Exception e)
{
@ -204,11 +206,11 @@ namespace GodotTools.Ides
public async void BroadcastRequest<TResponse>(string identity, Request request)
where TResponse : Response, new()
{
using (await peersSem.UseAsync())
using (await _peersSem.UseAsync())
{
if (!IsAnyConnected(identity))
{
logger.LogError("Cannot write request. No client connected to the Godot Ide Server.");
_logger.LogError("Cannot write request. No client connected to the Godot Ide Server.");
return;
}
@ -225,16 +227,19 @@ namespace GodotTools.Ides
private class ServerHandshake : IHandshake
{
private static readonly string ServerHandshakeBase = $"{Peer.ServerHandshakeName},Version={Peer.ProtocolVersionMajor}.{Peer.ProtocolVersionMinor}.{Peer.ProtocolVersionRevision}";
private static readonly string ClientHandshakePattern = $@"{Regex.Escape(Peer.ClientHandshakeName)},Version=([0-9]+)\.([0-9]+)\.([0-9]+),([_a-zA-Z][_a-zA-Z0-9]{{0,63}})";
private static readonly string _serverHandshakeBase =
$"{Peer.ServerHandshakeName},Version={Peer.ProtocolVersionMajor}.{Peer.ProtocolVersionMinor}.{Peer.ProtocolVersionRevision}";
public string GetHandshakeLine(string identity) => $"{ServerHandshakeBase},{identity}";
private static readonly string _clientHandshakePattern =
$@"{Regex.Escape(Peer.ClientHandshakeName)},Version=([0-9]+)\.([0-9]+)\.([0-9]+),([_a-zA-Z][_a-zA-Z0-9]{{0,63}})";
public string GetHandshakeLine(string identity) => $"{_serverHandshakeBase},{identity}";
public bool IsValidPeerHandshake(string handshake, out string identity, ILogger logger)
{
identity = null;
var match = Regex.Match(handshake, ClientHandshakePattern);
var match = Regex.Match(handshake, _clientHandshakePattern);
if (!match.Success)
return false;

View File

@ -10,17 +10,17 @@ namespace GodotTools.Ides.MonoDevelop
public class Instance : IDisposable
{
public DateTime LaunchTime { get; private set; }
private readonly string solutionFile;
private readonly EditorId editorId;
private readonly string _solutionFile;
private readonly EditorId _editorId;
private Process process;
private Process _process;
public bool IsRunning => process != null && !process.HasExited;
public bool IsRunning => _process != null && !_process.HasExited;
public bool IsDisposed { get; private set; }
public void Execute()
{
bool newWindow = process == null || process.HasExited;
bool newWindow = _process == null || _process.HasExited;
var args = new List<string>();
@ -28,7 +28,7 @@ namespace GodotTools.Ides.MonoDevelop
if (OS.IsOSX)
{
string bundleId = BundleIds[editorId];
string bundleId = BundleIds[_editorId];
if (Internal.IsOsxAppBundleInstalled(bundleId))
{
@ -45,18 +45,18 @@ namespace GodotTools.Ides.MonoDevelop
}
else
{
command = OS.PathWhich(ExecutableNames[editorId]);
command = OS.PathWhich(ExecutableNames[_editorId]);
}
}
else
{
command = OS.PathWhich(ExecutableNames[editorId]);
command = OS.PathWhich(ExecutableNames[_editorId]);
}
args.Add("--ipc-tcp");
if (newWindow)
args.Add("\"" + Path.GetFullPath(solutionFile) + "\"");
args.Add("\"" + Path.GetFullPath(_solutionFile) + "\"");
if (command == null)
throw new FileNotFoundException();
@ -65,7 +65,7 @@ namespace GodotTools.Ides.MonoDevelop
if (newWindow)
{
process = Process.Start(new ProcessStartInfo
_process = Process.Start(new ProcessStartInfo
{
FileName = command,
Arguments = string.Join(" ", args),
@ -88,14 +88,14 @@ namespace GodotTools.Ides.MonoDevelop
if (editorId == EditorId.VisualStudioForMac && !OS.IsOSX)
throw new InvalidOperationException($"{nameof(EditorId.VisualStudioForMac)} not supported on this platform");
this.solutionFile = solutionFile;
this.editorId = editorId;
_solutionFile = solutionFile;
_editorId = editorId;
}
public void Dispose()
{
IsDisposed = true;
process?.Dispose();
_process?.Dispose();
}
private static readonly IReadOnlyDictionary<EditorId, string> ExecutableNames;

View File

@ -11,6 +11,7 @@ using Environment = System.Environment;
using File = System.IO.File;
using Path = System.IO.Path;
using OS = GodotTools.Utils.OS;
// ReSharper disable UnassignedField.Local
// ReSharper disable InconsistentNaming
// ReSharper disable UnassignedField.Global
@ -53,10 +54,10 @@ namespace GodotTools.Ides.Rider
private static RiderInfo[] CollectAllRiderPathsLinux()
{
var installInfos = new List<RiderInfo>();
var home = Environment.GetEnvironmentVariable("HOME");
string home = Environment.GetEnvironmentVariable("HOME");
if (!string.IsNullOrEmpty(home))
{
var toolboxRiderRootPath = GetToolboxBaseDir();
string toolboxRiderRootPath = GetToolboxBaseDir();
installInfos.AddRange(CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider.sh", false)
.Select(a => new RiderInfo(a, true)).ToList());
@ -65,12 +66,12 @@ namespace GodotTools.Ides.Rider
if (shortcut.Exists)
{
var lines = File.ReadAllLines(shortcut.FullName);
foreach (var line in lines)
string[] lines = File.ReadAllLines(shortcut.FullName);
foreach (string line in lines)
{
if (!line.StartsWith("Exec=\""))
continue;
var path = line.Split('"').Where((item, index) => index == 1).SingleOrDefault();
string path = line.Split('"').Where((item, index) => index == 1).SingleOrDefault();
if (string.IsNullOrEmpty(path))
continue;
@ -82,7 +83,7 @@ namespace GodotTools.Ides.Rider
}
// snap install
var snapInstallPath = "/snap/rider/current/bin/rider.sh";
string snapInstallPath = "/snap/rider/current/bin/rider.sh";
if (new FileInfo(snapInstallPath).Exists)
installInfos.Add(new RiderInfo(snapInstallPath, false));
@ -98,15 +99,15 @@ namespace GodotTools.Ides.Rider
if (folder.Exists)
{
installInfos.AddRange(folder.GetDirectories("*Rider*.app")
.Select(a => new RiderInfo(Path.Combine(a.FullName, "Contents/MacOS/rider"), false))
.ToList());
.Select(a => new RiderInfo(Path.Combine(a.FullName, "Contents/MacOS/rider"), false))
.ToList());
}
// /Users/user/Library/Application Support/JetBrains/Toolbox/apps/Rider/ch-1/181.3870.267/Rider EAP.app
// should be combined with "Contents/MacOS/rider"
var toolboxRiderRootPath = GetToolboxBaseDir();
string toolboxRiderRootPath = GetToolboxBaseDir();
var paths = CollectPathsFromToolbox(toolboxRiderRootPath, "", "Rider*.app", true)
.Select(a => new RiderInfo(Path.Combine(a, "Contents/MacOS/rider"), true));
.Select(a => new RiderInfo(Path.Combine(a, "Contents/MacOS/rider"), true));
installInfos.AddRange(paths);
return installInfos.ToArray();
@ -134,7 +135,7 @@ namespace GodotTools.Ides.Rider
{
if (OS.IsWindows)
{
var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
return GetToolboxRiderRootPath(localAppData);
}

View File

@ -49,7 +49,7 @@ namespace GodotTools.Ides.Rider
if (!paths.Any())
return;
var newPath = paths.Last().Path;
string newPath = paths.Last().Path;
Globals.EditorDef(EditorPathSettingName, newPath);
editorSettings.SetSetting(EditorPathSettingName, newPath);
}
@ -57,7 +57,8 @@ namespace GodotTools.Ides.Rider
public static bool IsExternalEditorSetToRider(EditorSettings editorSettings)
{
return editorSettings.HasSetting(EditorPathSettingName) && IsRider((string)editorSettings.GetSetting(EditorPathSettingName));
return editorSettings.HasSetting(EditorPathSettingName) &&
IsRider((string)editorSettings.GetSetting(EditorPathSettingName));
}
public static bool IsRider(string path)
@ -66,7 +67,7 @@ namespace GodotTools.Ides.Rider
return false;
var fileInfo = new FileInfo(path);
var filename = fileInfo.Name.ToLowerInvariant();
string filename = fileInfo.Name.ToLowerInvariant();
return filename.StartsWith("rider", StringComparison.Ordinal);
}
@ -83,7 +84,7 @@ namespace GodotTools.Ides.Rider
if (!paths.Any())
return null;
var newPath = paths.Last().Path;
string newPath = paths.Last().Path;
editorSettings.SetSetting(EditorPathSettingName, newPath);
Globals.EditorDef(EditorPathSettingName, newPath);
return newPath;
@ -96,8 +97,8 @@ namespace GodotTools.Ides.Rider
public static void OpenFile(string slnPath, string scriptPath, int line)
{
var pathFromSettings = GetRiderPathFromSettings();
var path = CheckAndUpdatePath(pathFromSettings);
string pathFromSettings = GetRiderPathFromSettings();
string path = CheckAndUpdatePath(pathFromSettings);
var args = new List<string>();
args.Add(slnPath);

View File

@ -39,45 +39,57 @@ namespace GodotTools.Internals
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_ResDataDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_ResMetadataDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_ResAssembliesBaseDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_ResAssembliesDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_ResConfigDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_ResTempDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_ResTempAssembliesBaseDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_ResTempAssembliesDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_MonoUserDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_MonoLogsDir();
#region Tools-only
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_MonoSolutionsDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_BuildLogsDirs();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_ProjectSlnPath();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_ProjectCsProjPath();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_DataEditorToolsDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_DataEditorPrebuiltApiDir();
#endregion
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_DataMonoEtcDir();
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern string internal_DataMonoLibDir();

View File

@ -8,7 +8,7 @@ namespace GodotTools.Utils
{
public static class FsPathUtils
{
private static readonly string ResourcePath = ProjectSettings.GlobalizePath("res://");
private static readonly string _resourcePath = ProjectSettings.GlobalizePath("res://");
private static bool PathStartsWithAlreadyNorm(this string childPath, string parentPath)
{
@ -34,7 +34,7 @@ namespace GodotTools.Utils
public static string LocalizePathWithCaseChecked(string path)
{
string pathNorm = path.NormalizePath() + Path.DirectorySeparatorChar;
string resourcePathNorm = ResourcePath.NormalizePath() + Path.DirectorySeparatorChar;
string resourcePathNorm = _resourcePath.NormalizePath() + Path.DirectorySeparatorChar;
if (!pathNorm.PathStartsWithAlreadyNorm(resourcePathNorm))
return null;

View File

@ -13,10 +13,10 @@ namespace GodotTools.Utils
public static class OS
{
[MethodImpl(MethodImplOptions.InternalCall)]
static extern string GetPlatformName();
private static extern string GetPlatformName();
[MethodImpl(MethodImplOptions.InternalCall)]
static extern bool UnixFileHasExecutableAccess(string filePath);
private static extern bool UnixFileHasExecutableAccess(string filePath);
public static class Names
{
@ -96,7 +96,10 @@ namespace GodotTools.Utils
public static string PathWhich([NotNull] string name)
{
return IsWindows ? PathWhichWindows(name) : PathWhichUnix(name);
if (IsWindows)
return PathWhichWindows(name);
return PathWhichUnix(name);
}
private static string PathWhichWindows([NotNull] string name)
@ -119,7 +122,8 @@ namespace GodotTools.Utils
}
string nameExt = Path.GetExtension(name);
bool hasPathExt = !string.IsNullOrEmpty(nameExt) && windowsExts.Contains(nameExt, StringComparer.OrdinalIgnoreCase);
bool hasPathExt = !string.IsNullOrEmpty(nameExt) &&
windowsExts.Contains(nameExt, StringComparer.OrdinalIgnoreCase);
searchDirs.Add(System.IO.Directory.GetCurrentDirectory()); // last in the list

View File

@ -939,7 +939,7 @@ Error BindingsGenerator::generate_cs_core_project(const String &p_proj_dir) {
#define ADD_INTERNAL_CALL(m_icall) \
if (!m_icall.editor_only) { \
cs_icalls_content.append(MEMBER_BEGIN "[MethodImpl(MethodImplOptions.InternalCall)]\n"); \
cs_icalls_content.append(INDENT2 "internal extern static "); \
cs_icalls_content.append(INDENT2 "internal static extern "); \
cs_icalls_content.append(m_icall.im_type_out + " "); \
cs_icalls_content.append(m_icall.name + "("); \
cs_icalls_content.append(m_icall.im_sig + ");\n"); \
@ -1043,7 +1043,7 @@ Error BindingsGenerator::generate_cs_editor_project(const String &p_proj_dir) {
#define ADD_INTERNAL_CALL(m_icall) \
if (m_icall.editor_only) { \
cs_icalls_content.append(MEMBER_BEGIN "[MethodImpl(MethodImplOptions.InternalCall)]\n"); \
cs_icalls_content.append(INDENT2 "internal extern static "); \
cs_icalls_content.append(INDENT2 "internal static extern "); \
cs_icalls_content.append(m_icall.im_type_out + " "); \
cs_icalls_content.append(m_icall.name + "("); \
cs_icalls_content.append(m_icall.im_sig + ");\n"); \

View File

@ -75,17 +75,17 @@ namespace Godot
/// </returns>
public bool Encloses(AABB with)
{
Vector3 src_min = _position;
Vector3 src_max = _position + _size;
Vector3 dst_min = with._position;
Vector3 dst_max = with._position + with._size;
Vector3 srcMin = _position;
Vector3 srcMax = _position + _size;
Vector3 dstMin = with._position;
Vector3 dstMax = with._position + with._size;
return src_min.x <= dst_min.x &&
src_max.x > dst_max.x &&
src_min.y <= dst_min.y &&
src_max.y > dst_max.y &&
src_min.z <= dst_min.z &&
src_max.z > dst_max.z;
return srcMin.x <= dstMin.x &&
srcMax.x > dstMax.x &&
srcMin.y <= dstMin.y &&
srcMax.y > dstMax.y &&
srcMin.z <= dstMin.z &&
srcMax.z > dstMax.z;
}
/// <summary>
@ -162,7 +162,8 @@ namespace Godot
case 7:
return new Vector3(_position.x + _size.x, _position.y + _size.y, _position.z + _size.z);
default:
throw new ArgumentOutOfRangeException(nameof(idx), String.Format("Index is {0}, but a value from 0 to 7 is expected.", idx));
throw new ArgumentOutOfRangeException(nameof(idx),
$"Index is {idx}, but a value from 0 to 7 is expected.");
}
}
@ -173,15 +174,15 @@ namespace Godot
public Vector3 GetLongestAxis()
{
var axis = new Vector3(1f, 0f, 0f);
real_t max_size = _size.x;
real_t maxSize = _size.x;
if (_size.y > max_size)
if (_size.y > maxSize)
{
axis = new Vector3(0f, 1f, 0f);
max_size = _size.y;
maxSize = _size.y;
}
if (_size.z > max_size)
if (_size.z > maxSize)
{
axis = new Vector3(0f, 0f, 1f);
}
@ -196,15 +197,15 @@ namespace Godot
public Vector3.Axis GetLongestAxisIndex()
{
var axis = Vector3.Axis.X;
real_t max_size = _size.x;
real_t maxSize = _size.x;
if (_size.y > max_size)
if (_size.y > maxSize)
{
axis = Vector3.Axis.Y;
max_size = _size.y;
maxSize = _size.y;
}
if (_size.z > max_size)
if (_size.z > maxSize)
{
axis = Vector3.Axis.Z;
}
@ -218,15 +219,15 @@ namespace Godot
/// <returns>The scalar length of the longest axis of the <see cref="AABB"/>.</returns>
public real_t GetLongestAxisSize()
{
real_t max_size = _size.x;
real_t maxSize = _size.x;
if (_size.y > max_size)
max_size = _size.y;
if (_size.y > maxSize)
maxSize = _size.y;
if (_size.z > max_size)
max_size = _size.z;
if (_size.z > maxSize)
maxSize = _size.z;
return max_size;
return maxSize;
}
/// <summary>
@ -236,15 +237,15 @@ namespace Godot
public Vector3 GetShortestAxis()
{
var axis = new Vector3(1f, 0f, 0f);
real_t max_size = _size.x;
real_t maxSize = _size.x;
if (_size.y < max_size)
if (_size.y < maxSize)
{
axis = new Vector3(0f, 1f, 0f);
max_size = _size.y;
maxSize = _size.y;
}
if (_size.z < max_size)
if (_size.z < maxSize)
{
axis = new Vector3(0f, 0f, 1f);
}
@ -259,15 +260,15 @@ namespace Godot
public Vector3.Axis GetShortestAxisIndex()
{
var axis = Vector3.Axis.X;
real_t max_size = _size.x;
real_t maxSize = _size.x;
if (_size.y < max_size)
if (_size.y < maxSize)
{
axis = Vector3.Axis.Y;
max_size = _size.y;
maxSize = _size.y;
}
if (_size.z < max_size)
if (_size.z < maxSize)
{
axis = Vector3.Axis.Z;
}
@ -281,15 +282,15 @@ namespace Godot
/// <returns>The scalar length of the shortest axis of the <see cref="AABB"/>.</returns>
public real_t GetShortestAxisSize()
{
real_t max_size = _size.x;
real_t maxSize = _size.x;
if (_size.y < max_size)
max_size = _size.y;
if (_size.y < maxSize)
maxSize = _size.y;
if (_size.z < max_size)
max_size = _size.z;
if (_size.z < maxSize)
maxSize = _size.z;
return max_size;
return maxSize;
}
/// <summary>
@ -300,13 +301,13 @@ namespace Godot
/// <returns>A vector representing the support.</returns>
public Vector3 GetSupport(Vector3 dir)
{
Vector3 half_extents = _size * 0.5f;
Vector3 ofs = _position + half_extents;
Vector3 halfExtents = _size * 0.5f;
Vector3 ofs = _position + halfExtents;
return ofs + new Vector3(
dir.x > 0f ? -half_extents.x : half_extents.x,
dir.y > 0f ? -half_extents.y : half_extents.y,
dir.z > 0f ? -half_extents.z : half_extents.z);
dir.x > 0f ? -halfExtents.x : halfExtents.x,
dir.y > 0f ? -halfExtents.y : halfExtents.y,
dir.z > 0f ? -halfExtents.z : halfExtents.z);
}
/// <summary>
@ -316,7 +317,7 @@ namespace Godot
/// <returns>The grown <see cref="AABB"/>.</returns>
public AABB Grow(real_t by)
{
var res = this;
AABB res = this;
res._position.x -= by;
res._position.y -= by;
@ -385,36 +386,36 @@ namespace Godot
/// <returns>The clipped <see cref="AABB"/>.</returns>
public AABB Intersection(AABB with)
{
Vector3 src_min = _position;
Vector3 src_max = _position + _size;
Vector3 dst_min = with._position;
Vector3 dst_max = with._position + with._size;
Vector3 srcMin = _position;
Vector3 srcMax = _position + _size;
Vector3 dstMin = with._position;
Vector3 dstMax = with._position + with._size;
Vector3 min, max;
if (src_min.x > dst_max.x || src_max.x < dst_min.x)
if (srcMin.x > dstMax.x || srcMax.x < dstMin.x)
{
return new AABB();
}
min.x = src_min.x > dst_min.x ? src_min.x : dst_min.x;
max.x = src_max.x < dst_max.x ? src_max.x : dst_max.x;
min.x = srcMin.x > dstMin.x ? srcMin.x : dstMin.x;
max.x = srcMax.x < dstMax.x ? srcMax.x : dstMax.x;
if (src_min.y > dst_max.y || src_max.y < dst_min.y)
if (srcMin.y > dstMax.y || srcMax.y < dstMin.y)
{
return new AABB();
}
min.y = src_min.y > dst_min.y ? src_min.y : dst_min.y;
max.y = src_max.y < dst_max.y ? src_max.y : dst_max.y;
min.y = srcMin.y > dstMin.y ? srcMin.y : dstMin.y;
max.y = srcMax.y < dstMax.y ? srcMax.y : dstMax.y;
if (src_min.z > dst_max.z || src_max.z < dst_min.z)
if (srcMin.z > dstMax.z || srcMax.z < dstMin.z)
{
return new AABB();
}
min.z = src_min.z > dst_min.z ? src_min.z : dst_min.z;
max.z = src_max.z < dst_max.z ? src_max.z : dst_max.z;
min.z = srcMin.z > dstMin.z ? srcMin.z : dstMin.z;
max.z = srcMax.z < dstMax.z ? srcMax.z : dstMax.z;
return new AABB(min, max - min);
}
@ -583,16 +584,16 @@ namespace Godot
var end2 = new Vector3(with._size.x, with._size.y, with._size.z) + beg2;
var min = new Vector3(
beg1.x < beg2.x ? beg1.x : beg2.x,
beg1.y < beg2.y ? beg1.y : beg2.y,
beg1.z < beg2.z ? beg1.z : beg2.z
);
beg1.x < beg2.x ? beg1.x : beg2.x,
beg1.y < beg2.y ? beg1.y : beg2.y,
beg1.z < beg2.z ? beg1.z : beg2.z
);
var max = new Vector3(
end1.x > end2.x ? end1.x : end2.x,
end1.y > end2.y ? end1.y : end2.y,
end1.z > end2.z ? end1.z : end2.z
);
end1.x > end2.x ? end1.x : end2.x,
end1.y > end2.y ? end1.y : end2.y,
end1.z > end2.z ? end1.z : end2.z
);
return new AABB(min, max - min);
}

View File

@ -6,7 +6,7 @@ using System.Runtime.InteropServices;
namespace Godot.Collections
{
class ArraySafeHandle : SafeHandle
internal class ArraySafeHandle : SafeHandle
{
public ArraySafeHandle(IntPtr handle) : base(IntPtr.Zero, true)
{
@ -33,15 +33,15 @@ namespace Godot.Collections
/// </summary>
public class Array : IList, IDisposable
{
ArraySafeHandle safeHandle;
bool disposed = false;
private ArraySafeHandle _safeHandle;
private bool _disposed = false;
/// <summary>
/// Constructs a new empty <see cref="Array"/>.
/// </summary>
public Array()
{
safeHandle = new ArraySafeHandle(godot_icall_Array_Ctor());
_safeHandle = new ArraySafeHandle(godot_icall_Array_Ctor());
}
/// <summary>
@ -69,25 +69,25 @@ namespace Godot.Collections
{
throw new NullReferenceException($"Parameter '{nameof(array)} cannot be null.'");
}
safeHandle = new ArraySafeHandle(godot_icall_Array_Ctor_MonoArray(array));
_safeHandle = new ArraySafeHandle(godot_icall_Array_Ctor_MonoArray(array));
}
internal Array(ArraySafeHandle handle)
{
safeHandle = handle;
_safeHandle = handle;
}
internal Array(IntPtr handle)
{
safeHandle = new ArraySafeHandle(handle);
_safeHandle = new ArraySafeHandle(handle);
}
internal IntPtr GetPtr()
{
if (disposed)
if (_disposed)
throw new ObjectDisposedException(GetType().FullName);
return safeHandle.DangerousGetHandle();
return _safeHandle.DangerousGetHandle();
}
/// <summary>
@ -136,16 +136,16 @@ namespace Godot.Collections
/// </summary>
public void Dispose()
{
if (disposed)
if (_disposed)
return;
if (safeHandle != null)
if (_safeHandle != null)
{
safeHandle.Dispose();
safeHandle = null;
_safeHandle.Dispose();
_safeHandle = null;
}
disposed = true;
_disposed = true;
}
// IList
@ -272,67 +272,67 @@ namespace Godot.Collections
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_Array_Ctor();
internal static extern IntPtr godot_icall_Array_Ctor();
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_Array_Ctor_MonoArray(System.Array array);
internal static extern IntPtr godot_icall_Array_Ctor_MonoArray(System.Array array);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Array_Dtor(IntPtr ptr);
internal static extern void godot_icall_Array_Dtor(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static object godot_icall_Array_At(IntPtr ptr, int index);
internal static extern object godot_icall_Array_At(IntPtr ptr, int index);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static object godot_icall_Array_At_Generic(IntPtr ptr, int index, int elemTypeEncoding, IntPtr elemTypeClass);
internal static extern object godot_icall_Array_At_Generic(IntPtr ptr, int index, int elemTypeEncoding, IntPtr elemTypeClass);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Array_SetAt(IntPtr ptr, int index, object value);
internal static extern void godot_icall_Array_SetAt(IntPtr ptr, int index, object value);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_Array_Count(IntPtr ptr);
internal static extern int godot_icall_Array_Count(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_Array_Add(IntPtr ptr, object item);
internal static extern int godot_icall_Array_Add(IntPtr ptr, object item);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Array_Clear(IntPtr ptr);
internal static extern void godot_icall_Array_Clear(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_Array_Concatenate(IntPtr left, IntPtr right);
internal static extern IntPtr godot_icall_Array_Concatenate(IntPtr left, IntPtr right);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_Array_Contains(IntPtr ptr, object item);
internal static extern bool godot_icall_Array_Contains(IntPtr ptr, object item);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Array_CopyTo(IntPtr ptr, System.Array array, int arrayIndex);
internal static extern void godot_icall_Array_CopyTo(IntPtr ptr, System.Array array, int arrayIndex);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_Array_Duplicate(IntPtr ptr, bool deep);
internal static extern IntPtr godot_icall_Array_Duplicate(IntPtr ptr, bool deep);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_Array_IndexOf(IntPtr ptr, object item);
internal static extern int godot_icall_Array_IndexOf(IntPtr ptr, object item);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Array_Insert(IntPtr ptr, int index, object item);
internal static extern void godot_icall_Array_Insert(IntPtr ptr, int index, object item);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_Array_Remove(IntPtr ptr, object item);
internal static extern bool godot_icall_Array_Remove(IntPtr ptr, object item);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Array_RemoveAt(IntPtr ptr, int index);
internal static extern void godot_icall_Array_RemoveAt(IntPtr ptr, int index);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static Error godot_icall_Array_Resize(IntPtr ptr, int newSize);
internal static extern Error godot_icall_Array_Resize(IntPtr ptr, int newSize);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static Error godot_icall_Array_Shuffle(IntPtr ptr);
internal static extern Error godot_icall_Array_Shuffle(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Array_Generic_GetElementTypeInfo(Type elemType, out int elemTypeEncoding, out IntPtr elemTypeClass);
internal static extern void godot_icall_Array_Generic_GetElementTypeInfo(Type elemType, out int elemTypeEncoding, out IntPtr elemTypeClass);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_Array_ToString(IntPtr ptr);
internal static extern string godot_icall_Array_ToString(IntPtr ptr);
}
/// <summary>
@ -344,7 +344,7 @@ namespace Godot.Collections
/// <typeparam name="T">The type of the array.</typeparam>
public class Array<T> : IList<T>, ICollection<T>, IEnumerable<T>
{
Array objectArray;
private Array _objectArray;
internal static int elemTypeEncoding;
internal static IntPtr elemTypeClass;
@ -359,7 +359,7 @@ namespace Godot.Collections
/// </summary>
public Array()
{
objectArray = new Array();
_objectArray = new Array();
}
/// <summary>
@ -372,7 +372,7 @@ namespace Godot.Collections
if (collection == null)
throw new NullReferenceException($"Parameter '{nameof(collection)} cannot be null.'");
objectArray = new Array(collection);
_objectArray = new Array(collection);
}
/// <summary>
@ -386,7 +386,7 @@ namespace Godot.Collections
{
throw new NullReferenceException($"Parameter '{nameof(array)} cannot be null.'");
}
objectArray = new Array(array);
_objectArray = new Array(array);
}
/// <summary>
@ -395,22 +395,22 @@ namespace Godot.Collections
/// <param name="array">The untyped array to construct from.</param>
public Array(Array array)
{
objectArray = array;
_objectArray = array;
}
internal Array(IntPtr handle)
{
objectArray = new Array(handle);
_objectArray = new Array(handle);
}
internal Array(ArraySafeHandle handle)
{
objectArray = new Array(handle);
_objectArray = new Array(handle);
}
internal IntPtr GetPtr()
{
return objectArray.GetPtr();
return _objectArray.GetPtr();
}
/// <summary>
@ -419,7 +419,7 @@ namespace Godot.Collections
/// <param name="from">The typed array to convert.</param>
public static explicit operator Array(Array<T> from)
{
return from.objectArray;
return from._objectArray;
}
/// <summary>
@ -429,7 +429,7 @@ namespace Godot.Collections
/// <returns>A new Godot Array.</returns>
public Array<T> Duplicate(bool deep = false)
{
return new Array<T>(objectArray.Duplicate(deep));
return new Array<T>(_objectArray.Duplicate(deep));
}
/// <summary>
@ -439,7 +439,7 @@ namespace Godot.Collections
/// <returns><see cref="Error.Ok"/> if successful, or an error code.</returns>
public Error Resize(int newSize)
{
return objectArray.Resize(newSize);
return _objectArray.Resize(newSize);
}
/// <summary>
@ -447,7 +447,7 @@ namespace Godot.Collections
/// </summary>
public void Shuffle()
{
objectArray.Shuffle();
_objectArray.Shuffle();
}
/// <summary>
@ -458,7 +458,7 @@ namespace Godot.Collections
/// <returns>A new Godot Array with the contents of both arrays.</returns>
public static Array<T> operator +(Array<T> left, Array<T> right)
{
return new Array<T>(left.objectArray + right.objectArray);
return new Array<T>(left._objectArray + right._objectArray);
}
// IList<T>
@ -470,7 +470,7 @@ namespace Godot.Collections
public T this[int index]
{
get { return (T)Array.godot_icall_Array_At_Generic(GetPtr(), index, elemTypeEncoding, elemTypeClass); }
set { objectArray[index] = value; }
set { _objectArray[index] = value; }
}
/// <summary>
@ -481,7 +481,7 @@ namespace Godot.Collections
/// <returns>The index of the item, or -1 if not found.</returns>
public int IndexOf(T item)
{
return objectArray.IndexOf(item);
return _objectArray.IndexOf(item);
}
/// <summary>
@ -494,7 +494,7 @@ namespace Godot.Collections
/// <param name="item">The item to insert.</param>
public void Insert(int index, T item)
{
objectArray.Insert(index, item);
_objectArray.Insert(index, item);
}
/// <summary>
@ -503,7 +503,7 @@ namespace Godot.Collections
/// <param name="index">The index of the element to remove.</param>
public void RemoveAt(int index)
{
objectArray.RemoveAt(index);
_objectArray.RemoveAt(index);
}
// ICollection<T>
@ -515,7 +515,7 @@ namespace Godot.Collections
/// <returns>The number of elements.</returns>
public int Count
{
get { return objectArray.Count; }
get { return _objectArray.Count; }
}
bool ICollection<T>.IsReadOnly => false;
@ -528,7 +528,7 @@ namespace Godot.Collections
/// <returns>The new size after adding the item.</returns>
public void Add(T item)
{
objectArray.Add(item);
_objectArray.Add(item);
}
/// <summary>
@ -536,7 +536,7 @@ namespace Godot.Collections
/// </summary>
public void Clear()
{
objectArray.Clear();
_objectArray.Clear();
}
/// <summary>
@ -546,7 +546,7 @@ namespace Godot.Collections
/// <returns>Whether or not this array contains the given item.</returns>
public bool Contains(T item)
{
return objectArray.Contains(item);
return _objectArray.Contains(item);
}
/// <summary>
@ -566,7 +566,7 @@ namespace Godot.Collections
// TODO This may be quite slow because every element access is an internal call.
// It could be moved entirely to an internal call if we find out how to do the cast there.
int count = objectArray.Count;
int count = _objectArray.Count;
if (array.Length < (arrayIndex + count))
throw new ArgumentException("Destination array was not long enough. Check destIndex and length, and the array's lower bounds.");
@ -597,7 +597,7 @@ namespace Godot.Collections
/// <returns>An enumerator.</returns>
public IEnumerator<T> GetEnumerator()
{
int count = objectArray.Count;
int count = _objectArray.Count;
for (int i = 0; i < count; i++)
{
@ -614,6 +614,6 @@ namespace Godot.Collections
/// Converts this <see cref="Array{T}"/> to a string.
/// </summary>
/// <returns>A string representation of this array.</returns>
public override string ToString() => objectArray.ToString();
public override string ToString() => _objectArray.ToString();
}
}

View File

@ -88,9 +88,9 @@ namespace Godot
get => new Vector3(Row0.x, Row1.x, Row2.x);
set
{
this.Row0.x = value.x;
this.Row1.x = value.y;
this.Row2.x = value.z;
Row0.x = value.x;
Row1.x = value.y;
Row2.x = value.z;
}
}
@ -103,9 +103,9 @@ namespace Godot
get => new Vector3(Row0.y, Row1.y, Row2.y);
set
{
this.Row0.y = value.x;
this.Row1.y = value.y;
this.Row2.y = value.z;
Row0.y = value.x;
Row1.y = value.y;
Row2.y = value.z;
}
}
@ -118,9 +118,9 @@ namespace Godot
get => new Vector3(Row0.z, Row1.z, Row2.z);
set
{
this.Row0.z = value.x;
this.Row1.z = value.y;
this.Row2.z = value.z;
Row0.z = value.x;
Row1.z = value.y;
Row2.z = value.z;
}
}
@ -211,7 +211,7 @@ namespace Godot
/// <summary>
/// Returns the <see cref="Basis"/>'s rotation in the form of a
/// <see cref="Godot.Quat"/>. See <see cref="GetEuler"/> if you
/// <see cref="Quat"/>. See <see cref="GetEuler"/> if you
/// need Euler angles, but keep in mind quaternions should generally
/// be preferred to Euler angles.
/// </summary>
@ -230,15 +230,15 @@ namespace Godot
return orthonormalizedBasis.Quat();
}
internal void SetQuatScale(Quat quat, Vector3 scale)
internal void SetQuatScale(Quat quaternion, Vector3 scale)
{
SetDiagonal(scale);
Rotate(quat);
Rotate(quaternion);
}
private void Rotate(Quat quat)
private void Rotate(Quat quaternion)
{
this *= new Basis(quat);
this *= new Basis(quaternion);
}
private void SetDiagonal(Vector3 diagonal)
@ -272,7 +272,7 @@ namespace Godot
/// The returned vector contains the rotation angles in
/// the format (X angle, Y angle, Z angle).
///
/// Consider using the <see cref="Basis.Quat()"/> method instead, which
/// Consider using the <see cref="Quat()"/> method instead, which
/// returns a <see cref="Godot.Quat"/> quaternion instead of Euler angles.
/// </summary>
/// <returns>A <see cref="Vector3"/> representing the basis rotation in Euler angles.</returns>
@ -552,7 +552,7 @@ namespace Godot
/// <returns>The resulting dot product.</returns>
public real_t Tdotx(Vector3 with)
{
return this.Row0[0] * with[0] + this.Row1[0] * with[1] + this.Row2[0] * with[2];
return Row0[0] * with[0] + Row1[0] * with[1] + Row2[0] * with[2];
}
/// <summary>
@ -562,7 +562,7 @@ namespace Godot
/// <returns>The resulting dot product.</returns>
public real_t Tdoty(Vector3 with)
{
return this.Row0[1] * with[0] + this.Row1[1] * with[1] + this.Row2[1] * with[2];
return Row0[1] * with[0] + Row1[1] * with[1] + Row2[1] * with[2];
}
/// <summary>
@ -572,7 +572,7 @@ namespace Godot
/// <returns>The resulting dot product.</returns>
public real_t Tdotz(Vector3 with)
{
return this.Row0[2] * with[0] + this.Row1[2] * with[1] + this.Row2[2] * with[2];
return Row0[2] * with[0] + Row1[2] * with[1] + Row2[2] * with[2];
}
/// <summary>
@ -581,7 +581,7 @@ namespace Godot
/// <returns>The transposed basis matrix.</returns>
public Basis Transposed()
{
var tr = this;
Basis tr = this;
real_t temp = tr.Row0[1];
tr.Row0[1] = tr.Row1[0];
@ -608,9 +608,9 @@ namespace Godot
{
return new Vector3
(
this.Row0.Dot(v),
this.Row1.Dot(v),
this.Row2.Dot(v)
Row0.Dot(v),
Row1.Dot(v),
Row2.Dot(v)
);
}
@ -627,9 +627,9 @@ namespace Godot
{
return new Vector3
(
this.Row0[0] * v.x + this.Row1[0] * v.y + this.Row2[0] * v.z,
this.Row0[1] * v.x + this.Row1[1] * v.y + this.Row2[1] * v.z,
this.Row0[2] * v.x + this.Row1[2] * v.y + this.Row2[2] * v.z
Row0[0] * v.x + Row1[0] * v.y + Row2[0] * v.z,
Row0[1] * v.x + Row1[1] * v.y + Row2[1] * v.z,
Row0[2] * v.x + Row1[2] * v.y + Row2[2] * v.z
);
}
@ -749,23 +749,23 @@ namespace Godot
/// <summary>
/// Constructs a pure rotation basis matrix from the given quaternion.
/// </summary>
/// <param name="quat">The quaternion to create the basis from.</param>
public Basis(Quat quat)
/// <param name="quaternion">The quaternion to create the basis from.</param>
public Basis(Quat quaternion)
{
real_t s = 2.0f / quat.LengthSquared;
real_t s = 2.0f / quaternion.LengthSquared;
real_t xs = quat.x * s;
real_t ys = quat.y * s;
real_t zs = quat.z * s;
real_t wx = quat.w * xs;
real_t wy = quat.w * ys;
real_t wz = quat.w * zs;
real_t xx = quat.x * xs;
real_t xy = quat.x * ys;
real_t xz = quat.x * zs;
real_t yy = quat.y * ys;
real_t yz = quat.y * zs;
real_t zz = quat.z * zs;
real_t xs = quaternion.x * s;
real_t ys = quaternion.y * s;
real_t zs = quaternion.z * s;
real_t wx = quaternion.w * xs;
real_t wy = quaternion.w * ys;
real_t wz = quaternion.w * zs;
real_t xx = quaternion.x * xs;
real_t xy = quaternion.x * ys;
real_t xz = quaternion.x * zs;
real_t yy = quaternion.y * ys;
real_t yz = quaternion.y * zs;
real_t zz = quaternion.z * zs;
Row0 = new Vector3(1.0f - (yy + zz), xy - wz, xz + wy);
Row1 = new Vector3(xy + wz, 1.0f - (xx + zz), yz - wx);

View File

@ -127,11 +127,11 @@ namespace Godot
}
else if (g == max)
{
h = 2 + (b - r) / delta; // Between cyan & yellow
h = 2 + ((b - r) / delta); // Between cyan & yellow
}
else
{
h = 4 + (r - g) / delta; // Between magenta & cyan
h = 4 + ((r - g) / delta); // Between magenta & cyan
}
h /= 6.0f;
@ -358,16 +358,16 @@ namespace Godot
Color res;
float sa = 1.0f - over.a;
res.a = a * sa + over.a;
res.a = (a * sa) + over.a;
if (res.a == 0)
{
return new Color(0, 0, 0, 0);
}
res.r = (r * a * sa + over.r * over.a) / res.a;
res.g = (g * a * sa + over.g * over.a) / res.a;
res.b = (b * a * sa + over.b * over.a) / res.a;
res.r = ((r * a * sa) + (over.r * over.a)) / res.a;
res.g = ((g * a * sa) + (over.g * over.a)) / res.a;
res.b = ((b * a * sa) + (over.b * over.a)) / res.a;
return res;
}
@ -395,9 +395,9 @@ namespace Godot
public Color Darkened(float amount)
{
Color res = this;
res.r = res.r * (1.0f - amount);
res.g = res.g * (1.0f - amount);
res.b = res.b * (1.0f - amount);
res.r *= 1.0f - amount;
res.g *= 1.0f - amount;
res.b *= 1.0f - amount;
return res;
}
@ -424,9 +424,9 @@ namespace Godot
public Color Lightened(float amount)
{
Color res = this;
res.r = res.r + (1.0f - res.r) * amount;
res.g = res.g + (1.0f - res.g) * amount;
res.b = res.b + (1.0f - res.b) * amount;
res.r += (1.0f - res.r) * amount;
res.g += (1.0f - res.g) * amount;
res.b += (1.0f - res.b) * amount;
return res;
}

View File

@ -6,7 +6,7 @@ using System.Runtime.InteropServices;
namespace Godot.Collections
{
class DictionarySafeHandle : SafeHandle
internal class DictionarySafeHandle : SafeHandle
{
public DictionarySafeHandle(IntPtr handle) : base(IntPtr.Zero, true)
{
@ -30,19 +30,17 @@ namespace Godot.Collections
/// typed elements allocated in the engine in C++. Useful when
/// interfacing with the engine.
/// </summary>
public class Dictionary :
IDictionary,
IDisposable
public class Dictionary : IDictionary, IDisposable
{
DictionarySafeHandle safeHandle;
bool disposed = false;
private DictionarySafeHandle _safeHandle;
private bool _disposed = false;
/// <summary>
/// Constructs a new empty <see cref="Dictionary"/>.
/// </summary>
public Dictionary()
{
safeHandle = new DictionarySafeHandle(godot_icall_Dictionary_Ctor());
_safeHandle = new DictionarySafeHandle(godot_icall_Dictionary_Ctor());
}
/// <summary>
@ -61,20 +59,20 @@ namespace Godot.Collections
internal Dictionary(DictionarySafeHandle handle)
{
safeHandle = handle;
_safeHandle = handle;
}
internal Dictionary(IntPtr handle)
{
safeHandle = new DictionarySafeHandle(handle);
_safeHandle = new DictionarySafeHandle(handle);
}
internal IntPtr GetPtr()
{
if (disposed)
if (_disposed)
throw new ObjectDisposedException(GetType().FullName);
return safeHandle.DangerousGetHandle();
return _safeHandle.DangerousGetHandle();
}
/// <summary>
@ -82,16 +80,16 @@ namespace Godot.Collections
/// </summary>
public void Dispose()
{
if (disposed)
if (_disposed)
return;
if (safeHandle != null)
if (_safeHandle != null)
{
safeHandle.Dispose();
safeHandle = null;
_safeHandle.Dispose();
_safeHandle = null;
}
disposed = true;
_disposed = true;
}
/// <summary>
@ -229,17 +227,17 @@ namespace Godot.Collections
private class DictionaryEnumerator : IDictionaryEnumerator
{
private readonly Dictionary dictionary;
private readonly int count;
private int index = -1;
private bool dirty = true;
private readonly Dictionary _dictionary;
private readonly int _count;
private int _index = -1;
private bool _dirty = true;
private DictionaryEntry entry;
private DictionaryEntry _entry;
public DictionaryEnumerator(Dictionary dictionary)
{
this.dictionary = dictionary;
count = dictionary.Count;
_dictionary = dictionary;
_count = dictionary.Count;
}
public object Current => Entry;
@ -248,19 +246,19 @@ namespace Godot.Collections
{
get
{
if (dirty)
if (_dirty)
{
UpdateEntry();
}
return entry;
return _entry;
}
}
private void UpdateEntry()
{
dirty = false;
godot_icall_Dictionary_KeyValuePairAt(dictionary.GetPtr(), index, out object key, out object value);
entry = new DictionaryEntry(key, value);
_dirty = false;
godot_icall_Dictionary_KeyValuePairAt(_dictionary.GetPtr(), _index, out object key, out object value);
_entry = new DictionaryEntry(key, value);
}
public object Key => Entry.Key;
@ -269,15 +267,15 @@ namespace Godot.Collections
public bool MoveNext()
{
index++;
dirty = true;
return index < count;
_index++;
_dirty = true;
return _index < _count;
}
public void Reset()
{
index = -1;
dirty = true;
_index = -1;
_dirty = true;
}
}
@ -291,67 +289,67 @@ namespace Godot.Collections
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_Dictionary_Ctor();
internal static extern IntPtr godot_icall_Dictionary_Ctor();
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Dictionary_Dtor(IntPtr ptr);
internal static extern void godot_icall_Dictionary_Dtor(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static object godot_icall_Dictionary_GetValue(IntPtr ptr, object key);
internal static extern object godot_icall_Dictionary_GetValue(IntPtr ptr, object key);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static object godot_icall_Dictionary_GetValue_Generic(IntPtr ptr, object key, int valTypeEncoding, IntPtr valTypeClass);
internal static extern object godot_icall_Dictionary_GetValue_Generic(IntPtr ptr, object key, int valTypeEncoding, IntPtr valTypeClass);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Dictionary_SetValue(IntPtr ptr, object key, object value);
internal static extern void godot_icall_Dictionary_SetValue(IntPtr ptr, object key, object value);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_Dictionary_Keys(IntPtr ptr);
internal static extern IntPtr godot_icall_Dictionary_Keys(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_Dictionary_Values(IntPtr ptr);
internal static extern IntPtr godot_icall_Dictionary_Values(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_Dictionary_Count(IntPtr ptr);
internal static extern int godot_icall_Dictionary_Count(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_Dictionary_KeyValuePairs(IntPtr ptr, out IntPtr keys, out IntPtr values);
internal static extern int godot_icall_Dictionary_KeyValuePairs(IntPtr ptr, out IntPtr keys, out IntPtr values);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Dictionary_KeyValuePairAt(IntPtr ptr, int index, out object key, out object value);
internal static extern void godot_icall_Dictionary_KeyValuePairAt(IntPtr ptr, int index, out object key, out object value);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Dictionary_Add(IntPtr ptr, object key, object value);
internal static extern void godot_icall_Dictionary_Add(IntPtr ptr, object key, object value);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Dictionary_Clear(IntPtr ptr);
internal static extern void godot_icall_Dictionary_Clear(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_Dictionary_Contains(IntPtr ptr, object key, object value);
internal static extern bool godot_icall_Dictionary_Contains(IntPtr ptr, object key, object value);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_Dictionary_ContainsKey(IntPtr ptr, object key);
internal static extern bool godot_icall_Dictionary_ContainsKey(IntPtr ptr, object key);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_Dictionary_Duplicate(IntPtr ptr, bool deep);
internal static extern IntPtr godot_icall_Dictionary_Duplicate(IntPtr ptr, bool deep);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_Dictionary_RemoveKey(IntPtr ptr, object key);
internal static extern bool godot_icall_Dictionary_RemoveKey(IntPtr ptr, object key);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_Dictionary_Remove(IntPtr ptr, object key, object value);
internal static extern bool godot_icall_Dictionary_Remove(IntPtr ptr, object key, object value);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_Dictionary_TryGetValue(IntPtr ptr, object key, out object value);
internal static extern bool godot_icall_Dictionary_TryGetValue(IntPtr ptr, object key, out object value);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_Dictionary_TryGetValue_Generic(IntPtr ptr, object key, out object value, int valTypeEncoding, IntPtr valTypeClass);
internal static extern bool godot_icall_Dictionary_TryGetValue_Generic(IntPtr ptr, object key, out object value, int valTypeEncoding, IntPtr valTypeClass);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Dictionary_Generic_GetValueTypeInfo(Type valueType, out int valTypeEncoding, out IntPtr valTypeClass);
internal static extern void godot_icall_Dictionary_Generic_GetValueTypeInfo(Type valueType, out int valTypeEncoding, out IntPtr valTypeClass);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_Dictionary_ToString(IntPtr ptr);
internal static extern string godot_icall_Dictionary_ToString(IntPtr ptr);
}
/// <summary>
@ -362,10 +360,9 @@ namespace Godot.Collections
/// </summary>
/// <typeparam name="TKey">The type of the dictionary's keys.</typeparam>
/// <typeparam name="TValue">The type of the dictionary's values.</typeparam>
public class Dictionary<TKey, TValue> :
IDictionary<TKey, TValue>
public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>
{
private readonly Dictionary objectDict;
private readonly Dictionary _objectDict;
internal static int valTypeEncoding;
internal static IntPtr valTypeClass;
@ -380,7 +377,7 @@ namespace Godot.Collections
/// </summary>
public Dictionary()
{
objectDict = new Dictionary();
_objectDict = new Dictionary();
}
/// <summary>
@ -390,7 +387,7 @@ namespace Godot.Collections
/// <returns>A new Godot Dictionary.</returns>
public Dictionary(IDictionary<TKey, TValue> dictionary)
{
objectDict = new Dictionary();
_objectDict = new Dictionary();
if (dictionary == null)
throw new NullReferenceException($"Parameter '{nameof(dictionary)} cannot be null.'");
@ -412,17 +409,17 @@ namespace Godot.Collections
/// <returns>A new Godot Dictionary.</returns>
public Dictionary(Dictionary dictionary)
{
objectDict = dictionary;
_objectDict = dictionary;
}
internal Dictionary(IntPtr handle)
{
objectDict = new Dictionary(handle);
_objectDict = new Dictionary(handle);
}
internal Dictionary(DictionarySafeHandle handle)
{
objectDict = new Dictionary(handle);
_objectDict = new Dictionary(handle);
}
/// <summary>
@ -431,12 +428,12 @@ namespace Godot.Collections
/// <param name="from">The typed dictionary to convert.</param>
public static explicit operator Dictionary(Dictionary<TKey, TValue> from)
{
return from.objectDict;
return from._objectDict;
}
internal IntPtr GetPtr()
{
return objectDict.GetPtr();
return _objectDict.GetPtr();
}
/// <summary>
@ -446,7 +443,7 @@ namespace Godot.Collections
/// <returns>A new Godot Dictionary.</returns>
public Dictionary<TKey, TValue> Duplicate(bool deep = false)
{
return new Dictionary<TKey, TValue>(objectDict.Duplicate(deep));
return new Dictionary<TKey, TValue>(_objectDict.Duplicate(deep));
}
// IDictionary<TKey, TValue>
@ -457,8 +454,8 @@ namespace Godot.Collections
/// <value>The value at the given <paramref name="key"/>.</value>
public TValue this[TKey key]
{
get { return (TValue)Dictionary.godot_icall_Dictionary_GetValue_Generic(objectDict.GetPtr(), key, valTypeEncoding, valTypeClass); }
set { objectDict[key] = value; }
get { return (TValue)Dictionary.godot_icall_Dictionary_GetValue_Generic(_objectDict.GetPtr(), key, valTypeEncoding, valTypeClass); }
set { _objectDict[key] = value; }
}
/// <summary>
@ -468,7 +465,7 @@ namespace Godot.Collections
{
get
{
IntPtr handle = Dictionary.godot_icall_Dictionary_Keys(objectDict.GetPtr());
IntPtr handle = Dictionary.godot_icall_Dictionary_Keys(_objectDict.GetPtr());
return new Array<TKey>(new ArraySafeHandle(handle));
}
}
@ -480,7 +477,7 @@ namespace Godot.Collections
{
get
{
IntPtr handle = Dictionary.godot_icall_Dictionary_Values(objectDict.GetPtr());
IntPtr handle = Dictionary.godot_icall_Dictionary_Values(_objectDict.GetPtr());
return new Array<TValue>(new ArraySafeHandle(handle));
}
}
@ -499,7 +496,7 @@ namespace Godot.Collections
/// <param name="value">The object to add.</param>
public void Add(TKey key, TValue value)
{
objectDict.Add(key, value);
_objectDict.Add(key, value);
}
/// <summary>
@ -509,7 +506,7 @@ namespace Godot.Collections
/// <returns>Whether or not this dictionary contains the given key.</returns>
public bool ContainsKey(TKey key)
{
return objectDict.Contains(key);
return _objectDict.Contains(key);
}
/// <summary>
@ -543,14 +540,14 @@ namespace Godot.Collections
/// <returns>The number of elements.</returns>
public int Count
{
get { return objectDict.Count; }
get { return _objectDict.Count; }
}
bool ICollection<KeyValuePair<TKey, TValue>>.IsReadOnly => false;
void ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue> item)
{
objectDict.Add(item.Key, item.Value);
_objectDict.Add(item.Key, item.Value);
}
/// <summary>
@ -558,12 +555,12 @@ namespace Godot.Collections
/// </summary>
public void Clear()
{
objectDict.Clear();
_objectDict.Clear();
}
bool ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue> item)
{
return objectDict.Contains(new KeyValuePair<object, object>(item.Key, item.Value));
return _objectDict.Contains(new KeyValuePair<object, object>(item.Key, item.Value));
}
/// <summary>
@ -621,6 +618,6 @@ namespace Godot.Collections
/// Converts this <see cref="Dictionary{TKey, TValue}"/> to a string.
/// </summary>
/// <returns>A string representation of this dictionary.</returns>
public override string ToString() => objectDict.ToString();
public override string ToString() => _objectDict.ToString();
}
}

View File

@ -72,7 +72,7 @@ namespace Godot
if (godotObject == null)
throw new ArgumentNullException(nameof(godotObject));
this.Value = godotObject;
Value = godotObject;
}
/// <inheritdoc/>
@ -189,16 +189,16 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string[] godot_icall_DynamicGodotObject_SetMemberList(IntPtr godotObject);
internal static extern string[] godot_icall_DynamicGodotObject_SetMemberList(IntPtr godotObject);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_DynamicGodotObject_InvokeMember(IntPtr godotObject, string name, object[] args, out object result);
internal static extern bool godot_icall_DynamicGodotObject_InvokeMember(IntPtr godotObject, string name, object[] args, out object result);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_DynamicGodotObject_GetMember(IntPtr godotObject, string name, out object result);
internal static extern bool godot_icall_DynamicGodotObject_GetMember(IntPtr godotObject, string name, out object result);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_DynamicGodotObject_SetMember(IntPtr godotObject, string name, object value);
internal static extern bool godot_icall_DynamicGodotObject_SetMember(IntPtr godotObject, string name, object value);
#region We don't override these methods

View File

@ -36,6 +36,6 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static WeakRef godot_icall_Object_weakref(IntPtr obj);
internal static extern WeakRef godot_icall_Object_weakref(IntPtr obj);
}
}

View File

@ -552,70 +552,69 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static object godot_icall_GD_bytes2var(byte[] bytes, bool allow_objects);
internal static extern object godot_icall_GD_bytes2var(byte[] bytes, bool allowObjects);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static object godot_icall_GD_convert(object what, Variant.Type type);
internal static extern object godot_icall_GD_convert(object what, Variant.Type type);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_GD_hash(object var);
internal static extern int godot_icall_GD_hash(object var);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static Object godot_icall_GD_instance_from_id(ulong instance_id);
internal static extern Object godot_icall_GD_instance_from_id(ulong instanceId);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_GD_print(object[] what);
internal static extern void godot_icall_GD_print(object[] what);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_GD_printerr(object[] what);
internal static extern void godot_icall_GD_printerr(object[] what);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_GD_printraw(object[] what);
internal static extern void godot_icall_GD_printraw(object[] what);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_GD_prints(object[] what);
internal static extern void godot_icall_GD_prints(object[] what);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_GD_printt(object[] what);
internal static extern void godot_icall_GD_printt(object[] what);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static float godot_icall_GD_randf();
internal static extern float godot_icall_GD_randf();
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static uint godot_icall_GD_randi();
internal static extern uint godot_icall_GD_randi();
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_GD_randomize();
internal static extern void godot_icall_GD_randomize();
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static double godot_icall_GD_rand_range(double from, double to);
internal static extern double godot_icall_GD_rand_range(double from, double to);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static uint godot_icall_GD_rand_seed(ulong seed, out ulong newSeed);
internal static extern uint godot_icall_GD_rand_seed(ulong seed, out ulong newSeed);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_GD_seed(ulong seed);
internal static extern void godot_icall_GD_seed(ulong seed);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_GD_str(object[] what);
internal static extern string godot_icall_GD_str(object[] what);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static object godot_icall_GD_str2var(string str);
internal static extern object godot_icall_GD_str2var(string str);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_GD_type_exists(string type);
internal static extern bool godot_icall_GD_type_exists(string type);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static byte[] godot_icall_GD_var2bytes(object what, bool full_objects);
internal static extern byte[] godot_icall_GD_var2bytes(object what, bool fullObjects);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_GD_var2str(object var);
internal static extern string godot_icall_GD_var2str(object var);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_GD_pusherror(string type);
internal static extern void godot_icall_GD_pusherror(string type);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_GD_pushwarning(string type);
internal static extern void godot_icall_GD_pushwarning(string type);
}
}

View File

@ -6,7 +6,8 @@ namespace Godot
{
public class GodotSynchronizationContext : SynchronizationContext
{
private readonly BlockingCollection<KeyValuePair<SendOrPostCallback, object>> _queue = new BlockingCollection<KeyValuePair<SendOrPostCallback, object>>();
private readonly BlockingCollection<KeyValuePair<SendOrPostCallback, object>> _queue =
new BlockingCollection<KeyValuePair<SendOrPostCallback, object>>();
public override void Post(SendOrPostCallback d, object state)
{

View File

@ -24,7 +24,7 @@ namespace Godot
try
{
var stackTrace = new StackTrace(true).ToString();
string stackTrace = new StackTrace(true).ToString();
GD.PrintErr(stackTrace);
}
catch

View File

@ -3,7 +3,7 @@ using System.Collections.Generic;
namespace Godot
{
static class MarshalUtils
internal static class MarshalUtils
{
/// <summary>
/// Returns <see langword="true"/> if the generic type definition of <paramref name="type"/>

View File

@ -40,9 +40,9 @@ namespace Godot
public const real_t NaN = real_t.NaN;
// 0.0174532924f and 0.0174532925199433
private const real_t Deg2RadConst = (real_t)0.0174532925199432957692369077M;
private const real_t _deg2RadConst = (real_t)0.0174532925199432957692369077M;
// 57.29578f and 57.2957795130823
private const real_t Rad2DegConst = (real_t)57.295779513082320876798154814M;
private const real_t _rad2DegConst = (real_t)57.295779513082320876798154814M;
/// <summary>
/// Returns the absolute value of <paramref name="s"/> (i.e. positive value).
@ -199,7 +199,7 @@ namespace Godot
/// <returns>The same angle expressed in radians.</returns>
public static real_t Deg2Rad(real_t deg)
{
return deg * Deg2RadConst;
return deg * _deg2RadConst;
}
/// <summary>
@ -240,7 +240,7 @@ namespace Godot
return Pow(s * 2.0f, -curve) * 0.5f;
}
return (1.0f - Pow(1.0f - (s - 0.5f) * 2.0f, -curve)) * 0.5f + 0.5f;
return ((1.0f - Pow(1.0f - ((s - 0.5f) * 2.0f), -curve)) * 0.5f) + 0.5f;
}
return 0f;
@ -347,7 +347,7 @@ namespace Godot
/// <returns>The resulting value of the interpolation.</returns>
public static real_t Lerp(real_t from, real_t to, real_t weight)
{
return from + (to - from) * weight;
return from + ((to - from) * weight);
}
/// <summary>
@ -364,7 +364,7 @@ namespace Godot
{
real_t difference = (to - from) % Mathf.Tau;
real_t distance = ((2 * difference) % Mathf.Tau) - difference;
return from + distance * weight;
return from + (distance * weight);
}
/// <summary>
@ -434,7 +434,10 @@ namespace Godot
/// <returns>The value after moving.</returns>
public static real_t MoveToward(real_t from, real_t to, real_t delta)
{
return Abs(to - from) <= delta ? to : from + Sign(to - from) * delta;
if (Abs(to - from) <= delta)
return to;
return from + (Sign(to - from) * delta);
}
/// <summary>
@ -518,7 +521,7 @@ namespace Godot
/// <returns>The same angle expressed in degrees.</returns>
public static real_t Rad2Deg(real_t rad)
{
return rad * Rad2DegConst;
return rad * _rad2DegConst;
}
/// <summary>
@ -594,7 +597,7 @@ namespace Godot
return from;
}
real_t x = Clamp((weight - from) / (to - from), (real_t)0.0, (real_t)1.0);
return x * x * (3 - 2 * x);
return x * x * (3 - (2 * x));
}
/// <summary>
@ -618,7 +621,8 @@ namespace Godot
/// <returns>The position of the first non-zero digit.</returns>
public static int StepDecimals(real_t step)
{
double[] sd = new double[] {
double[] sd = new double[]
{
0.9999,
0.09999,
0.009999,
@ -629,7 +633,7 @@ namespace Godot
0.00000009999,
0.000000009999,
};
double abs = Mathf.Abs(step);
double abs = Abs(step);
double decs = abs - (int)abs; // Strip away integer part
for (int i = 0; i < sd.Length; i++)
{
@ -652,7 +656,7 @@ namespace Godot
{
if (step != 0f)
{
return Floor(s / step + 0.5f) * step;
return Floor((s / step) + 0.5f) * step;
}
return s;
@ -691,7 +695,10 @@ namespace Godot
public static int Wrap(int value, int min, int max)
{
int range = max - min;
return range == 0 ? min : min + ((value - min) % range + range) % range;
if (range == 0)
return min;
return min + ((((value - min) % range) + range) % range);
}
/// <summary>
@ -707,7 +714,10 @@ namespace Godot
public static real_t Wrap(real_t value, real_t min, real_t max)
{
real_t range = max - min;
return IsZeroApprox(range) ? min : min + ((value - min) % range + range) % range;
if (IsZeroApprox(range))
return min;
return min + ((((value - min) % range) + range) % range);
}
}
}

View File

@ -41,16 +41,16 @@ namespace Godot
/// </example>
public sealed partial class NodePath : IDisposable
{
private bool disposed = false;
private bool _disposed = false;
internal IntPtr ptr;
private IntPtr ptr;
internal static IntPtr GetPtr(NodePath instance)
{
if (instance == null)
throw new NullReferenceException($"The instance of type {nameof(NodePath)} is null.");
if (instance.disposed)
if (instance._disposed)
throw new ObjectDisposedException(instance.GetType().FullName);
return instance.ptr;
@ -72,7 +72,7 @@ namespace Godot
private void Dispose(bool disposing)
{
if (disposed)
if (_disposed)
return;
if (ptr != IntPtr.Zero)
@ -81,7 +81,7 @@ namespace Godot
ptr = IntPtr.Zero;
}
disposed = true;
_disposed = true;
}
internal NodePath(IntPtr ptr)
@ -102,7 +102,6 @@ namespace Godot
/// </summary>
public NodePath() : this(string.Empty) { }
/// <summary>
/// Constructs a <see cref="NodePath"/> from a string <paramref name="path"/>,
/// e.g.: <c>"Path2D/PathFollow2D/Sprite2D:texture:size"</c>.
@ -134,7 +133,7 @@ namespace Godot
/// <param name="path"></param>
public NodePath(string path)
{
this.ptr = godot_icall_NodePath_Ctor(path);
ptr = godot_icall_NodePath_Ctor(path);
}
/// <summary>
@ -272,36 +271,36 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_NodePath_Ctor(string path);
private static extern IntPtr godot_icall_NodePath_Ctor(string path);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_NodePath_Dtor(IntPtr ptr);
private static extern void godot_icall_NodePath_Dtor(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_NodePath_operator_String(IntPtr ptr);
private static extern string godot_icall_NodePath_operator_String(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_NodePath_get_as_property_path(IntPtr ptr);
private static extern IntPtr godot_icall_NodePath_get_as_property_path(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_NodePath_get_concatenated_subnames(IntPtr ptr);
private static extern string godot_icall_NodePath_get_concatenated_subnames(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_NodePath_get_name(IntPtr ptr, int arg1);
private static extern string godot_icall_NodePath_get_name(IntPtr ptr, int arg1);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_NodePath_get_name_count(IntPtr ptr);
private static extern int godot_icall_NodePath_get_name_count(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_NodePath_get_subname(IntPtr ptr, int arg1);
private static extern string godot_icall_NodePath_get_subname(IntPtr ptr, int arg1);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_NodePath_get_subname_count(IntPtr ptr);
private static extern int godot_icall_NodePath_get_subname_count(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_NodePath_is_absolute(IntPtr ptr);
private static extern bool godot_icall_NodePath_is_absolute(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static bool godot_icall_NodePath_is_empty(IntPtr ptr);
private static extern bool godot_icall_NodePath_is_empty(IntPtr ptr);
}
}

View File

@ -5,7 +5,7 @@ namespace Godot
{
public partial class Object : IDisposable
{
private bool disposed = false;
private bool _disposed = false;
private const string nativeName = "Object";
@ -39,7 +39,7 @@ namespace Godot
if (instance == null)
return IntPtr.Zero;
if (instance.disposed)
if (instance._disposed)
throw new ObjectDisposedException(instance.GetType().FullName);
return instance.ptr;
@ -64,7 +64,7 @@ namespace Godot
/// </summary>
protected virtual void Dispose(bool disposing)
{
if (disposed)
if (_disposed)
return;
if (ptr != IntPtr.Zero)
@ -79,10 +79,10 @@ namespace Godot
godot_icall_Object_Disposed(this, ptr);
}
this.ptr = IntPtr.Zero;
ptr = IntPtr.Zero;
}
disposed = true;
_disposed = true;
}
/// <summary>
@ -132,19 +132,19 @@ namespace Godot
public dynamic DynamicObject => new DynamicGodotObject(this);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_Object_Ctor(Object obj);
internal static extern IntPtr godot_icall_Object_Ctor(Object obj);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Object_Disposed(Object obj, IntPtr ptr);
internal static extern void godot_icall_Object_Disposed(Object obj, IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_Reference_Disposed(Object obj, IntPtr ptr, bool isFinalizer);
internal static extern void godot_icall_Reference_Disposed(Object obj, IntPtr ptr, bool isFinalizer);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_Object_ToString(IntPtr ptr);
internal static extern string godot_icall_Object_ToString(IntPtr ptr);
// Used by the generated API
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_Object_ClassDB_get_method(string type, string method);
internal static extern IntPtr godot_icall_Object_ClassDB_get_method(string type, string method);
}
}

View File

@ -156,9 +156,9 @@ namespace Godot
return null;
}
Vector3 result = b._normal.Cross(c._normal) * D +
c._normal.Cross(_normal) * b.D +
_normal.Cross(b._normal) * c.D;
Vector3 result = (b._normal.Cross(c._normal) * D) +
(c._normal.Cross(_normal) * b.D) +
(_normal.Cross(b._normal) * c.D);
return result / denom;
}
@ -253,7 +253,7 @@ namespace Godot
/// <returns>The projected point.</returns>
public Vector3 Project(Vector3 point)
{
return point - _normal * DistanceTo(point);
return point - (_normal * DistanceTo(point));
}
// Constants
@ -292,7 +292,7 @@ namespace Godot
public Plane(real_t a, real_t b, real_t c, real_t d)
{
_normal = new Vector3(a, b, c);
this.D = d;
D = d;
}
/// <summary>
@ -303,8 +303,8 @@ namespace Godot
/// <param name="d">The plane's distance from the origin. This value is typically non-negative.</param>
public Plane(Vector3 normal, real_t d)
{
this._normal = normal;
this.D = d;
_normal = normal;
D = d;
}
/// <summary>

View File

@ -15,7 +15,7 @@ namespace Godot
/// It is similar to <see cref="Basis"/>, which implements matrix
/// representation of rotations, and can be parametrized using both
/// an axis-angle pair or Euler angles. Basis stores rotation, scale,
/// and shearing, while Quat only stores rotation
/// and shearing, while Quat only stores rotation.
///
/// Due to its compactness and the way it is stored in memory, certain
/// operations (obtaining axis-angle and performing SLERP, in particular)
@ -147,10 +147,9 @@ namespace Godot
/// <returns>The interpolated quaternion.</returns>
public Quat CubicSlerp(Quat b, Quat preA, Quat postB, real_t weight)
{
real_t t = weight;
real_t t2 = (1.0f - t) * t * 2f;
Quat sp = Slerp(b, t);
Quat sq = preA.Slerpni(postB, t);
real_t t2 = (1.0f - weight) * weight * 2f;
Quat sp = Slerp(b, weight);
Quat sq = preA.Slerpni(postB, weight);
return sp.Slerpni(sq, t2);
}
@ -161,7 +160,7 @@ namespace Godot
/// <returns>The dot product.</returns>
public real_t Dot(Quat b)
{
return x * b.x + y * b.y + z * b.z + w * b.w;
return (x * b.x) + (y * b.y) + (z * b.z) + (w * b.w);
}
/// <summary>
@ -308,10 +307,10 @@ namespace Godot
// Calculate final values.
return new Quat
(
scale0 * x + scale1 * to1.x,
scale0 * y + scale1 * to1.y,
scale0 * z + scale1 * to1.z,
scale0 * w + scale1 * to1.w
(scale0 * x) + (scale1 * to1.x),
(scale0 * y) + (scale1 * to1.y),
(scale0 * z) + (scale1 * to1.z),
(scale0 * w) + (scale1 * to1.w)
);
}
@ -339,10 +338,10 @@ namespace Godot
return new Quat
(
invFactor * x + newFactor * to.x,
invFactor * y + newFactor * to.y,
invFactor * z + newFactor * to.z,
invFactor * w + newFactor * to.w
(invFactor * x) + (newFactor * to.x),
(invFactor * y) + (newFactor * to.y),
(invFactor * z) + (newFactor * to.z),
(invFactor * w) + (newFactor * to.w)
);
}
@ -361,7 +360,7 @@ namespace Godot
#endif
var u = new Vector3(x, y, z);
Vector3 uv = u.Cross(v);
return v + ((uv * w) + u.Cross(uv)) * 2;
return v + (((uv * w) + u.Cross(uv)) * 2);
}
// Constants
@ -416,25 +415,25 @@ namespace Godot
/// <param name="eulerYXZ">Euler angles that the quaternion will be rotated by.</param>
public Quat(Vector3 eulerYXZ)
{
real_t half_a1 = eulerYXZ.y * 0.5f;
real_t half_a2 = eulerYXZ.x * 0.5f;
real_t half_a3 = eulerYXZ.z * 0.5f;
real_t halfA1 = eulerYXZ.y * 0.5f;
real_t halfA2 = eulerYXZ.x * 0.5f;
real_t halfA3 = eulerYXZ.z * 0.5f;
// R = Y(a1).X(a2).Z(a3) convention for Euler angles.
// Conversion to quaternion as listed in https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19770024290.pdf (page A-6)
// a3 is the angle of the first rotation, following the notation in this reference.
real_t cos_a1 = Mathf.Cos(half_a1);
real_t sin_a1 = Mathf.Sin(half_a1);
real_t cos_a2 = Mathf.Cos(half_a2);
real_t sin_a2 = Mathf.Sin(half_a2);
real_t cos_a3 = Mathf.Cos(half_a3);
real_t sin_a3 = Mathf.Sin(half_a3);
real_t cosA1 = Mathf.Cos(halfA1);
real_t sinA1 = Mathf.Sin(halfA1);
real_t cosA2 = Mathf.Cos(halfA2);
real_t sinA2 = Mathf.Sin(halfA2);
real_t cosA3 = Mathf.Cos(halfA3);
real_t sinA3 = Mathf.Sin(halfA3);
x = sin_a1 * cos_a2 * sin_a3 + cos_a1 * sin_a2 * cos_a3;
y = sin_a1 * cos_a2 * cos_a3 - cos_a1 * sin_a2 * sin_a3;
z = cos_a1 * cos_a2 * sin_a3 - sin_a1 * sin_a2 * cos_a3;
w = sin_a1 * sin_a2 * sin_a3 + cos_a1 * cos_a2 * cos_a3;
x = (sinA1 * cosA2 * sinA3) + (cosA1 * sinA2 * cosA3);
y = (sinA1 * cosA2 * cosA3) - (cosA1 * sinA2 * sinA3);
z = (cosA1 * cosA2 * sinA3) - (sinA1 * sinA2 * cosA3);
w = (sinA1 * sinA2 * sinA3) + (cosA1 * cosA2 * cosA3);
}
/// <summary>
@ -478,10 +477,10 @@ namespace Godot
{
return new Quat
(
left.w * right.x + left.x * right.w + left.y * right.z - left.z * right.y,
left.w * right.y + left.y * right.w + left.z * right.x - left.x * right.z,
left.w * right.z + left.z * right.w + left.x * right.y - left.y * right.x,
left.w * right.w - left.x * right.x - left.y * right.y - left.z * right.z
(left.w * right.x) + (left.x * right.w) + (left.y * right.z) - (left.z * right.y),
(left.w * right.y) + (left.y * right.w) + (left.z * right.x) - (left.x * right.z),
(left.w * right.z) + (left.z * right.w) + (left.x * right.y) - (left.y * right.x),
(left.w * right.w) - (left.x * right.x) - (left.y * right.y) - (left.z * right.z)
);
}
@ -504,10 +503,10 @@ namespace Godot
{
return new Quat
(
left.w * right.x + left.y * right.z - left.z * right.y,
left.w * right.y + left.z * right.x - left.x * right.z,
left.w * right.z + left.x * right.y - left.y * right.x,
-left.x * right.x - left.y * right.y - left.z * right.z
(left.w * right.x) + (left.y * right.z) - (left.z * right.y),
(left.w * right.y) + (left.z * right.x) - (left.x * right.z),
(left.w * right.z) + (left.x * right.y) - (left.y * right.x),
-(left.x * right.x) - (left.y * right.y) - (left.z * right.z)
);
}
@ -515,10 +514,10 @@ namespace Godot
{
return new Quat
(
right.w * left.x + right.y * left.z - right.z * left.y,
right.w * left.y + right.z * left.x - right.x * left.z,
right.w * left.z + right.x * left.y - right.y * left.x,
-right.x * left.x - right.y * left.y - right.z * left.z
(right.w * left.x) + (right.y * left.z) - (right.z * left.y),
(right.w * left.y) + (right.z * left.x) - (right.x * left.z),
(right.w * left.z) + (right.x * left.y) - (right.y * left.x),
-(right.x * left.x) - (right.y * left.y) - (right.z * left.z)
);
}
@ -598,7 +597,7 @@ namespace Godot
/// <returns>A string representation of this quaternion.</returns>
public override string ToString()
{
return String.Format("({0}, {1}, {2}, {3})", x.ToString(), y.ToString(), z.ToString(), w.ToString());
return $"({x}, {y}, {z}, {w})";
}
/// <summary>
@ -607,7 +606,7 @@ namespace Godot
/// <returns>A string representation of this quaternion.</returns>
public string ToString(string format)
{
return String.Format("({0}, {1}, {2}, {3})", x.ToString(format), y.ToString(format), z.ToString(format), w.ToString(format));
return $"({x.ToString(format)}, {y.ToString(format)}, {z.ToString(format)}, {w.ToString(format)})";
}
}
}

View File

@ -11,7 +11,7 @@ namespace Godot
/// </summary>
public sealed partial class RID : IDisposable
{
private bool disposed = false;
private bool _disposed = false;
internal IntPtr ptr;
@ -20,7 +20,7 @@ namespace Godot
if (instance == null)
throw new NullReferenceException($"The instance of type {nameof(RID)} is null.");
if (instance.disposed)
if (instance._disposed)
throw new ObjectDisposedException(instance.GetType().FullName);
return instance.ptr;
@ -42,7 +42,7 @@ namespace Godot
private void Dispose(bool disposing)
{
if (disposed)
if (_disposed)
return;
if (ptr != IntPtr.Zero)
@ -51,7 +51,7 @@ namespace Godot
ptr = IntPtr.Zero;
}
disposed = true;
_disposed = true;
}
internal RID(IntPtr ptr)
@ -96,12 +96,12 @@ namespace Godot
public override string ToString() => "[RID]";
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static IntPtr godot_icall_RID_Ctor(IntPtr from);
internal static extern IntPtr godot_icall_RID_Ctor(IntPtr from);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static void godot_icall_RID_Dtor(IntPtr ptr);
internal static extern void godot_icall_RID_Dtor(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_RID_get_id(IntPtr ptr);
internal static extern int godot_icall_RID_get_id(IntPtr ptr);
}
}

View File

@ -83,7 +83,7 @@ namespace Godot
/// <returns>The clipped <see cref="Rect2"/>.</returns>
public Rect2 Clip(Rect2 b)
{
var newRect = b;
Rect2 newRect = b;
if (!Intersects(newRect))
{
@ -123,7 +123,7 @@ namespace Godot
/// <returns>The expanded <see cref="Rect2"/>.</returns>
public Rect2 Expand(Vector2 to)
{
var expanded = this;
Rect2 expanded = this;
Vector2 begin = expanded._position;
Vector2 end = expanded._position + expanded._size;
@ -171,7 +171,7 @@ namespace Godot
/// <returns>The grown <see cref="Rect2"/>.</returns>
public Rect2 Grow(real_t by)
{
var g = this;
Rect2 g = this;
g._position.x -= by;
g._position.y -= by;
@ -194,7 +194,7 @@ namespace Godot
/// <returns>The grown <see cref="Rect2"/>.</returns>
public Rect2 GrowIndividual(real_t left, real_t top, real_t right, real_t bottom)
{
var g = this;
Rect2 g = this;
g._position.x -= left;
g._position.y -= top;
@ -215,7 +215,7 @@ namespace Godot
/// <returns>The grown <see cref="Rect2"/>.</returns>
public Rect2 GrowMargin(Margin margin, real_t by)
{
var g = this;
Rect2 g = this;
g = g.GrowIndividual(Margin.Left == margin ? by : 0,
Margin.Top == margin ? by : 0,

View File

@ -5,9 +5,9 @@ namespace Godot
{
public class SignalAwaiter : IAwaiter<object[]>, IAwaitable<object[]>
{
private bool completed;
private object[] result;
private Action action;
private bool _completed;
private object[] _result;
private Action _action;
public SignalAwaiter(Object source, string signal, Object target)
{
@ -15,24 +15,24 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static Error godot_icall_SignalAwaiter_connect(IntPtr source, string signal, IntPtr target, SignalAwaiter awaiter);
internal static extern Error godot_icall_SignalAwaiter_connect(IntPtr source, string signal, IntPtr target, SignalAwaiter awaiter);
public bool IsCompleted
{
get
{
return completed;
return _completed;
}
}
public void OnCompleted(Action action)
{
this.action = action;
this._action = action;
}
public object[] GetResult()
{
return result;
return _result;
}
public IAwaiter<object[]> GetAwaiter()
@ -42,19 +42,15 @@ namespace Godot
internal void SignalCallback(object[] args)
{
completed = true;
result = args;
if (action != null)
{
action();
}
_completed = true;
_result = args;
_action?.Invoke();
}
internal void FailureCallback()
{
action = null;
completed = true;
_action = null;
_completed = true;
}
}
}

View File

@ -101,7 +101,7 @@ namespace Godot
/// <returns>The bigrams of this string.</returns>
public static string[] Bigrams(this string instance)
{
var b = new string[instance.Length - 1];
string[] b = new string[instance.Length - 1];
for (int i = 0; i < b.Length; i++)
{
@ -267,7 +267,7 @@ namespace Godot
public static string Capitalize(this string instance)
{
string aux = instance.Replace("_", " ").ToLower();
var cap = string.Empty;
string cap = string.Empty;
for (int i = 0; i < aux.GetSliceCount(" "); i++)
{
@ -511,20 +511,20 @@ namespace Godot
int basepos = instance.Find("://");
string rs;
var @base = string.Empty;
string directory = string.Empty;
if (basepos != -1)
{
var end = basepos + 3;
int end = basepos + 3;
rs = instance.Substring(end);
@base = instance.Substring(0, end);
directory = instance.Substring(0, end);
}
else
{
if (instance.BeginsWith("/"))
{
rs = instance.Substring(1);
@base = "/";
directory = "/";
}
else
{
@ -535,9 +535,9 @@ namespace Godot
int sep = Mathf.Max(rs.FindLast("/"), rs.FindLast("\\"));
if (sep == -1)
return @base;
return directory;
return @base + rs.Substr(0, sep);
return directory + rs.Substr(0, sep);
}
/// <summary>
@ -611,7 +611,7 @@ namespace Godot
/// <returns>The hexadecimal representation of this byte.</returns>
internal static string HexEncode(this byte b)
{
var ret = string.Empty;
string ret = string.Empty;
for (int i = 0; i < 2; i++)
{
@ -641,7 +641,7 @@ namespace Godot
/// <returns>The hexadecimal representation of this byte array.</returns>
public static string HexEncode(this byte[] bytes)
{
var ret = string.Empty;
string ret = string.Empty;
foreach (byte b in bytes)
{
@ -831,10 +831,10 @@ namespace Godot
return false; // Don't start with number plz
}
bool validChar = instance[i] >= '0' &&
instance[i] <= '9' || instance[i] >= 'a' &&
instance[i] <= 'z' || instance[i] >= 'A' &&
instance[i] <= 'Z' || instance[i] == '_';
bool validChar = instance[i] == '_' ||
(instance[i] >= 'a' && instance[i] <= 'z') ||
(instance[i] >= 'A' && instance[i] <= 'Z') ||
(instance[i] >= '0' && instance[i] <= '9');
if (!validChar)
return false;
@ -1036,7 +1036,7 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static byte[] godot_icall_String_md5_buffer(string str);
internal static extern byte[] godot_icall_String_md5_buffer(string str);
/// <summary>
/// Returns the MD5 hash of the string as a string.
@ -1050,7 +1050,7 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_String_md5_text(string str);
internal static extern string godot_icall_String_md5_text(string str);
/// <summary>
/// Perform a case-insensitive comparison to another string, return -1 if less, 0 if equal and +1 if greater.
@ -1228,7 +1228,7 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_String_rfind(string str, string what, int from);
internal static extern int godot_icall_String_rfind(string str, string what, int from);
/// <summary>
/// Perform a search for a substring, but start from the end of the string instead of the beginning.
@ -1245,7 +1245,7 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static int godot_icall_String_rfindn(string str, string what, int from);
internal static extern int godot_icall_String_rfindn(string str, string what, int from);
/// <summary>
/// Returns the right side of the string from a given position.
@ -1305,7 +1305,7 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static byte[] godot_icall_String_sha256_buffer(string str);
internal static extern byte[] godot_icall_String_sha256_buffer(string str);
/// <summary>
/// Returns the SHA-256 hash of the string as a string.
@ -1319,7 +1319,7 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_String_sha256_text(string str);
internal static extern string godot_icall_String_sha256_text(string str);
/// <summary>
/// Returns the similarity index of the text compared to this string.
@ -1374,7 +1374,7 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern static string godot_icall_String_simplify_path(string str);
internal static extern string godot_icall_String_simplify_path(string str);
/// <summary>
/// Split the string by a divisor string, return an array of the substrings.
@ -1425,7 +1425,8 @@ namespace Godot
return ret.ToArray();
}
private static readonly char[] _nonPrintable = {
private static readonly char[] _nonPrintable =
{
(char)00, (char)01, (char)02, (char)03, (char)04, (char)05,
(char)06, (char)07, (char)08, (char)09, (char)10, (char)11,
(char)12, (char)13, (char)14, (char)15, (char)16, (char)17,

View File

@ -168,7 +168,7 @@ namespace Godot
/// <returns>The resulting transform.</returns>
public Transform LookingAt(Vector3 target, Vector3 up)
{
var t = this;
Transform t = this;
t.SetLookAt(origin, target, up);
return t;
}
@ -205,7 +205,7 @@ namespace Godot
return new Transform(basis.Scaled(scale), origin * scale);
}
public void SetLookAt(Vector3 eye, Vector3 target, Vector3 up)
private void SetLookAt(Vector3 eye, Vector3 target, Vector3 up)
{
// Make rotation matrix
// Z vector
@ -278,9 +278,9 @@ namespace Godot
return new Vector3
(
basis.Row0[0] * vInv.x + basis.Row1[0] * vInv.y + basis.Row2[0] * vInv.z,
basis.Row0[1] * vInv.x + basis.Row1[1] * vInv.y + basis.Row2[1] * vInv.z,
basis.Row0[2] * vInv.x + basis.Row1[2] * vInv.y + basis.Row2[2] * vInv.z
(basis.Row0[0] * vInv.x) + (basis.Row1[0] * vInv.y) + (basis.Row2[0] * vInv.z),
(basis.Row0[1] * vInv.x) + (basis.Row1[1] * vInv.y) + (basis.Row2[1] * vInv.z),
(basis.Row0[2] * vInv.x) + (basis.Row1[2] * vInv.y) + (basis.Row2[2] * vInv.z)
);
}
@ -327,14 +327,14 @@ namespace Godot
}
/// <summary>
/// Constructs a transformation matrix from the given <paramref name="quat"/>
/// Constructs a transformation matrix from the given <paramref name="quaternion"/>
/// and <paramref name="origin"/> vector.
/// </summary>
/// <param name="quat">The <see cref="Quat"/> to create the basis from.</param>
/// <param name="quaternion">The <see cref="Quat"/> to create the basis from.</param>
/// <param name="origin">The origin vector, or column index 3.</param>
public Transform(Quat quat, Vector3 origin)
public Transform(Quat quaternion, Vector3 origin)
{
basis = new Basis(quat);
basis = new Basis(quaternion);
this.origin = origin;
}

View File

@ -149,7 +149,7 @@ namespace Godot
if (det == 0)
throw new InvalidOperationException("Matrix determinant is zero and cannot be inverted.");
var inv = this;
Transform2D inv = this;
real_t temp = inv[0, 0];
inv[0, 0] = inv[1, 1];
@ -176,7 +176,7 @@ namespace Godot
/// <returns>The determinant of the basis matrix.</returns>
private real_t BasisDeterminant()
{
return x.x * y.y - x.y * y.x;
return (x.x * y.y) - (x.y * y.x);
}
/// <summary>
@ -238,8 +238,8 @@ namespace Godot
else
{
real_t angle = weight * Mathf.Acos(dot);
Vector2 v3 = (v2 - v1 * dot).Normalized();
v = v1 * Mathf.Cos(angle) + v3 * Mathf.Sin(angle);
Vector2 v3 = (v2 - (v1 * dot)).Normalized();
v = (v1 * Mathf.Cos(angle)) + (v3 * Mathf.Sin(angle));
}
// Extract parameters
@ -263,7 +263,7 @@ namespace Godot
/// <returns>The inverse matrix.</returns>
public Transform2D Inverse()
{
var inv = this;
Transform2D inv = this;
// Swap
real_t temp = inv.x.y;
@ -282,13 +282,13 @@ namespace Godot
/// <returns>The orthonormalized transform.</returns>
public Transform2D Orthonormalized()
{
var on = this;
Transform2D on = this;
Vector2 onX = on.x;
Vector2 onY = on.y;
onX.Normalize();
onY = onY - onX * onX.Dot(onY);
onY = onY - (onX * onX.Dot(onY));
onY.Normalize();
on.x = onX;
@ -314,7 +314,7 @@ namespace Godot
/// <returns>The scaled transformation matrix.</returns>
public Transform2D Scaled(Vector2 scale)
{
var copy = this;
Transform2D copy = this;
copy.x *= scale;
copy.y *= scale;
copy.origin *= scale;
@ -331,12 +331,12 @@ namespace Godot
private real_t Tdotx(Vector2 with)
{
return this[0, 0] * with[0] + this[1, 0] * with[1];
return (this[0, 0] * with[0]) + (this[1, 0] * with[1]);
}
private real_t Tdoty(Vector2 with)
{
return this[0, 1] * with[0] + this[1, 1] * with[1];
return (this[0, 1] * with[0]) + (this[1, 1] * with[1]);
}
/// <summary>
@ -350,7 +350,7 @@ namespace Godot
/// <returns>The translated matrix.</returns>
public Transform2D Translated(Vector2 offset)
{
var copy = this;
Transform2D copy = this;
copy.origin += copy.BasisXform(offset);
return copy;
}
@ -478,7 +478,7 @@ namespace Godot
/// <summary>
/// Returns a Vector2 transformed (multiplied) by the inverse transformation matrix.
/// </summary>
/// <param name="vector">A vector to inversely transform.</param>
/// <param name="vector">A Vector2 to inversely transform.</param>
/// <param name="transform">The transformation to apply.</param>
/// <returns>The inversely transformed Vector2.</returns>
public static Vector2 operator *(Vector2 vector, Transform2D transform)
@ -522,7 +522,7 @@ namespace Godot
/// Returns a copy of the given Vector2[] transformed (multiplied) by transformation matrix.
/// </summary>
/// <param name="transform">The transformation to apply.</param>
/// <param name="array">a Vector2[] to transform.</param>
/// <param name="array">A Vector2[] to transform.</param>
/// <returns>The transformed copy of the Vector2[].</returns>
public static Vector2[] operator *(Transform2D transform, Vector2[] array)
{

View File

@ -35,6 +35,7 @@ namespace Godot
/// The vector's X component. Also accessible by using the index position <c>[0]</c>.
/// </summary>
public real_t x;
/// <summary>
/// The vector's Y component. Also accessible by using the index position <c>[1]</c>.
/// </summary>
@ -191,7 +192,7 @@ namespace Godot
/// <returns>The cross product value.</returns>
public real_t Cross(Vector2 b)
{
return x * b.y - y * b.x;
return (x * b.y) - (y * b.x);
}
/// <summary>
@ -214,10 +215,12 @@ namespace Godot
real_t t2 = t * t;
real_t t3 = t2 * t;
return 0.5f * (p1 * 2.0f +
(-p0 + p2) * t +
(2.0f * p0 - 5.0f * p1 + 4 * p2 - p3) * t2 +
(-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3);
return 0.5f * (
(p1 * 2.0f) +
((-p0 + p2) * t) +
(((2.0f * p0) - (5.0f * p1) + (4 * p2) - p3) * t2) +
((-p0 + (3.0f * p1) - (3.0f * p2) + p3) * t3)
);
}
/// <summary>
@ -259,7 +262,7 @@ namespace Godot
/// <returns>The dot product of the two vectors.</returns>
public real_t Dot(Vector2 with)
{
return x * with.x + y * with.y;
return (x * with.x) + (y * with.y);
}
/// <summary>
@ -296,7 +299,7 @@ namespace Godot
/// <returns>The length of this vector.</returns>
public real_t Length()
{
return Mathf.Sqrt(x * x + y * y);
return Mathf.Sqrt((x * x) + (y * y));
}
/// <summary>
@ -307,7 +310,7 @@ namespace Godot
/// <returns>The squared length of this vector.</returns>
public real_t LengthSquared()
{
return x * x + y * y;
return (x * x) + (y * y);
}
/// <summary>
@ -372,10 +375,13 @@ namespace Godot
/// <returns>The resulting vector.</returns>
public Vector2 MoveToward(Vector2 to, real_t delta)
{
var v = this;
var vd = to - v;
var len = vd.Length();
return len <= delta || len < Mathf.Epsilon ? to : v + vd / len * delta;
Vector2 v = this;
Vector2 vd = to - v;
real_t len = vd.Length();
if (len <= delta || len < Mathf.Epsilon)
return to;
return v + (vd / len * delta);
}
/// <summary>
@ -384,7 +390,7 @@ namespace Godot
/// <returns>A normalized version of the vector.</returns>
public Vector2 Normalized()
{
var v = this;
Vector2 v = this;
v.Normalize();
return v;
}
@ -454,7 +460,7 @@ namespace Godot
throw new ArgumentException("Argument is not normalized", nameof(normal));
}
#endif
return 2 * Dot(normal) * normal - this;
return (2 * Dot(normal) * normal) - this;
}
/// <summary>
@ -464,8 +470,11 @@ namespace Godot
/// <returns>The rotated vector.</returns>
public Vector2 Rotated(real_t phi)
{
real_t rads = Angle() + phi;
return new Vector2(Mathf.Cos(rads), Mathf.Sin(rads)) * Length();
real_t sine = Mathf.Sin(phi);
real_t cosi = Mathf.Cos(phi);
return new Vector2(
x * cosi - y * sine,
x * sine + y * cosi);
}
/// <summary>
@ -536,7 +545,7 @@ namespace Godot
/// <returns>The slid vector.</returns>
public Vector2 Slide(Vector2 normal)
{
return this - normal * Dot(normal);
return this - (normal * Dot(normal));
}
/// <summary>
@ -802,11 +811,7 @@ namespace Godot
/// <returns>A string representation of this vector.</returns>
public override string ToString()
{
return String.Format("({0}, {1})", new object[]
{
x.ToString(),
y.ToString()
});
return $"({x}, {y})";
}
/// <summary>
@ -815,11 +820,7 @@ namespace Godot
/// <returns>A string representation of this vector.</returns>
public string ToString(string format)
{
return String.Format("({0}, {1})", new object[]
{
x.ToString(format),
y.ToString(format)
});
return $"({x.ToString(format)}, {y.ToString(format)})";
}
}
}

View File

@ -39,10 +39,12 @@ namespace Godot
/// The vector's X component. Also accessible by using the index position <c>[0]</c>.
/// </summary>
public real_t x;
/// <summary>
/// The vector's Y component. Also accessible by using the index position <c>[1]</c>.
/// </summary>
public real_t y;
/// <summary>
/// The vector's Z component. Also accessible by using the index position <c>[2]</c>.
/// </summary>
@ -158,9 +160,9 @@ namespace Godot
{
return new Vector3
(
y * b.z - z * b.y,
z * b.x - x * b.z,
x * b.y - y * b.x
(y * b.z) - (z * b.y),
(z * b.x) - (x * b.z),
(x * b.y) - (y * b.x)
);
}
@ -185,10 +187,10 @@ namespace Godot
real_t t3 = t2 * t;
return 0.5f * (
p1 * 2.0f + (-p0 + p2) * t +
(2.0f * p0 - 5.0f * p1 + 4f * p2 - p3) * t2 +
(-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3
);
(p1 * 2.0f) + ((-p0 + p2) * t) +
(((2.0f * p0) - (5.0f * p1) + (4f * p2) - p3) * t2) +
((-p0 + (3.0f * p1) - (3.0f * p2) + p3) * t3)
);
}
/// <summary>
@ -231,7 +233,7 @@ namespace Godot
/// <returns>The dot product of the two vectors.</returns>
public real_t Dot(Vector3 b)
{
return x * b.x + y * b.y + z * b.z;
return (x * b.x) + (y * b.y) + (z * b.z);
}
/// <summary>
@ -352,10 +354,13 @@ namespace Godot
/// <returns>The resulting vector.</returns>
public Vector3 MoveToward(Vector3 to, real_t delta)
{
var v = this;
var vd = to - v;
var len = vd.Length();
return len <= delta || len < Mathf.Epsilon ? to : v + vd / len * delta;
Vector3 v = this;
Vector3 vd = to - v;
real_t len = vd.Length();
if (len <= delta || len < Mathf.Epsilon)
return to;
return v + (vd / len * delta);
}
/// <summary>
@ -364,7 +369,7 @@ namespace Godot
/// <returns>A normalized version of the vector.</returns>
public Vector3 Normalized()
{
var v = this;
Vector3 v = this;
v.Normalize();
return v;
}
@ -440,7 +445,7 @@ namespace Godot
throw new ArgumentException("Argument is not normalized", nameof(normal));
}
#endif
return 2.0f * Dot(normal) * normal - this;
return (2.0f * Dot(normal) * normal) - this;
}
/// <summary>
@ -550,7 +555,7 @@ namespace Godot
/// <returns>The slid vector.</returns>
public Vector3 Slide(Vector3 normal)
{
return this - normal * Dot(normal);
return this - (normal * Dot(normal));
}
/// <summary>
@ -872,12 +877,7 @@ namespace Godot
/// <returns>A string representation of this vector.</returns>
public override string ToString()
{
return String.Format("({0}, {1}, {2})", new object[]
{
x.ToString(),
y.ToString(),
z.ToString()
});
return $"({x}, {y}, {z})";
}
/// <summary>
@ -886,12 +886,7 @@ namespace Godot
/// <returns>A string representation of this vector.</returns>
public string ToString(string format)
{
return String.Format("({0}, {1}, {2})", new object[]
{
x.ToString(format),
y.ToString(format),
z.ToString(format)
});
return $"({x.ToString(format)}, {y.ToString(format)}, {z.ToString(format)})";
}
}
}