示例#1
0
Object *ClassDB::instance(const StringName &p_class) {

	ClassInfo *ti;
	{
		OBJTYPE_RLOCK;
		ti = classes.getptr(p_class);
		if (!ti || ti->disabled || !ti->creation_func) {
			if (compat_classes.has(p_class)) {
				ti = classes.getptr(compat_classes[p_class]);
			}
		}
		ERR_FAIL_COND_V(!ti, NULL);
		ERR_FAIL_COND_V(ti->disabled, NULL);
		ERR_FAIL_COND_V(!ti->creation_func, NULL);
	}

	return ti->creation_func();
}
示例#2
0
Object *ClassDB::instance(const StringName &p_class) {

	ClassInfo *ti;
	{
		OBJTYPE_RLOCK;
		ti = classes.getptr(p_class);
		if (!ti || ti->disabled || !ti->creation_func) {
			if (compat_classes.has(p_class)) {
				ti = classes.getptr(compat_classes[p_class]);
			}
		}
		ERR_FAIL_COND_V(!ti, NULL);
		ERR_FAIL_COND_V(ti->disabled, NULL);
		ERR_FAIL_COND_V(!ti->creation_func, NULL);
	}
#ifdef TOOLS_ENABLED
	if (ti->api == API_EDITOR && !Engine::get_singleton()->is_editor_hint()) {
		ERR_PRINTS("Class '" + String(p_class) + "' can only be instantiated by editor.");
		return NULL;
	}
#endif
	return ti->creation_func();
}