Add is_instance_valid() method to GDScript, ending more than a decade of pain.
This commit is contained in:
parent
80b9edf0f6
commit
ff1e7cfbf4
4 changed files with 18 additions and 10 deletions
|
@ -1919,9 +1919,7 @@ ObjectID ObjectDB::add_instance(Object *p_object) {
|
|||
|
||||
rw_lock->write_lock();
|
||||
instances[++instance_counter] = p_object;
|
||||
#ifdef DEBUG_ENABLED
|
||||
instance_checks[p_object] = instance_counter;
|
||||
#endif
|
||||
rw_lock->write_unlock();
|
||||
|
||||
return instance_counter;
|
||||
|
@ -1932,9 +1930,7 @@ void ObjectDB::remove_instance(Object *p_object) {
|
|||
rw_lock->write_lock();
|
||||
|
||||
instances.erase(p_object->get_instance_id());
|
||||
#ifdef DEBUG_ENABLED
|
||||
instance_checks.erase(p_object);
|
||||
#endif
|
||||
|
||||
rw_lock->write_unlock();
|
||||
}
|
||||
|
|
|
@ -762,15 +762,10 @@ public:
|
|||
static void debug_objects(DebugFunc p_func);
|
||||
static int get_object_count();
|
||||
|
||||
#ifdef DEBUG_ENABLED
|
||||
_FORCE_INLINE_ static bool instance_validate(Object *p_ptr) {
|
||||
|
||||
return instance_checks.has(p_ptr);
|
||||
}
|
||||
#else
|
||||
_FORCE_INLINE_ static bool instance_validate(Object *p_ptr) { return true; }
|
||||
|
||||
#endif
|
||||
};
|
||||
|
||||
//needed by macros
|
||||
|
|
|
@ -122,6 +122,7 @@ const char *GDScriptFunctions::get_func_name(Function p_func) {
|
|||
"print_stack",
|
||||
"instance_from_id",
|
||||
"len",
|
||||
"is_instance_valid",
|
||||
};
|
||||
|
||||
return _names[p_func];
|
||||
|
@ -1276,6 +1277,17 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_
|
|||
}
|
||||
}
|
||||
|
||||
} break;
|
||||
case IS_INSTANCE_VALID: {
|
||||
|
||||
VALIDATE_ARG_COUNT(1);
|
||||
if (p_args[0]->get_type() != Variant::OBJECT) {
|
||||
r_ret = false;
|
||||
} else {
|
||||
Object *obj = *p_args[0];
|
||||
r_ret = ObjectDB::instance_validate(obj);
|
||||
}
|
||||
|
||||
} break;
|
||||
case FUNC_MAX: {
|
||||
|
||||
|
@ -1798,7 +1810,11 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
mi.return_val.type = Variant::INT;
|
||||
return mi;
|
||||
} break;
|
||||
|
||||
case IS_INSTANCE_VALID: {
|
||||
MethodInfo mi("is_instance_valid", PropertyInfo(Variant::OBJECT, "instance"));
|
||||
mi.return_val.type = Variant::BOOL;
|
||||
return mi;
|
||||
} break;
|
||||
case FUNC_MAX: {
|
||||
|
||||
ERR_FAIL_V(MethodInfo());
|
||||
|
|
|
@ -113,6 +113,7 @@ public:
|
|||
PRINT_STACK,
|
||||
INSTANCE_FROM_ID,
|
||||
LEN,
|
||||
IS_INSTANCE_VALID,
|
||||
FUNC_MAX
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue