Skip to content

Commit 539bfc9

Browse files
Add convenience method
1 parent 0ddb039 commit 539bfc9

3 files changed

Lines changed: 28 additions & 22 deletions

File tree

src/D2SSharp.Tests/RoundTripTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public void RoundTrip_CompleteItem_Personalized()
151151
item.Quality = ItemQuality.Unique;
152152
item.Flags |= ItemFlags.Identified | ItemFlags.Personalized;
153153
item.PersonalizedName = "TestName";
154-
item.QualityData = new SetUniqueQualityData { FileIndex = 5 };
154+
item.QualityData = new SetUniqueQualityData { SetUniqueFileIndex = 5 };
155155
AssertItemRoundTrip(item);
156156
}
157157

@@ -235,7 +235,7 @@ public void RoundTrip_CompleteItem_SetWithBonuses()
235235
var item = CreateArmorItem("cap ", defense: 30, maxDur: 40, dur: 40);
236236
item.Quality = ItemQuality.Set;
237237
item.Flags |= ItemFlags.Identified;
238-
item.QualityData = new SetUniqueQualityData { FileIndex = 10 };
238+
item.QualityData = new SetUniqueQualityData { SetUniqueFileIndex = 10 };
239239
item.SetItemMask = 0b00101; // Bits 0 and 2 set
240240

241241
// Main stats

