From 943bec398f74fa8d08a88e12813863d9d013b113 Mon Sep 17 00:00:00 2001 From: kleonc <9283098+kleonc@users.noreply.github.com> Date: Thu, 27 Mar 2025 03:08:37 +0100 Subject: [PATCH] Fix applying TileMapLayer.self_modulate to tiles --- scene/2d/tile_map_layer.cpp | 7 ++++--- scene/2d/tile_map_layer.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/scene/2d/tile_map_layer.cpp b/scene/2d/tile_map_layer.cpp index 6872910b13..8030269ea2 100644 --- a/scene/2d/tile_map_layer.cpp +++ b/scene/2d/tile_map_layer.cpp @@ -301,6 +301,7 @@ void TileMapLayer::_rendering_update(bool p_force_cleanup) { rs->canvas_item_set_light_mask(ci, get_light_mask()); rs->canvas_item_set_z_as_relative_to_parent(ci, true); rs->canvas_item_set_z_index(ci, tile_z_index); + rs->canvas_item_set_self_modulate(ci, get_self_modulate()); rs->canvas_item_set_default_texture_filter(ci, RS::CanvasItemTextureFilter(get_texture_filter_in_tree())); rs->canvas_item_set_default_texture_repeat(ci, RS::CanvasItemTextureRepeat(get_texture_repeat_in_tree())); @@ -328,7 +329,7 @@ void TileMapLayer::_rendering_update(bool p_force_cleanup) { } // Drawing the tile in the canvas item. - draw_tile(ci, local_tile_pos - rendering_quadrant->canvas_items_position, tile_set, cell_data.cell.source_id, cell_data.cell.get_atlas_coords(), cell_data.cell.alternative_tile, -1, get_self_modulate(), tile_data, random_animation_offset); + draw_tile(ci, local_tile_pos - rendering_quadrant->canvas_items_position, tile_set, cell_data.cell.source_id, cell_data.cell.get_atlas_coords(), cell_data.cell.alternative_tile, -1, tile_data, random_animation_offset); } // Reset physics interpolation for any recreated canvas items. @@ -2458,7 +2459,7 @@ TileMapCell TileMapLayer::get_cell(const Vector2i &p_coords) const { } } -void TileMapLayer::draw_tile(RID p_canvas_item, const Vector2 &p_position, const Ref p_tile_set, int p_atlas_source_id, const Vector2i &p_atlas_coords, int p_alternative_tile, int p_frame, Color p_modulation, const TileData *p_tile_data_override, real_t p_normalized_animation_offset) { +void TileMapLayer::draw_tile(RID p_canvas_item, const Vector2 &p_position, const Ref p_tile_set, int p_atlas_source_id, const Vector2i &p_atlas_coords, int p_alternative_tile, int p_frame, const TileData *p_tile_data_override, real_t p_normalized_animation_offset) { ERR_FAIL_COND(p_tile_set.is_null()); ERR_FAIL_COND(!p_tile_set->has_source(p_atlas_source_id)); ERR_FAIL_COND(!p_tile_set->get_source(p_atlas_source_id)->has_tile(p_atlas_coords)); @@ -2487,7 +2488,7 @@ void TileMapLayer::draw_tile(RID p_canvas_item, const Vector2 &p_position, const const TileData *tile_data = p_tile_data_override ? p_tile_data_override : atlas_source->get_tile_data(p_atlas_coords, p_alternative_tile); // Get the tile modulation. - Color modulate = tile_data->get_modulate() * p_modulation; + Color modulate = tile_data->get_modulate(); // Compute the offset. Vector2 tile_offset = tile_data->get_texture_origin(); diff --git a/scene/2d/tile_map_layer.h b/scene/2d/tile_map_layer.h index 065ad3936b..24931b5b37 100644 --- a/scene/2d/tile_map_layer.h +++ b/scene/2d/tile_map_layer.h @@ -513,7 +513,7 @@ public: // Not exposed to users. TileMapCell get_cell(const Vector2i &p_coords) const; - static void draw_tile(RID p_canvas_item, const Vector2 &p_position, const Ref p_tile_set, int p_atlas_source_id, const Vector2i &p_atlas_coords, int p_alternative_tile, int p_frame = -1, Color p_modulation = Color(1.0, 1.0, 1.0, 1.0), const TileData *p_tile_data_override = nullptr, real_t p_normalized_animation_offset = 0.0); + static void draw_tile(RID p_canvas_item, const Vector2 &p_position, const Ref p_tile_set, int p_atlas_source_id, const Vector2i &p_atlas_coords, int p_alternative_tile, int p_frame = -1, const TileData *p_tile_data_override = nullptr, real_t p_normalized_animation_offset = 0.0); ////////////// Exposed functions //////////////