tweak variables for clarity

This commit is contained in:
Jesse Plamondon-Willard 2022-11-14 17:28:59 -05:00
parent e2c1d2b1c9
commit ae5829a3ee
No known key found for this signature in database
GPG Key ID: CF8B1456B3E29F49
1 changed files with 21 additions and 22 deletions

View File

@ -140,9 +140,11 @@ namespace StardewModdingAPI.Framework.Content
/// <exception cref="InvalidOperationException">The content being read isn't an image.</exception> /// <exception cref="InvalidOperationException">The content being read isn't an image.</exception>
private void PatchImageImpl(Color[] sourceData, int sourceWidth, int sourceHeight, Rectangle sourceArea, Rectangle targetArea, PatchMode patchMode, int startRow = 0) private void PatchImageImpl(Color[] sourceData, int sourceWidth, int sourceHeight, Rectangle sourceArea, Rectangle targetArea, PatchMode patchMode, int startRow = 0)
{ {
// get texture // get texture info
Texture2D target = this.Data; Texture2D target = this.Data;
int pixelCount = sourceArea.Width * sourceArea.Height; int pixelCount = sourceArea.Width * sourceArea.Height;
int firstPixel = startRow * sourceArea.Width;
int lastPixel = firstPixel + pixelCount - 1;
// validate // validate
if (sourceArea.X < 0 || sourceArea.Y < 0 || sourceArea.Right > sourceWidth || sourceArea.Bottom > sourceHeight) if (sourceArea.X < 0 || sourceArea.Y < 0 || sourceArea.Right > sourceWidth || sourceArea.Bottom > sourceHeight)
@ -155,37 +157,34 @@ namespace StardewModdingAPI.Framework.Content
// shortcut: replace the entire area // shortcut: replace the entire area
if (patchMode == PatchMode.Replace) if (patchMode == PatchMode.Replace)
{ {
target.SetData(0, targetArea, sourceData, startRow * sourceArea.Width, pixelCount); target.SetData(0, targetArea, sourceData, firstPixel, pixelCount);
return; return;
} }
// skip transparent pixels at the start & end (e.g. large spritesheet with a few sprites replaced) // skip transparent pixels at the start & end (e.g. large spritesheet with a few sprites replaced)
int startIndex = -1; int startIndex = -1;
int endIndex = -1; int endIndex = -1;
for (int i = firstPixel; i <= lastPixel; i++)
{ {
int endPixel = pixelCount + startRow * sourceArea.Width; if (sourceData[i].A >= AssetDataForImage.MinOpacity)
for (int i = startRow * sourceArea.Width; i < endPixel; i++)
{ {
if (sourceData[i].A >= AssetDataForImage.MinOpacity) startIndex = i;
{ break;
startIndex = i;
break;
}
} }
if (startIndex == -1)
return; // blank texture
for (int i = endPixel - 1; i >= startIndex; i--)
{
if (sourceData[i].A >= AssetDataForImage.MinOpacity)
{
endIndex = i;
break;
}
}
if (endIndex == -1)
return; // ???
} }
if (startIndex == -1)
return; // blank texture
for (int i = lastPixel; i >= startIndex; i--)
{
if (sourceData[i].A >= AssetDataForImage.MinOpacity)
{
endIndex = i;
break;
}
}
if (endIndex == -1)
return; // ???
// update target rectangle // update target rectangle
int sourceOffset; int sourceOffset;