mirror of
https://github.com/kwsch/NHSE.git
synced 2026-03-21 17:24:30 -05:00
Fix Load All Patterns Ownership (#756)
Added Personal for IVillagerOrigin in place of current pattern index for Load All. Moved ContainsTransparentPixels to ImageUtil.
This commit is contained in:
parent
dc7292a5d3
commit
4426404f2d
|
|
@ -181,7 +181,7 @@ private static void Dump(this DesignPattern dp, string path, int index, bool ind
|
|||
/// <param name="patterns">Patterns to load</param>
|
||||
/// <param name="path">Path to load from</param>
|
||||
/// <param name="changeOrigins">Change origins of Patterns</param>
|
||||
public static void Load(this DesignPattern[] patterns, string path, bool changeOrigins)
|
||||
public static void Load(this DesignPattern[] patterns, string path, Personal player, bool changeOrigins)
|
||||
{
|
||||
if (patterns.Length == 0)
|
||||
return;
|
||||
|
|
@ -197,7 +197,7 @@ public static void Load(this DesignPattern[] patterns, string path, bool changeO
|
|||
var data = File.ReadAllBytes(f);
|
||||
var p = new DesignPattern(data);
|
||||
if (changeOrigins)
|
||||
p.ChangeOrigins(patterns[ctr], data);
|
||||
p.ChangeOrigins(player, data);
|
||||
patterns[ctr] = p;
|
||||
if (++ctr >= patterns.Length)
|
||||
break;
|
||||
|
|
@ -241,7 +241,7 @@ public static void Dump(this IReadOnlyList<DesignPatternPRO> patterns, string pa
|
|||
/// <param name="path">Path to load from</param>
|
||||
/// <param name="changeOrigins">Change origins of Patterns</param>
|
||||
/// <param name="sortAlpha">Sort the files by file name instead of depending on the Operating System's return order</param>
|
||||
public static void Load(this DesignPatternPRO[] patterns, string path, bool changeOrigins, bool sortAlpha = true)
|
||||
public static void Load(this DesignPatternPRO[] patterns, string path, Personal player, bool changeOrigins, bool sortAlpha = true)
|
||||
{
|
||||
if (patterns.Length == 0)
|
||||
return;
|
||||
|
|
@ -259,7 +259,7 @@ public static void Load(this DesignPatternPRO[] patterns, string path, bool chan
|
|||
var data = File.ReadAllBytes(f);
|
||||
var p = new DesignPatternPRO(data);
|
||||
if (changeOrigins)
|
||||
p.ChangeOrigins(patterns[ctr], data);
|
||||
p.ChangeOrigins(player, data);
|
||||
patterns[ctr] = p;
|
||||
if (++ctr >= patterns.Length)
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -65,6 +65,21 @@ public void SetBitmapData(Span<int> data)
|
|||
}
|
||||
}
|
||||
|
||||
public static bool ContainsTransparentPixels(Bitmap image)
|
||||
{
|
||||
for (int y = 0; y < image.Height; ++y)
|
||||
{
|
||||
for (int x = 0; x < image.Width; ++x)
|
||||
{
|
||||
if (image.GetPixel(x, y).A < 255) // check alpha
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Bitmap GetBitmap(ReadOnlySpan<int> data, int width, int height, PixelFormat format = PixelFormat.Format32bppArgb)
|
||||
{
|
||||
var span = MemoryMarshal.Cast<int, byte>(data);
|
||||
|
|
|
|||
|
|
@ -98,7 +98,22 @@ private void B_LoadDesign_Click(object sender, EventArgs e)
|
|||
if (dir == null || !Directory.Exists(dir))
|
||||
return;
|
||||
var result = WinFormsUtil.Prompt(MessageBoxButtons.YesNoCancel, MessageStrings.MsgAskUpdateValues);
|
||||
Patterns.Load(fbd.SelectedPath, result == DialogResult.Yes);
|
||||
Patterns.Load(fbd.SelectedPath, Player.Personal, result == DialogResult.Yes);
|
||||
foreach(var p in Patterns)
|
||||
{
|
||||
if (p.UsageCompatibility is not (0xEE00 or 0xEE02)) // known valid values (00=non-transparent, 02=transparent)
|
||||
{
|
||||
using var image = p.GetImage();
|
||||
if (ImageUtil.ContainsTransparentPixels(image))
|
||||
{
|
||||
p.UsageCompatibility = 0xEE02; // set to transparent
|
||||
}
|
||||
else
|
||||
{
|
||||
p.UsageCompatibility = 0xEE00; // reset to default value (non-transparent)
|
||||
}
|
||||
}
|
||||
}
|
||||
LoadPattern(Patterns[Index]);
|
||||
RepopulateList(Index);
|
||||
return;
|
||||
|
|
@ -138,7 +153,7 @@ private void B_LoadDesign_Click(object sender, EventArgs e)
|
|||
if (d.UsageCompatibility is not (0xEE00 or 0xEE02)) // known valid values (00=non-transparent, 02=transparent)
|
||||
{
|
||||
using var image = d.GetImage();
|
||||
if (ContainsTransparentPixels(image))
|
||||
if (ImageUtil.ContainsTransparentPixels(image))
|
||||
{
|
||||
d.UsageCompatibility = 0xEE02; // set to transparent
|
||||
}
|
||||
|
|
@ -161,21 +176,6 @@ private void RepopulateList(int index)
|
|||
LB_Items.SelectedIndex = index;
|
||||
}
|
||||
|
||||
public bool ContainsTransparentPixels(Bitmap image)
|
||||
{
|
||||
for (int y = 0; y < image.Height; ++y)
|
||||
{
|
||||
for (int x = 0; x < image.Width; ++x)
|
||||
{
|
||||
if (image.GetPixel(x, y).A < 255) // check alpha
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void LoadPattern(DesignPattern designPattern)
|
||||
{
|
||||
PB_Pattern.Image = ImageUtil.ResizeImage(designPattern.GetImage(), DesignPattern.Width * scale, DesignPattern.Height * scale);
|
||||
|
|
|
|||
|
|
@ -97,7 +97,12 @@ private void B_LoadDesign_Click(object sender, EventArgs e)
|
|||
if (dir == null || !Directory.Exists(dir))
|
||||
return;
|
||||
var result = WinFormsUtil.Prompt(MessageBoxButtons.YesNoCancel, MessageStrings.MsgAskUpdateValues);
|
||||
Patterns.Load(fbd.SelectedPath, result == DialogResult.Yes);
|
||||
Patterns.Load(fbd.SelectedPath, Player.Personal, result == DialogResult.Yes);
|
||||
foreach(var p in Patterns)
|
||||
{
|
||||
if (p.UsageCompatibility is not (0xEE01 or 0xEE05)) // known valid values (01=pro, 05=default_unused)
|
||||
p.UsageCompatibility = 0xEE01; // reset to default pro design
|
||||
}
|
||||
LoadPattern(Patterns[Index]);
|
||||
RepopulateList(Index);
|
||||
return;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user