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

CSharpScript should not own base script signals

This commit is contained in:
Paul Joannon
2024-05-09 13:46:25 +02:00
parent c313312ff5
commit 1d7085571e
3 changed files with 34 additions and 27 deletions

View File

@@ -1764,16 +1764,19 @@ void CSharpInstance::mono_object_disposed_baseref(GCHandleIntPtr p_gchandle_to_f
}
void CSharpInstance::connect_event_signals() {
// The script signals list includes the signals declared in base scripts.
for (CSharpScript::EventSignalInfo &signal : script->get_script_event_signals()) {
String signal_name = signal.name;
const CSharpScript *top = script.ptr();
while (top != nullptr && top->valid) {
for (const CSharpScript::EventSignalInfo &signal : top->event_signals) {
String signal_name = signal.name;
// TODO: Use pooling for ManagedCallable instances.
EventSignalCallable *event_signal_callable = memnew(EventSignalCallable(owner, signal_name));
// TODO: Use pooling for ManagedCallable instances.
EventSignalCallable *event_signal_callable = memnew(EventSignalCallable(owner, signal_name));
Callable callable(event_signal_callable);
connected_event_signals.push_back(callable);
owner->connect(signal_name, callable);
Callable callable(event_signal_callable);
connected_event_signals.push_back(callable);
owner->connect(signal_name, callable);
}
top = top->base_script.ptr();
}
}
@@ -2617,25 +2620,33 @@ bool CSharpScript::has_script_signal(const StringName &p_signal) const {
}
}
if (base_script.is_valid()) {
return base_script->has_script_signal(p_signal);
}
return false;
}
void CSharpScript::get_script_signal_list(List<MethodInfo> *r_signals) const {
void CSharpScript::_get_script_signal_list(List<MethodInfo> *r_signals, bool p_include_base) const {
if (!valid) {
return;
}
for (const EventSignalInfo &signal : get_script_event_signals()) {
for (const EventSignalInfo &signal : event_signals) {
r_signals->push_back(signal.method_info);
}
if (!p_include_base) {
return;
}
if (base_script.is_valid()) {
base_script->get_script_signal_list(r_signals);
}
}
Vector<CSharpScript::EventSignalInfo> CSharpScript::get_script_event_signals() const {
if (!valid) {
return Vector<EventSignalInfo>();
}
return event_signals;
void CSharpScript::get_script_signal_list(List<MethodInfo> *r_signals) const {
_get_script_signal_list(r_signals, true);
}
bool CSharpScript::inherits_script(const Ref<Script> &p_script) const {