Skip to content

Commit

Permalink
Provide property hints for property hints in VariantResource
Browse files Browse the repository at this point in the history
Yes, you read it right. :)
  • Loading branch information
Xrayez committed Oct 31, 2020
1 parent f0966ce commit cabbed5
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 3 deletions.
133 changes: 132 additions & 1 deletion core/types/variant_resource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,137 @@ String VariantResource::get_type_hints() {
return type_hints;
}

String VariantResource::get_property_hint_name(const PropertyHint &p_hint) {
switch (p_hint) {
case PROPERTY_HINT_NONE: {
return "None";
} break;
case PROPERTY_HINT_RANGE: {
return "Range";
} break;
case PROPERTY_HINT_EXP_RANGE: {
return "Exponential Range";
} break;
case PROPERTY_HINT_ENUM: {
return "Enum";
} break;
case PROPERTY_HINT_EXP_EASING: {
return "Exponential Easing";
} break;
case PROPERTY_HINT_LENGTH: {
return "Length";
} break;
case PROPERTY_HINT_SPRITE_FRAME: {
return "SpriteFrame";
} break;
case PROPERTY_HINT_KEY_ACCEL: {
return "Key Accel";
} break;
case PROPERTY_HINT_FLAGS: {
return "Flags";
} break;
case PROPERTY_HINT_LAYERS_2D_RENDER: {
return "Layers 2D Render";
} break;
case PROPERTY_HINT_LAYERS_2D_PHYSICS: {
return "Layers 2D Physics";
} break;
case PROPERTY_HINT_LAYERS_3D_RENDER: {
return "Layers 3D Render";
} break;
case PROPERTY_HINT_LAYERS_3D_PHYSICS: {
return "Layers 3D Physics";
} break;
case PROPERTY_HINT_FILE: {
return "File";
} break;
case PROPERTY_HINT_DIR: {
return "Directory";
} break;
case PROPERTY_HINT_GLOBAL_FILE: {
return "Global File";
} break;
case PROPERTY_HINT_GLOBAL_DIR: {
return "Global Directory";
} break;
case PROPERTY_HINT_RESOURCE_TYPE: {
return "Resource Type";
} break;
case PROPERTY_HINT_MULTILINE_TEXT: {
return "Multiline Text";
} break;
case PROPERTY_HINT_PLACEHOLDER_TEXT: {
return "Placeholder Text";
} break;
case PROPERTY_HINT_COLOR_NO_ALPHA: {
return "Color No Alpha";
} break;
case PROPERTY_HINT_IMAGE_COMPRESS_LOSSY: {
return "Image Compress Lossy";
} break;
case PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS: {
return "Image Compress Lossless";
} break;
case PROPERTY_HINT_OBJECT_ID: {
return "ObjectID";
} break;
case PROPERTY_HINT_TYPE_STRING: {
return "String";
} break;
case PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE: {
return "NodePath To Edited Node";
} break;
case PROPERTY_HINT_METHOD_OF_VARIANT_TYPE: {
return "Method Of Variant Type";
} break;
case PROPERTY_HINT_METHOD_OF_BASE_TYPE: {
return "Method Of Base Type";
} break;
case PROPERTY_HINT_METHOD_OF_INSTANCE: {
return "Method Of Instance";
} break;
case PROPERTY_HINT_METHOD_OF_SCRIPT: {
return "Method Of Script";
} break;
case PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE: {
return "Property Of Variant Type";
} break;
case PROPERTY_HINT_PROPERTY_OF_BASE_TYPE: {
return "Property Of Base Type";
} break;
case PROPERTY_HINT_PROPERTY_OF_INSTANCE: {
return "Property Of Instance";
} break;
case PROPERTY_HINT_PROPERTY_OF_SCRIPT: {
return "Property Of Script";
} break;
case PROPERTY_HINT_OBJECT_TOO_BIG: {
return "Object Too Big";
} break;
case PROPERTY_HINT_NODE_PATH_VALID_TYPES: {
return "NodePath Valid Types";
} break;
case PROPERTY_HINT_SAVE_FILE: {
return "Save File";
} break;
case PROPERTY_HINT_MAX: {
ERR_FAIL_V_MSG("", "Invalid property hint type.");
} break;
}
return "";
}

String VariantResource::get_property_hint_types() {
String hint_types;
for (int i = 0; i < PropertyHint::PROPERTY_HINT_MAX; ++i) {
hint_types += VariantResource::get_property_hint_name(PropertyHint(i));
if (i < PropertyHint::PROPERTY_HINT_MAX - 1) {
hint_types += ",";
}
}
return hint_types;
}

void VariantResource::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_type", "type"), &VariantResource::set_type);
ClassDB::bind_method(D_METHOD("get_type"), &VariantResource::get_type);
Expand All @@ -103,7 +234,7 @@ void VariantResource::_bind_methods() {

ADD_GROUP("Property", "property_");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "property_name"), "set_property_name", "get_property_name");
ADD_PROPERTY(PropertyInfo(Variant::INT, "property_hint"), "set_property_hint", "get_property_hint");
ADD_PROPERTY(PropertyInfo(Variant::INT, "property_hint", PROPERTY_HINT_ENUM, get_property_hint_types()), "set_property_hint", "get_property_hint");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "property_hint_string"), "set_property_hint_string", "get_property_hint_string");
ADD_PROPERTY(PropertyInfo(Variant::INT, "property_usage"), "set_property_usage", "get_property_usage");
}
7 changes: 5 additions & 2 deletions core/types/variant_resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,9 @@ class VariantResource : public Resource {
void _get_property_list(List<PropertyInfo> *p_list) const;
static void _bind_methods();

private:
Variant value;
Variant::Type type = Variant::NIL;
PropertyInfo pi;
Variant value;

public:
void set_type(Variant::Type p_type);
Expand All @@ -36,7 +35,11 @@ class VariantResource : public Resource {

static Variant create(const Variant::Type &p_type);
static Variant convert(const Variant &p_value, const Variant::Type &p_to_type);

static String get_type_hints();
// This should be in Godot, just like `Variant::get_type_name()` method.
static String get_property_hint_name(const PropertyHint &p_hint);
static String get_property_hint_types();

virtual String to_string() { return String(value); }

Expand Down

0 comments on commit cabbed5

Please sign in to comment.