src/D2SSharp/Model/D2Save.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -343,14 +343,7 @@ private void ConvertD2RTo114()
343343
private PreviewItem CreatePreviewItem(Item item, Composits composit, ItemFlags flags = 0)
344344
{
345345
// Extract FileIndex from quality data if available
346-
ushort fileIndex = item.QualityData switch
347-
{
348-
SetUniqueQualityData setUnique => setUnique.FileIndex,
349-
InferiorQualityData inferior => inferior.FileIndex,
350-
SuperiorQualityData superior => superior.FileIndex,
351-
NormalBodyPartQualityData bodyPart => bodyPart.FileIndex,
352-
_ => 0
353-
};
346+
ushort fileIndex = item.QualityData?.FileIndex ?? 0;
354347

355348
return new PreviewItem
356349
{

src/D2SSharp/Model/ItemQualityData.cs

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,19 @@ namespace D2SSharp.Model;
1818
[JsonDerivedType(typeof(NormalScrollBookQualityData), "NormalScrollBook")]
1919
public abstract partial class ItemQualityData
2020
{
21+
/// <summary>
22+
/// Gets the file index for this quality type, if applicable.
23+
/// Returns null for quality types that don't have a file index (Magic, Rare, Craft, Tempered, Charm, ScrollBook).
24+
/// </summary>
25+
public ushort? FileIndex => this switch
26+
{
27+
InferiorQualityData inferior => inferior.InferiorFileIndex,
28+
SuperiorQualityData superior => superior.SuperiorFileIndex,
29+
SetUniqueQualityData setUnique => setUnique.SetUniqueFileIndex,
30+
NormalBodyPartQualityData bodyPart => bodyPart.BodyPartFileIndex,
31+
_ => null
32+
};
33+
2134
/// <summary>Writes the quality data to a BitWriter.</summary>
2235
/// <param name="writer">The BitWriter to write to.</param>
2336
/// <param name="magicPrefixOffset">Magic prefix ID offset from external data (applied to prefixes only).</param>
@@ -30,20 +43,20 @@ public abstract partial class ItemQualityData
3043
public partial class InferiorQualityData : ItemQualityData
3144
{
3245
/// <summary>Low quality type file index (0-7).</summary>
33-
public byte FileIndex { get; set; }
46+
public byte InferiorFileIndex { get; set; }
3447

3548
public static InferiorQualityData Read(ref BitReader reader)
3649
{
3750
return new InferiorQualityData
3851
{
39-
FileIndex = (byte)reader.ReadBits(3)
52+
InferiorFileIndex = (byte)reader.ReadBits(3)
4053
};
4154
}
4255

4356
public override void Write(ref BitWriter writer, int magicPrefixOffset = 0)
4457
{
4558
// C++: clamps to 0-7 (3 bits)
46-
writer.WriteBits(Math.Clamp(FileIndex, (byte)0, (byte)7), 3);
59+
writer.WriteBits(Math.Clamp(InferiorFileIndex, (byte)0, (byte)7), 3);
4760
}
4861
}
4962

@@ -53,20 +66,20 @@ public override void Write(ref BitWriter writer, int magicPrefixOffset = 0)
5366
public partial class SuperiorQualityData : ItemQualityData
5467
{
5568
/// <summary>Superior type file index (0-7).</summary>
56-
public byte FileIndex { get; set; }
69+
public byte SuperiorFileIndex { get; set; }
5770

5871
public static SuperiorQualityData Read(ref BitReader reader)
5972
{
6073
return new SuperiorQualityData
6174
{
62-
FileIndex = (byte)reader.ReadBits(3)
75+
SuperiorFileIndex = (byte)reader.ReadBits(3)
6376
};
6477
}
6578

6679
public override void Write(ref BitWriter writer, int magicPrefixOffset = 0)
6780
{
6881
// C++: clamps to 0-7 (3 bits)
69-
writer.WriteBits(Math.Clamp(FileIndex, (byte)0, (byte)7), 3);
82+
writer.WriteBits(Math.Clamp(SuperiorFileIndex, (byte)0, (byte)7), 3);
7083
}
7184
}
7285

@@ -118,20 +131,20 @@ public override void Write(ref BitWriter writer, int magicPrefixOffset = 0)
118131
public partial class SetUniqueQualityData : ItemQualityData
119132
{
120133
/// <summary>Set or Unique item file index (0-4095).</summary>
121-
public ushort FileIndex { get; set; }
134+
public ushort SetUniqueFileIndex { get; set; }
122135

123136
public static SetUniqueQualityData Read(ref BitReader reader)
124137
{
125138
return new SetUniqueQualityData
126139
{
127-
FileIndex = (ushort)reader.ReadBits(12)
140+
SetUniqueFileIndex = (ushort)reader.ReadBits(12)
128141
};
129142
}
130143

131144
public override void Write(ref BitWriter writer, int magicPrefixOffset = 0)
132145
{
133146
// C++: clamps to 0-4095 (12 bits), also handles negative as 4095
134-
writer.WriteBits(Math.Clamp(FileIndex, (ushort)0, (ushort)4095), 12);
147+
writer.WriteBits(Math.Clamp(SetUniqueFileIndex, (ushort)0, (ushort)4095), 12);
135148
}
136149
}
137150

@@ -311,20 +324,20 @@ public override void Write(ref BitWriter writer, int magicPrefixOffset = 0)
311324
public partial class NormalBodyPartQualityData : ItemQualityData
312325
{
313326
/// <summary>Monster ID file index (0-1023).</summary>
314-
public ushort FileIndex { get; set; }
327+
public ushort BodyPartFileIndex { get; set; }
315328

316329
public static NormalBodyPartQualityData Read(ref BitReader reader)
317330
{
318331
return new NormalBodyPartQualityData
319332
{
320-
FileIndex = (ushort)reader.ReadBits(10)
333+
BodyPartFileIndex = (ushort)reader.ReadBits(10)
321334
};
322335
}
323336

324337
public override void Write(ref BitWriter writer, int magicPrefixOffset = 0)
325338
{
326339
// C++: clamps to 0-1023 (10 bits)
327-
writer.WriteBits(Math.Clamp(FileIndex, (ushort)0, (ushort)1023), 10);
340+
writer.WriteBits(Math.Clamp(BodyPartFileIndex, (ushort)0, (ushort)1023), 10);
328341
}
329342
}
330343

0 commit comments

Comments
 (0)