Daniele Bartolini 9 年之前
父节点
当前提交
9d8d7328cf
共有 1 个文件被更改,包括 13 次插入18 次删除
  1. 13 18
      src/resource/sprite_resource.cpp

+ 13 - 18
src/resource/sprite_resource.cpp

@@ -22,9 +22,8 @@ namespace sprite_resource_internal
 	struct SpriteFrame
 	{
 		StringId32 name;
-		Vector4 region;  // [x0, y0, x1, y1]
-		Vector2 scale;   // [Sx, Sy]
-		Vector2 offset;  // [Ox, Oy]
+		Vector4 region; // [x, y, w, h]
+		Vector2 pivot;  // [x, y]
 	};
 
 	void parse_frame(const char* json, SpriteFrame& frame)
@@ -35,8 +34,7 @@ namespace sprite_resource_internal
 
 		frame.name   = sjson::parse_string_id(obj["name"]);
 		frame.region = sjson::parse_vector4(obj["region"]);
-		frame.offset = sjson::parse_vector2(obj["offset"]);
-		frame.scale  = sjson::parse_vector2(obj["scale"]);
+		frame.pivot  = sjson::parse_vector2(obj["pivot"]);
 	}
 
 	void compile(const char* path, CompileOptions& opts)
@@ -67,18 +65,19 @@ namespace sprite_resource_internal
 
 			// Compute uv coords
 			const f32 u0 = fd.region.x / width;
-			const f32 v0 = fd.region.y / height;
+			const f32 v0 = (fd.region.y + fd.region.w) / height;
 			const f32 u1 = (fd.region.x + fd.region.z) / width;
-			const f32 v1 = (fd.region.y + fd.region.w) / height;
+			const f32 v1 = fd.region.y / height;
 
 			// Compute positions
-			const f32 w = fd.region.z / CROWN_DEFAULT_PIXELS_PER_METER;
-			const f32 h = fd.region.w / CROWN_DEFAULT_PIXELS_PER_METER;
-
-			const f32 x0 = fd.scale.x * (-w * 0.5f) + fd.offset.x;
-			const f32 y0 = fd.scale.y * (-h * 0.5f) + fd.offset.y;
-			const f32 x1 = fd.scale.x * ( w * 0.5f) + fd.offset.x;
-			const f32 y1 = fd.scale.y * ( h * 0.5f) + fd.offset.y;
+			f32 x0 = fd.region.x - fd.pivot.x;
+			f32 y0 = -(fd.region.y + fd.region.w - fd.pivot.y);
+			f32 x1 = fd.region.x + fd.region.z - fd.pivot.x;
+			f32 y1 = -(fd.region.y - fd.pivot.y);
+			x0 /= CROWN_DEFAULT_PIXELS_PER_METER;
+			y0 /= CROWN_DEFAULT_PIXELS_PER_METER;
+			x1 /= CROWN_DEFAULT_PIXELS_PER_METER;
+			y1 /= CROWN_DEFAULT_PIXELS_PER_METER;
 
 			array::push_back(vertices, x0); array::push_back(vertices, y0); // position
 			array::push_back(vertices, u0); array::push_back(vertices, v0); // uv
@@ -105,15 +104,11 @@ namespace sprite_resource_internal
 
 		opts.write(num_vertices);
 		for (u32 i = 0; i < array::size(vertices); i++)
-		{
 			opts.write(vertices[i]);
-		}
 
 		opts.write(num_indices);
 		for (u32 i = 0; i < array::size(indices); i++)
-		{
 			opts.write(indices[i]);
-		}
 	}
 
 	void* load(File& file, Allocator& a)