瀏覽代碼

-Make tilemap able to change light mask, fixes #2557

reduz 9 年之前
父節點
當前提交
5063cd7757
共有 3 個文件被更改,包括 14 次插入1 次删除
  1. 1 1
      scene/2d/canvas_item.h
  2. 11 0
      scene/2d/tile_map.cpp
  3. 2 0
      scene/2d/tile_map.h

+ 1 - 1
scene/2d/canvas_item.h

@@ -197,7 +197,7 @@ public:
 	void set_blend_mode(BlendMode p_blend_mode);
 	BlendMode get_blend_mode() const;
 
-	void set_light_mask(int p_light_mask);
+	virtual void set_light_mask(int p_light_mask);
 	int get_light_mask() const;
 
 	void set_opacity(float p_opacity);

+ 11 - 0
scene/2d/tile_map.cpp

@@ -333,6 +333,8 @@ void TileMap::_update_dirty_quadrants() {
 				Matrix32 xform;
 				xform.set_origin( q.pos );
 				vs->canvas_item_set_transform( canvas_item, xform );
+				vs->canvas_item_set_light_mask(canvas_item,get_light_mask());
+
 				q.canvas_items.push_back(canvas_item);
 
 				if (debug_shapes) {
@@ -1105,7 +1107,16 @@ int TileMap::get_occluder_light_mask() const{
 	return occluder_light_mask;
 }
 
+void TileMap::set_light_mask(int p_light_mask) {
+
+	CanvasItem::set_light_mask(p_light_mask);
+	for (Map<PosKey,Quadrant>::Element *E=quadrant_map.front();E;E=E->next()) {
 
+		for (List<RID>::Element *F=E->get().canvas_items.front();F;F=F->next()) {
+			VisualServer::get_singleton()->canvas_item_set_light_mask(F->get(),get_light_mask());
+		}
+	}
+}
 
 void TileMap::_bind_methods() {
 

+ 2 - 0
scene/2d/tile_map.h

@@ -253,6 +253,8 @@ public:
 	void set_occluder_light_mask(int p_mask);
 	int get_occluder_light_mask() const;
 
+	virtual void set_light_mask(int p_light_mask);
+
 	void clear();
 
 	TileMap();