MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / set

Method set

modules/gdscript/gdscript.cpp:1690–1761  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1688//////////////////////////////
1689
1690bool GDScriptInstance::set(const StringName &p_name, const Variant &p_value) {
1691 {
1692 HashMap<StringName, GDScript::MemberInfo>::Iterator E = script->member_indices.find(p_name);
1693 if (E) {
1694 const GDScript::MemberInfo *member = &E->value;
1695 Variant value = p_value;
1696 if (member->data_type.has_type && !member->data_type.is_type(value)) {
1697 const Variant *args = &p_value;
1698 Callable::CallError err;
1699 Variant::construct(member->data_type.builtin_type, value, &args, 1, err);
1700 if (err.error != Callable::CallError::CALL_OK || !member->data_type.is_type(value)) {
1701 return false;
1702 }
1703 }
1704 if (likely(script->valid) && member->setter) {
1705 const Variant *args = &value;
1706 Callable::CallError err;
1707 callp(member->setter, &args, 1, err);
1708 return err.error == Callable::CallError::CALL_OK;
1709 } else {
1710 members.write[member->index] = value;
1711 return true;
1712 }
1713 }
1714 }
1715
1716 GDScript *sptr = script.ptr();
1717 while (sptr) {
1718 {
1719 HashMap<StringName, GDScript::MemberInfo>::ConstIterator E = sptr->static_variables_indices.find(p_name);
1720 if (E) {
1721 const GDScript::MemberInfo *member = &E->value;
1722 Variant value = p_value;
1723 if (member->data_type.has_type && !member->data_type.is_type(value)) {
1724 const Variant *args = &p_value;
1725 Callable::CallError err;
1726 Variant::construct(member->data_type.builtin_type, value, &args, 1, err);
1727 if (err.error != Callable::CallError::CALL_OK || !member->data_type.is_type(value)) {
1728 return false;
1729 }
1730 }
1731 if (likely(sptr->valid) && member->setter) {
1732 const Variant *args = &value;
1733 Callable::CallError err;
1734 callp(member->setter, &args, 1, err);
1735 return err.error == Callable::CallError::CALL_OK;
1736 } else {
1737 sptr->static_variables.write[member->index] = value;
1738 return true;
1739 }
1740 }
1741 }
1742
1743 if (likely(sptr->valid)) {
1744 HashMap<StringName, GDScriptFunction *>::Iterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._set);
1745 if (E) {
1746 Variant name = p_name;
1747 const Variant *args[2] = { &name, &p_value };

Callers 15

set_monitoring_feedsMethod · 0.45
~CameraLinuxMethod · 0.45
_read_frameMethod · 0.45
deactivate_feedMethod · 0.45
get_filesMethod · 0.45
_editor_initFunction · 0.45
queryMethod · 0.45
get_facesMethod · 0.45
set_deviceMethod · 0.45

Calls 6

callpFunction · 0.85
is_typeMethod · 0.80
findMethod · 0.45
ptrMethod · 0.45
callMethod · 0.45
get_typeMethod · 0.45

Tested by

no test coverage detected