package model import ( "mvvasilev/last_light/engine" ) type EquippedSlot int const ( EquippedSlotNone EquippedSlot = 0 EquippedSlotOffhand EquippedSlot = 1 EquippedSlotDominantHand EquippedSlot = 2 EquippedSlotHead EquippedSlot = 3 EquippedSlotChestplate EquippedSlot = 4 EquippedSlotLeggings EquippedSlot = 5 EquippedSlotShoes EquippedSlot = 6 ) type EquippedInventory struct { offHand Item dominantHand Item head Item chestplate Item leggings Item shoes Item *BasicInventory } func CreateEquippedInventory() *EquippedInventory { return &EquippedInventory{ BasicInventory: CreateInventory(engine.SizeOf(8, 4)), } } func BuildInventory(manips ...func(*EquippedInventory)) *EquippedInventory { ei := CreateEquippedInventory() for _, m := range manips { m(ei) } return ei } func Inv_WithOffHand(item Item) func(*EquippedInventory) { return func(ei *EquippedInventory) { ei.offHand = item } } func Inv_WithDominantHand(item Item) func(*EquippedInventory) { return func(ei *EquippedInventory) { ei.dominantHand = item } } func Inv_WithHead(item Item) func(*EquippedInventory) { return func(ei *EquippedInventory) { ei.head = item } } func Inv_WithChest(item Item) func(*EquippedInventory) { return func(ei *EquippedInventory) { ei.chestplate = item } } func Inv_WithLegs(item Item) func(*EquippedInventory) { return func(ei *EquippedInventory) { ei.leggings = item } } func Inv_WithShoes(item Item) func(*EquippedInventory) { return func(ei *EquippedInventory) { ei.shoes = item } } func Inv_WithContents(items ...Item) func(*EquippedInventory) { return func(ei *EquippedInventory) { for _, i := range items { ei.Push(i) } } } func (ei *EquippedInventory) AtSlot(slot EquippedSlot) Item { switch slot { case EquippedSlotOffhand: return ei.offHand case EquippedSlotDominantHand: return ei.dominantHand case EquippedSlotHead: return ei.head case EquippedSlotChestplate: return ei.chestplate case EquippedSlotLeggings: return ei.leggings case EquippedSlotShoes: return ei.shoes default: return nil } } func (ei *EquippedInventory) Equip(item Item, slot EquippedSlot) Item { switch slot { case EquippedSlotOffhand: ei.offHand = item case EquippedSlotDominantHand: ei.dominantHand = item case EquippedSlotHead: ei.head = item case EquippedSlotChestplate: ei.chestplate = item case EquippedSlotLeggings: ei.leggings = item case EquippedSlotShoes: ei.shoes = item } return item }