Sfoglia il codice sorgente

-Fixed changes to default input actions not working, closes #10502
-Added Array.duplicate() method, needed to fix above

Juan Linietsky 8 anni fa
parent
commit
c771e03ee2
4 ha cambiato i file con 19 aggiunte e 4 eliminazioni
  1. 11 0
      core/array.cpp
  2. 2 0
      core/array.h
  3. 2 0
      core/variant_call.cpp
  4. 4 4
      editor/project_settings_editor.cpp

+ 11 - 0
core/array.cpp

@@ -210,6 +210,17 @@ const Variant &Array::get(int p_idx) const {
 	return operator[](p_idx);
 }
 
+Array Array::duplicate() const {
+
+	Array new_arr;
+	int element_count = size();
+	new_arr.resize(element_count);
+	for (int i = 0; i < element_count; i++) {
+		new_arr[i] = get(i);
+	}
+
+	return new_arr;
+}
 struct _ArrayVariantSort {
 
 	_FORCE_INLINE_ bool operator()(const Variant &p_l, const Variant &p_r) const {

+ 2 - 0
core/array.h

@@ -84,6 +84,8 @@ public:
 	Variant pop_back();
 	Variant pop_front();
 
+	Array duplicate() const;
+
 	Array(const Array &p_from);
 	Array();
 	~Array();

+ 2 - 0
core/variant_call.cpp

@@ -481,6 +481,7 @@ struct _VariantCall {
 	VCALL_LOCALMEM1(Array, erase);
 	VCALL_LOCALMEM0(Array, sort);
 	VCALL_LOCALMEM2(Array, sort_custom);
+	VCALL_LOCALMEM0R(Array, duplicate);
 	VCALL_LOCALMEM0(Array, invert);
 
 	static void _call_PoolByteArray_get_string_from_ascii(Variant &r_ret, Variant &p_self, const Variant **p_args) {
@@ -1575,6 +1576,7 @@ void register_variant_methods() {
 	ADDFUNC0(ARRAY, NIL, Array, sort, varray());
 	ADDFUNC2(ARRAY, NIL, Array, sort_custom, OBJECT, "obj", STRING, "func", varray());
 	ADDFUNC0(ARRAY, NIL, Array, invert, varray());
+	ADDFUNC0(ARRAY, ARRAY, Array, duplicate, varray());
 
 	ADDFUNC0(POOL_BYTE_ARRAY, INT, PoolByteArray, size, varray());
 	ADDFUNC2(POOL_BYTE_ARRAY, NIL, PoolByteArray, set, INT, "idx", INT, "byte", varray());

+ 4 - 4
editor/project_settings_editor.cpp

@@ -182,8 +182,8 @@ void ProjectSettingsEditor::_device_input_add() {
 	Ref<InputEvent> ie;
 	String name = add_at;
 	int idx = edit_idx;
-	Variant old_val = ProjectSettings::get_singleton()->get(name);
-	Array arr = old_val;
+	Array old_val = ProjectSettings::get_singleton()->get(name);
+	Array arr = old_val.duplicate();
 
 	switch (add_type) {
 
@@ -285,8 +285,8 @@ void ProjectSettingsEditor::_press_a_key_confirm() {
 	String name = add_at;
 	int idx = edit_idx;
 
-	Variant old_val = ProjectSettings::get_singleton()->get(name);
-	Array arr = old_val;
+	Array old_val = ProjectSettings::get_singleton()->get(name);
+	Array arr = old_val.duplicate();
 
 	for (int i = 0; i < arr.size(); i++) {