PKHeX/PKHeX.Core/Saves/Substructures/Gen7/FashionBlock7.cs
2022-03-05 20:03:52 -08:00

62 lines
No EOL
2 KiB
C#

using System;
namespace PKHeX.Core
{
public sealed class FashionBlock7 : SaveBlock
{
public FashionBlock7(SAV7SM sav, int offset) : base(sav) => Offset = offset;
public FashionBlock7(SAV7USUM sav, int offset) : base(sav) => Offset = offset;
private const int FashionLength = 0x1A08;
public FashionItem7[] Wardrobe
{
get
{
var data = SAV.GetData(Offset, 0x5A8);
return Array.ConvertAll(data, b => new FashionItem7(b));
}
set
{
if (value.Length != 0x5A8)
throw new ArgumentOutOfRangeException($"Unexpected size: 0x{value.Length:X}");
var arr = Array.ConvertAll(value, z => z.Value);
SAV.SetData(arr, Offset);
}
}
public void Clear() => Array.Clear(Data, Offset, FashionLength);
/// <summary>
/// Resets the fashion unlocks to default values.
/// </summary>
public void Reset()
{
var offsetList = SAV is SAV7USUM
? (SAV.Gender == 0
? new[] { 0x03A, 0x109, 0x1DA, 0x305, 0x3D9, 0x4B1, 0x584 } // M
: new[] { 0x05E, 0x208, 0x264, 0x395, 0x3B4, 0x4F9, 0x5A8 }) // F
: (SAV.Gender == 0
? new[] { 0x000, 0x0FB, 0x124, 0x28F, 0x3B4, 0x452, 0x517 } // M
: new[] { 0x000, 0x100, 0x223, 0x288, 0x3B4, 0x452, 0x517 }); // F
foreach (var ofs in offsetList)
SAV.Data[Offset + ofs] = 3; // owned | new
}
}
// Every fashion item is 2 bits, New Flag (high) & Owned Flag (low)
public sealed class FashionItem7
{
public bool IsOwned { get; set; }
public bool IsNew { get; set; }
public FashionItem7(byte b)
{
IsOwned = (b & 1) != 0;
IsNew = (b & 2) != 0;
}
public byte Value => (byte)((IsOwned ? 1 : 0) | (IsNew ? 2 : 0));
}
}