Fix ReferenceRect node

ReferenceRect node by default was only displaying in the editor and not when the game is running.
This commit is contained in:
Zak 2019-06-25 12:00:32 +03:00
parent 25022a1d89
commit d29b1b7917
3 changed files with 28 additions and 6 deletions

View file

@ -4,7 +4,7 @@
Reference frame for GUI. Reference frame for GUI.
</brief_description> </brief_description>
<description> <description>
Reference frame for GUI. It's just like an empty control, except an outline border [member border_color] is displayed while editing around its size at all times. A rectangle box that displays only a [member border_color] border color around its rectangle. [ReferenceRect] has no fill [Color].
</description> </description>
<tutorials> <tutorials>
</tutorials> </tutorials>
@ -12,7 +12,10 @@
</methods> </methods>
<members> <members>
<member name="border_color" type="Color" setter="set_border_color" getter="get_border_color"> <member name="border_color" type="Color" setter="set_border_color" getter="get_border_color">
Determines the border [Color] of the [ReferenceRect]. Sets the border [Color] of the [ReferenceRect].
</member>
<member name="editor_only" type="bool" setter="set_editor_only" getter="get_editor_only">
If set to [code]true[/code], the [ReferenceRect] will only be visible while in editor. Otherwise, [ReferenceRect] will be visible in game.
</member> </member>
</members> </members>
<constants> <constants>

View file

@ -38,26 +38,41 @@ void ReferenceRect::_notification(int p_what) {
if (!is_inside_tree()) if (!is_inside_tree())
return; return;
if (Engine::get_singleton()->is_editor_hint()) if (Engine::get_singleton()->is_editor_hint() || !editor_only)
draw_rect(Rect2(Point2(), get_size()), border_color, false); draw_rect(Rect2(Point2(), get_size()), border_color, false);
} }
} }
void ReferenceRect::set_border_color(const Color &color) { void ReferenceRect::set_border_color(const Color &p_color) {
border_color = color; border_color = p_color;
update();
} }
Color ReferenceRect::get_border_color() const { Color ReferenceRect::get_border_color() const {
return border_color; return border_color;
} }
void ReferenceRect::set_editor_only(const bool &p_enabled) {
editor_only = p_enabled;
update();
}
bool ReferenceRect::get_editor_only() const {
return editor_only;
}
void ReferenceRect::_bind_methods() { void ReferenceRect::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_border_color"), &ReferenceRect::get_border_color); ClassDB::bind_method(D_METHOD("get_border_color"), &ReferenceRect::get_border_color);
ClassDB::bind_method(D_METHOD("set_border_color", "color"), &ReferenceRect::set_border_color); ClassDB::bind_method(D_METHOD("set_border_color", "color"), &ReferenceRect::set_border_color);
ClassDB::bind_method(D_METHOD("get_editor_only"), &ReferenceRect::get_editor_only);
ClassDB::bind_method(D_METHOD("set_editor_only", "enabled"), &ReferenceRect::set_editor_only);
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "border_color"), "set_border_color", "get_border_color"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "border_color"), "set_border_color", "get_border_color");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editor_only"), "set_editor_only", "get_editor_only");
} }
ReferenceRect::ReferenceRect() { ReferenceRect::ReferenceRect() {
border_color = Color(1, 0, 0); border_color = Color(1, 0, 0);
editor_only = true;
} }

View file

@ -37,6 +37,7 @@ class ReferenceRect : public Control {
GDCLASS(ReferenceRect, Control); GDCLASS(ReferenceRect, Control);
Color border_color; Color border_color;
bool editor_only;
protected: protected:
void _notification(int p_what); void _notification(int p_what);
@ -45,8 +46,11 @@ protected:
public: public:
ReferenceRect(); ReferenceRect();
void set_border_color(const Color &color); void set_border_color(const Color &p_color);
Color get_border_color() const; Color get_border_color() const;
void set_editor_only(const bool &p_enabled);
bool get_editor_only() const;
}; };
#endif // REFERENCE_RECT_H #endif // REFERENCE_RECT_H