Extract shared interface

This commit is contained in:
Kurt
2020-04-09 11:43:30 -07:00
parent a87cb512a6
commit 9d2010a285
4 changed files with 21 additions and 10 deletions

View File

@@ -5,7 +5,7 @@
namespace NHSE.Core
{
[StructLayout(LayoutKind.Explicit, Size = SIZE, Pack = 1)]
public class FieldItem
public class FieldItem : IHeldItem
{
public const ushort EXTENSION = 0xFFFD;
public const ushort NONE = 0xFFFE;
@@ -63,7 +63,7 @@ public void Delete()
Count = UseCount = 0;
}
public void CopyFrom(Item item)
public void CopyFrom(IHeldItem item)
{
ItemId = item.ItemId;
Flags0 = item.Flags0;

View File

@@ -0,0 +1,11 @@
namespace NHSE.Core
{
public interface IHeldItem
{
ushort ItemId { get; set; }
byte Flags0 { get; set; }
byte Flags1 { get; set; }
ushort Count { get; set; }
ushort UseCount { get; set; }
}
}

View File

@@ -3,8 +3,8 @@
namespace NHSE.Core
{
[StructLayout(LayoutKind.Sequential)]
public class Item
[StructLayout(LayoutKind.Explicit, Size = SIZE, Pack = 1)]
public class Item : IHeldItem
{
public static readonly Item NO_ITEM = new Item {ItemId = NONE};
public const ushort NONE = 0xFFFE;
@@ -16,11 +16,11 @@ public class Item
0x1E1B, 0x1E1C, 0x1E1D, 0x1E1E, 0x1E1F, 0x1E20, 0x1E21, 0x1E22
};
public ushort ItemId;
public byte Flags0;
public byte Flags1;
public ushort Count;
public ushort UseCount;
[field: FieldOffset(0)] public ushort ItemId { get; set; }
[field: FieldOffset(2)] public byte Flags0 { get; set; }
[field: FieldOffset(3)] public byte Flags1 { get; set; }
[field: FieldOffset(4)] public ushort Count { get; set; }
[field: FieldOffset(6)] public ushort UseCount { get; set; }
public ItemType Type => (ItemType) (Flags1 & 3);
public int ReservedIndex => (Flags1 >> 2) & 0xF;

View File

@@ -4,7 +4,7 @@ public static class ItemInfo
{
private static readonly byte[] ItemKinds = ResourceUtil.GetBinaryResource("item_kind.bin");
public static ItemKind GetItemKind(Item item) => GetItemKind(item.ItemId);
public static ItemKind GetItemKind(IHeldItem item) => GetItemKind(item.ItemId);
public static ItemKind GetItemKind(FieldItem item) => GetItemKind(item.DisplayItemId);
public static ItemKind GetItemKind(ushort id)