1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-05 12:10:55 +00:00

C#: Lookup signals and methods in Get method

Allows to retrieve `Callable`s and `Signal`s using `Get` like it works in GDScript.
This commit is contained in:
Raul Santos
2023-01-13 20:59:02 +01:00
parent 3c9bf4bc21
commit a6ba914f15
3 changed files with 90 additions and 0 deletions

View File

@@ -272,6 +272,25 @@ namespace Godot.SourceGenerators
source.Append(" }\n");
}
// Generate HasGodotClassSignal
if (godotSignalDelegates.Count > 0)
{
source.Append(
" protected override bool HasGodotClassSignal(in godot_string_name signal)\n {\n");
bool isFirstEntry = true;
foreach (var signal in godotSignalDelegates)
{
GenerateHasSignalEntry(signal.Name, source, isFirstEntry);
isFirstEntry = false;
}
source.Append(" return base.HasGodotClassSignal(signal);\n");
source.Append(" }\n");
}
source.Append("}\n"); // partial class
if (isInnerClass)
@@ -397,6 +416,20 @@ namespace Godot.SourceGenerators
PropertyHint.None, string.Empty, propUsage, exported: false);
}
private static void GenerateHasSignalEntry(
string signalName,
StringBuilder source,
bool isFirstEntry
)
{
source.Append(" ");
if (!isFirstEntry)
source.Append("else ");
source.Append("if (signal == SignalName.");
source.Append(signalName);
source.Append(") {\n return true;\n }\n");
}
private static void GenerateSignalEventInvoker(
GodotSignalDelegateData signal,
StringBuilder source