Remove multilevel calls
In general they are more confusing to users because they expect inheritance to fully override parent methods. This behavior can be enabled by script writers using a simple super() call.
This commit is contained in:
parent
b7dc08fcf6
commit
2b9d9bc364
17 changed files with 19 additions and 264 deletions
|
|
@ -1309,39 +1309,6 @@ Variant GDScriptInstance::call(const StringName &p_method, const Variant **p_arg
|
|||
return Variant();
|
||||
}
|
||||
|
||||
void GDScriptInstance::call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount) {
|
||||
GDScript *sptr = script.ptr();
|
||||
Callable::CallError ce;
|
||||
|
||||
while (sptr) {
|
||||
Map<StringName, GDScriptFunction *>::Element *E = sptr->member_functions.find(p_method);
|
||||
if (E) {
|
||||
E->get()->call(this, p_args, p_argcount, ce);
|
||||
return;
|
||||
}
|
||||
sptr = sptr->_base;
|
||||
}
|
||||
}
|
||||
|
||||
void GDScriptInstance::_ml_call_reversed(GDScript *sptr, const StringName &p_method, const Variant **p_args, int p_argcount) {
|
||||
if (sptr->_base) {
|
||||
_ml_call_reversed(sptr->_base, p_method, p_args, p_argcount);
|
||||
}
|
||||
|
||||
Callable::CallError ce;
|
||||
|
||||
Map<StringName, GDScriptFunction *>::Element *E = sptr->member_functions.find(p_method);
|
||||
if (E) {
|
||||
E->get()->call(this, p_args, p_argcount, ce);
|
||||
}
|
||||
}
|
||||
|
||||
void GDScriptInstance::call_multilevel_reversed(const StringName &p_method, const Variant **p_args, int p_argcount) {
|
||||
if (script.ptr()) {
|
||||
_ml_call_reversed(script.ptr(), p_method, p_args, p_argcount);
|
||||
}
|
||||
}
|
||||
|
||||
void GDScriptInstance::notification(int p_notification) {
|
||||
//notification is not virtual, it gets called at ALL levels just like in C.
|
||||
Variant value = p_notification;
|
||||
|
|
|
|||
|
|
@ -146,7 +146,6 @@ protected:
|
|||
void _get_property_list(List<PropertyInfo> *p_properties) const;
|
||||
|
||||
Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) override;
|
||||
//void call_multilevel(const StringName& p_method,const Variant** p_args,int p_argcount);
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
|
|
@ -258,8 +257,6 @@ class GDScriptInstance : public ScriptInstance {
|
|||
|
||||
SelfList<GDScriptFunctionState>::List pending_func_states;
|
||||
|
||||
void _ml_call_reversed(GDScript *sptr, const StringName &p_method, const Variant **p_args, int p_argcount);
|
||||
|
||||
public:
|
||||
virtual Object *get_owner() { return owner; }
|
||||
|
||||
|
|
@ -271,8 +268,6 @@ public:
|
|||
virtual void get_method_list(List<MethodInfo> *p_list) const;
|
||||
virtual bool has_method(const StringName &p_method) const;
|
||||
virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error);
|
||||
virtual void call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount);
|
||||
virtual void call_multilevel_reversed(const StringName &p_method, const Variant **p_args, int p_argcount);
|
||||
|
||||
Variant debug_get_member_by_index(int p_idx) const { return members[p_idx]; }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue