Skip to content

Commit

Permalink
feat: Add color picker button in layer explorer and use this color fo…
Browse files Browse the repository at this point in the history
…r selection
  • Loading branch information
piiertho committed Mar 22, 2024
1 parent 750ed12 commit e2924eb
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 7 deletions.
38 changes: 37 additions & 1 deletion src/editor/inspector/layers_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ LayersEditor::LayersEditor() : layer_line_edit(nullptr), layer_controls_containe
add_child(top_bar);
ScrollContainer* scroll_container {memnew(ScrollContainer)};
layer_controls_container = memnew(GridContainer);
layer_controls_container->set_columns(4);
layer_controls_container->set_columns(5);
layer_controls_container->set_h_size_flags(SizeFlags::SIZE_EXPAND_FILL);
scroll_container->add_child(layer_controls_container);
add_child(scroll_container);
Expand Down Expand Up @@ -55,10 +55,13 @@ void LayersEditor::refresh() {
is_visible_label->set_text("visible");
Label* layer_name_label {memnew(Label)};
layer_name_label->set_text("Layer name");
Label* color_label {memnew(Label)};
color_label->set_text("Color");
Label* remove_label {memnew(Label)};
remove_label->set_text("Remove");
layer_controls_container->add_child(is_current_layer_label);
layer_controls_container->add_child(layer_name_label);
layer_controls_container->add_child(color_label);
layer_controls_container->add_child(is_visible_label);
layer_controls_container->add_child(remove_label);

Expand All @@ -82,6 +85,15 @@ void LayersEditor::refresh() {
Label* current_layer_name_label {memnew(Label)};
current_layer_name_label->set_text(layer_name);
layer_controls_container->add_child(current_layer_name_label);
LayerColorPickerButton* color_picker_button {memnew(LayerColorPickerButton)};
color_picker_button->set_layer_id(layer_id);
color_picker_button->set_pick_color(
current_map->get_meta(
vformat(node::IsometricMap::LAYER_COLOR_META_NAME_FORMAT, layer_id),
Color()
)
);
layer_controls_container->add_child(color_picker_button);
LayerVisibleCheckBox* visible_check_box {memnew(LayerVisibleCheckBox)};
visible_check_box->set_layer_id(layer_id);
layer_controls_container->add_child(visible_check_box);
Expand Down Expand Up @@ -261,4 +273,28 @@ void CurrentLayerCheckBox::_bind_methods() {

}

///////////////////////////////// LayerColorPickerButton ////////////////////////////////////////////

void LayerColorPickerButton::set_layer_id(const uint32_t p_layer_id) {
layer_id = p_layer_id;
}

void LayerColorPickerButton::on_color_changed(const Color& color) { // NOLINT(*-make-member-function-const)
if (node::IsometricMap* map{IsometricEditorPlugin::get_instance()->get_selected_map()}) {
map->set_meta(vformat(node::IsometricMap::LAYER_COLOR_META_NAME_FORMAT, layer_id), color);
}
}

void LayerColorPickerButton::_notification(int notif) {
if (notif != NOTIFICATION_ENTER_TREE) {
return;
}

connect(SNAME("color_changed"), callable_mp(this, &LayerColorPickerButton::on_color_changed));
}

LayerColorPickerButton::LayerColorPickerButton() : layer_id(node::IsometricMap::NO_LAYER_ID) {}

void LayerColorPickerButton::_bind_methods() {}

#endif
19 changes: 19 additions & 0 deletions src/editor/inspector/layers_editor.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

#ifdef TOOLS_ENABLED
#include "node/isometric_map.h"
#include "scene/gui/color_picker.h"

#include <scene/gui/box_container.h>
#include <scene/gui/button.h>
#include <scene/gui/check_box.h>
Expand Down Expand Up @@ -85,6 +87,23 @@ namespace editor {
void _notification(int notif);
static void _bind_methods();
};

class LayerColorPickerButton : public ColorPickerButton {
GDCLASS(LayerColorPickerButton, ColorPickerButton)

public:
void set_layer_id(uint32_t p_layer_id);
void on_color_changed(const Color& color);

LayerColorPickerButton();

private:
uint32_t layer_id;

protected:
void _notification(int notif);
static void _bind_methods();
};
}
}

Expand Down
16 changes: 11 additions & 5 deletions src/editor/positionable_selector_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ PositionableSelectorManager& PositionableSelectorManager::get_instance() {

void PositionableSelectorManager::select_positionable_at(node::IsometricMap* map, node::IsometricPositionable* positionable) {
if (!map_to_selected_positions.has(map)) { map_to_selected_positions[map] = Vector<Vector3>(); }
show_outline(positionable);
show_outline(map, positionable);
map_to_selected_positions[map].push_back(positionable->get_local_position_3d());
}

Expand Down Expand Up @@ -47,7 +47,7 @@ void PositionableSelectorManager::set_selected_for_map(node::IsometricMap* map,
for (int i = 0; i < selected.size(); ++i) {
node::IsometricPositionable* positionable {map->get_positionable_at(selected[i])};
if (!positionable) { continue; }
show_outline(positionable);
show_outline(map, positionable);
}
}

Expand All @@ -59,14 +59,20 @@ void PositionableSelectorManager::refresh_outline_for_selected(node::IsometricMa
const Vector<Vector3>& selected {map_to_selected_positions[map]};
for (int i = 0; i < selected.size(); ++i) {
if (node::IsometricPositionable * positionable {map->get_positionable_at(selected[i])}) {
show_outline(positionable);
show_outline(map, positionable);
}
}
}

void PositionableSelectorManager::show_outline(node::IsometricPositionable* positionable) {
void PositionableSelectorManager::show_outline(node::IsometricMap* map, node::IsometricPositionable* positionable) {
OutlineData& outline_data {positionable->get_outline_data()};
outline_data.color = {1, 0, 0, 1};
outline_data.color = map->get_meta(
vformat(
node::IsometricMap::LAYER_COLOR_META_NAME_FORMAT,
map->get_layer_id_at(positionable->get_local_position_3d())
),
Color()
);
outline_data.line_size = 10;
editor::OutlineDrawer::draw_outline(positionable);
editor::OutlineDrawer::set_outline_visible(positionable, true);
Expand Down
2 changes: 1 addition & 1 deletion src/editor/positionable_selector_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ namespace editor {
private:
HashMap<node::IsometricMap*, Vector<Vector3>> map_to_selected_positions;

static void show_outline(node::IsometricPositionable* positionable);
static void show_outline(node::IsometricMap* map, node::IsometricPositionable* positionable);

PositionableSelectorManager();
~PositionableSelectorManager() = default;
Expand Down
1 change: 1 addition & 0 deletions src/node/isometric_map.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ namespace node {

#ifdef TOOLS_ENABLED
static constexpr const char* LAST_EDITED_LAYER_META_NAME = "_LAST_EDITED_LAYER";
static constexpr const char* LAYER_COLOR_META_NAME_FORMAT = "_LAYER_%s_COLOR";
#endif

private:
Expand Down

0 comments on commit e2924eb

Please # to comment.