浏览代码

Merge pull request #67283 from KoBeWi/one_way_ticket

Add one-way indicator to tile collision editor
Rémi Verschelde 2 年之前
父节点
当前提交
9a26ffa233
共有 2 个文件被更改,包括 22 次插入2 次删除
  1. 1 0
      editor/icons/OneWayTile.svg
  2. 21 2
      editor/plugins/tiles/tile_data_editors.cpp

+ 1 - 0
editor/icons/OneWayTile.svg

@@ -0,0 +1 @@
+<svg clip-rule="evenodd" fill-rule="evenodd" height="16" stroke-linecap="round" stroke-linejoin="round" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m10.958984 1.5-1.4785152 1.4667969-1.4785157 1.46875-1.4804687-1.4667969-1.4785156-1.4667969-.5214844.5136719-.5214844.5136719 2 1.9863281 2 1.984375 2-1.984375 2-1.9824219-.519531-.5175781zm0 8-1.4785152 1.466797-1.4785157 1.46875-1.4804687-1.466797-1.4785156-1.4667969-.5214844.5136719-.5214844.513672 2 1.986328 2 1.984375 2-1.984375 2-1.982422-.519531-.517578z" fill="#fff"/></svg>

+ 21 - 2
editor/plugins/tiles/tile_data_editors.cpp

@@ -1603,12 +1603,31 @@ void TileDataCollisionEditor::draw_over_tile(CanvasItem *p_canvas_item, Transfor
 	}
 
 	RenderingServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), p_transform);
+
+	Ref<Texture2D> one_way_icon = get_theme_icon(SNAME("OneWayTile"), SNAME("EditorIcons"));
 	for (int i = 0; i < tile_data->get_collision_polygons_count(physics_layer); i++) {
 		Vector<Vector2> polygon = tile_data->get_collision_polygon_points(physics_layer, i);
-		if (polygon.size() >= 3) {
-			p_canvas_item->draw_polygon(polygon, color);
+		if (polygon.size() < 3) {
+			continue;
+		}
+
+		p_canvas_item->draw_polygon(polygon, color);
+
+		if (tile_data->is_collision_polygon_one_way(physics_layer, i)) {
+			PackedVector2Array uvs;
+			uvs.resize(polygon.size());
+			Vector2 size_1 = Vector2(1, 1) / tile_set->get_tile_size();
+
+			for (int j = 0; j < polygon.size(); j++) {
+				uvs.write[j] = polygon[j] * size_1 + Vector2(0.5, 0.5);
+			}
+
+			Vector<Color> color2;
+			color2.push_back(Color(1, 1, 1, 0.4));
+			p_canvas_item->draw_polygon(polygon, color2, uvs, one_way_icon);
 		}
 	}
+
 	RenderingServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), Transform2D());
 }