Browse Source

Add a method to get global modulate

kobewi 2 years ago
parent
commit
32b0770a73
3 changed files with 12 additions and 1 deletions
  1. 1 1
      editor/plugins/tiles/tile_map_editor.cpp
  2. 10 0
      scene/main/canvas_item.cpp
  3. 1 0
      scene/main/canvas_item.h

+ 1 - 1
editor/plugins/tiles/tile_map_editor.cpp

@@ -922,7 +922,7 @@ void TileMapEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p_over
 
 							// Get the tile modulation.
 							Color modulate = tile_data->get_modulate();
-							Color self_modulate = tile_map->get_self_modulate();
+							Color self_modulate = tile_map->get_modulate_in_tree() * tile_map->get_self_modulate();
 							modulate *= self_modulate;
 
 							// Draw the tile.

+ 10 - 0
scene/main/canvas_item.cpp

@@ -388,6 +388,16 @@ Color CanvasItem::get_modulate() const {
 	return modulate;
 }
 
+Color CanvasItem::get_modulate_in_tree() const {
+	Color final_modulate = modulate;
+	CanvasItem *parent_item = get_parent_item();
+	while (parent_item) {
+		final_modulate *= parent_item->get_modulate();
+		parent_item = parent_item->get_parent_item();
+	}
+	return final_modulate;
+}
+
 void CanvasItem::set_as_top_level(bool p_top_level) {
 	if (top_level == p_top_level) {
 		return;

+ 1 - 0
scene/main/canvas_item.h

@@ -224,6 +224,7 @@ public:
 
 	void set_modulate(const Color &p_modulate);
 	Color get_modulate() const;
+	Color get_modulate_in_tree() const;
 
 	void set_self_modulate(const Color &p_self_modulate);
 	Color get_self_modulate() const;