From 86789c7071836b802e6edb0538ce6de2b7949c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Wed, 30 Nov 2016 14:33:39 +0100 Subject: [PATCH] Add modulate (color) to TileSet tiles --- scene/2d/tile_map.cpp | 5 +++-- scene/resources/tile_set.cpp | 19 +++++++++++++++++++ scene/resources/tile_set.h | 7 +++++++ .../editor/plugins/tile_set_editor_plugin.cpp | 2 ++ 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 1a4f88c30e1..29f7754a386 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -457,10 +457,11 @@ void TileMap::_update_dirty_quadrants() { } + Color modulate = tile_set->tile_get_modulate(c.id); if (r==Rect2()) { - tex->draw_rect(canvas_item,rect,false,Color(1,1,1),c.transpose); + tex->draw_rect(canvas_item,rect,false,modulate,c.transpose); } else { - tex->draw_rect_region(canvas_item,rect,r,Color(1,1,1),c.transpose); + tex->draw_rect_region(canvas_item,rect,r,modulate,c.transpose); } Vector< Ref > shapes = tile_set->tile_get_shapes(c.id); diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp index bf019291914..260fbe71a52 100644 --- a/scene/resources/tile_set.cpp +++ b/scene/resources/tile_set.cpp @@ -48,6 +48,8 @@ bool TileSet::_set(const StringName& p_name, const Variant& p_value) { tile_set_texture_offset(id,p_value); else if (what=="material") tile_set_material(id,p_value); + else if (what=="modulate") + tile_set_modulate(id,p_value); else if (what=="shape_offset") tile_set_shape_offset(id,p_value); else if (what=="region") @@ -91,6 +93,8 @@ bool TileSet::_get(const StringName& p_name,Variant &r_ret) const{ r_ret=tile_get_texture_offset(id); else if (what=="material") r_ret=tile_get_material(id); + else if (what=="modulate") + r_ret=tile_get_modulate(id); else if (what=="shape_offset") r_ret=tile_get_shape_offset(id); else if (what=="region") @@ -124,6 +128,7 @@ void TileSet::_get_property_list( List *p_list) const{ p_list->push_back(PropertyInfo(Variant::OBJECT,pre+"texture",PROPERTY_HINT_RESOURCE_TYPE,"Texture")); p_list->push_back(PropertyInfo(Variant::VECTOR2,pre+"tex_offset")); p_list->push_back(PropertyInfo(Variant::OBJECT,pre+"material",PROPERTY_HINT_RESOURCE_TYPE,"CanvasItemMaterial")); + p_list->push_back(PropertyInfo(Variant::COLOR,pre+"modulate")); p_list->push_back(PropertyInfo(Variant::RECT2,pre+"region")); p_list->push_back(PropertyInfo(Variant::VECTOR2,pre+"occluder_offset")); p_list->push_back(PropertyInfo(Variant::OBJECT,pre+"occluder",PROPERTY_HINT_RESOURCE_TYPE,"OccluderPolygon2D")); @@ -175,6 +180,20 @@ Ref TileSet::tile_get_material(int p_id) const{ } +void TileSet::tile_set_modulate(int p_id,const Color &p_modulate) { + + ERR_FAIL_COND(!tile_map.has(p_id)); + tile_map[p_id].modulate=p_modulate; + emit_changed(); + +} + +Color TileSet::tile_get_modulate(int p_id) const{ + + ERR_FAIL_COND_V(!tile_map.has(p_id),Color(1,1,1)); + return tile_map[p_id].modulate; +} + void TileSet::tile_set_texture_offset(int p_id,const Vector2 &p_offset) { ERR_FAIL_COND(!tile_map.has(p_id)); diff --git a/scene/resources/tile_set.h b/scene/resources/tile_set.h index fb0e832c1ee..dabfdf9c4c7 100644 --- a/scene/resources/tile_set.h +++ b/scene/resources/tile_set.h @@ -52,6 +52,10 @@ class TileSet : public Resource { Vector2 navigation_polygon_offset; Ref navigation_polygon; Ref material; + Color modulate; + + // Default modulate for back-compat + explicit Data() : modulate(1,1,1) {} }; Map tile_map; @@ -94,6 +98,9 @@ public: void tile_set_material(int p_id,const Ref &p_material); Ref tile_get_material(int p_id) const; + void tile_set_modulate(int p_id,const Color &p_color); + Color tile_get_modulate(int p_id) const; + void tile_set_occluder_offset(int p_id,const Vector2& p_offset); Vector2 tile_get_occluder_offset(int p_id) const; diff --git a/tools/editor/plugins/tile_set_editor_plugin.cpp b/tools/editor/plugins/tile_set_editor_plugin.cpp index 39a15189e70..eadd6d34671 100644 --- a/tools/editor/plugins/tile_set_editor_plugin.cpp +++ b/tools/editor/plugins/tile_set_editor_plugin.cpp @@ -76,6 +76,8 @@ void TileSetEditor::_import_scene(Node *scene, Ref p_library, bool p_me p_library->tile_set_texture(id,texture); p_library->tile_set_material(id,material); + p_library->tile_set_modulate(id,mi->get_modulate()); + Vector2 phys_offset; Size2 s;