浏览代码

Merge pull request #52652 from boruok/optional-crop-for-texture-atlas-importer

Rémi Verschelde 3 年之前
父节点
当前提交
5fb9a2a54d
共有 2 个文件被更改,包括 7 次插入1 次删除
  1. 6 1
      editor/import/resource_importer_texture_atlas.cpp
  2. 1 0
      editor/import/resource_importer_texture_atlas.h

+ 6 - 1
editor/import/resource_importer_texture_atlas.cpp

@@ -71,6 +71,7 @@ String ResourceImporterTextureAtlas::get_preset_name(int p_idx) const {
 void ResourceImporterTextureAtlas::get_import_options(List<ImportOption> *r_options, int p_preset) const {
 	r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "atlas_file", PROPERTY_HINT_SAVE_FILE, "*.png"), ""));
 	r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "import_mode", PROPERTY_HINT_ENUM, "Region,Mesh2D"), 0));
+	r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "crop_to_region"), false));
 }
 
 String ResourceImporterTextureAtlas::get_option_group_file() const {
@@ -203,6 +204,7 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file
 		ERR_CONTINUE(err != OK);
 
 		pack_data.image = image;
+		pack_data.is_cropped = options["crop_to_region"];
 
 		int mode = options["import_mode"];
 
@@ -325,7 +327,10 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file
 			atlas_texture.instance();
 			atlas_texture->set_atlas(cache);
 			atlas_texture->set_region(Rect2(offset, pack_data.region.size));
-			atlas_texture->set_margin(Rect2(pack_data.region.position, Size2(pack_data.image->get_width(), pack_data.image->get_height()) - pack_data.region.size));
+
+			if (!pack_data.is_cropped) {
+				atlas_texture->set_margin(Rect2(pack_data.region.position, pack_data.image->get_size() - pack_data.region.size));
+			}
 
 			texture = atlas_texture;
 		} else {

+ 1 - 0
editor/import/resource_importer_texture_atlas.h

@@ -38,6 +38,7 @@ class ResourceImporterTextureAtlas : public ResourceImporter {
 
 	struct PackData {
 		Rect2 region;
+		bool is_cropped;
 		bool is_mesh;
 		Vector<int> chart_pieces; //one for region, many for mesh
 		Vector<Vector<Vector2>> chart_vertices; //for mesh