mirror of
https://github.com/godotengine/godot.git
synced 2025-10-20 08:23:29 +00:00
Support explicit values in flag properties, add C# flags support
- Add support for explicit values in properties using `PROPERTY_HINT_FLAGS` that works the same way it does for enums. - Fix enums and flags in VisualScriptEditor (it wasn't considering the explicit value). - Use `PROPERTY_HINT_FLAGS` for C# enums with the FlagsAttribute instead of `PROPERTY_HINT_ENUM`.
This commit is contained in:
parent
1baee2189c
commit
329818f20b
10 changed files with 101 additions and 36 deletions
|
@ -889,7 +889,49 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
|
|||
EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res, this, "_button_resource_previewed", arr);
|
||||
|
||||
} else if (pi.type == Variant::INT && pi.hint == PROPERTY_HINT_ENUM) {
|
||||
button->set_text(pi.hint_string.get_slice(",", value));
|
||||
bool found = false;
|
||||
const Vector<String> options = pi.hint_string.split(",");
|
||||
int64_t current_val = 0;
|
||||
for (const String &option : options) {
|
||||
Vector<String> text_split = option.split(":");
|
||||
if (text_split.size() != 1) {
|
||||
current_val = text_split[1].to_int();
|
||||
}
|
||||
if (value.operator int() == current_val) {
|
||||
button->set_text(text_split[0]);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
current_val += 1;
|
||||
}
|
||||
if (!found) {
|
||||
button->set_text(value);
|
||||
}
|
||||
} else if (pi.type == Variant::INT && pi.hint == PROPERTY_HINT_FLAGS) {
|
||||
Vector<String> value_texts;
|
||||
const Vector<String> options = pi.hint_string.split(",");
|
||||
uint32_t v = value;
|
||||
for (const String &option : options) {
|
||||
uint32_t current_val;
|
||||
Vector<String> text_split = option.split(":");
|
||||
if (text_split.size() != -1) {
|
||||
current_val = text_split[1].to_int();
|
||||
} else {
|
||||
current_val = 1 << i;
|
||||
}
|
||||
if ((v & current_val) == current_val) {
|
||||
value_texts.push_back(text_split[0]);
|
||||
}
|
||||
}
|
||||
if (value_texts.size() != 0) {
|
||||
String value_text = value_texts[0];
|
||||
for (const String &text : value_texts) {
|
||||
value_text += " | " + text;
|
||||
}
|
||||
button->set_text(value_text);
|
||||
} else {
|
||||
button->set_text(value);
|
||||
}
|
||||
} else {
|
||||
button->set_text(value);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue