|
@@ -1596,14 +1596,7 @@ void CSharpInstance::get_method_list(List<MethodInfo> *p_list) const {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- const CSharpScript *top = script.ptr();
|
|
|
- while (top != nullptr) {
|
|
|
- for (const CSharpScript::CSharpMethodInfo &E : top->methods) {
|
|
|
- p_list->push_back(E.method_info);
|
|
|
- }
|
|
|
-
|
|
|
- top = top->base_script.ptr();
|
|
|
- }
|
|
|
+ script->get_script_method_list(p_list);
|
|
|
}
|
|
|
|
|
|
bool CSharpInstance::has_method(const StringName &p_method) const {
|
|
@@ -1771,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();
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2624,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);
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-Vector<CSharpScript::EventSignalInfo> CSharpScript::get_script_event_signals() const {
|
|
|
- if (!valid) {
|
|
|
- return Vector<EventSignalInfo>();
|
|
|
+ if (!p_include_base) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (base_script.is_valid()) {
|
|
|
+ base_script->get_script_signal_list(r_signals);
|
|
|
}
|
|
|
+}
|
|
|
|
|
|
- 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 {
|