func (c *Creature) use(i item.Itemer) { switch i.(type) { case *item.Potion: status.Println("You drink the potion.", termbox.ColorWhite) case *item.Tool: switch i.Name() { case "Star-Eye Map": status.Println("You try to read the map.", termbox.ColorWhite) } } status.Print(i.UseText(), termbox.ColorWhite) }
func RarityAttr(i item.Itemer) termbox.Attribute { var attr termbox.Attribute switch i.Rarity() { case item.Common: attr = termbox.ColorWhite case item.Magical: attr = termbox.ColorBlue + termbox.AttrBold case item.Artifact: attr = termbox.ColorWhite + termbox.AttrBold } return attr }
func (c *Creature) UnEquip(i item.Itemer) { if !c.IsEquipped(i) { return } switch obj := i.(type) { case (*item.Weapon): if c.Equipment.MainHand == obj { c.Equipment.MainHand = nil } if c.Equipment.OffHand == obj { c.Equipment.OffHand = nil } case (*item.Headgear): if c.Equipment.Head == obj { c.Equipment.Head = nil } case (*item.Amulet): if c.Equipment.Amulet == obj { c.Equipment.Amulet = nil } case (*item.Ring): c.removeRing(obj) case (*item.Boots): if c.Equipment.Boots == obj { c.Equipment.Boots = nil } case (*item.Gloves): if c.Equipment.Gloves == obj { c.Equipment.Gloves = nil } case (*item.Chestwear): if c.Equipment.Chestwear == obj { c.Equipment.Chestwear = nil } case (*item.Legwear): if c.Equipment.Legwear == obj { c.Equipment.Legwear = nil } } status.Println(fmt.Sprintf("You unequip %s.", i.Name()), termbox.ColorWhite) }
func (c *Creature) Use(i item.Itemer) { if !item.IsUsable(i) { status.Println("You can't use that item!", termbox.ColorRed+termbox.AttrBold) return } if !item.IsPermanent(i) { if i.Count() > 1 { i.SetCount(i.Count() - 1) } else { delete(c.Inventory, i.Hotkey()) } } c.use(i) }
func ShowItemDetails(i item.Itemer, a *area.Area) bool { ui.Clear() // Print item title. msgs := makeDrawable(fmt.Sprintf("%c - %s", i.Hotkey(), i.Name())) PrintLong(msgs, 0) rows := len(msgs) // Print flavor text. msgs = makeDrawable(i.FlavorText()) PrintLong(msgs, rows) rows += len(msgs) // Print flavor text. msgs = makeDrawable(StringEffects(i.Effects())) PrintLong(msgs, rows) rows += len(msgs) actionStr := dropAction if item.IsEquipable(i) && !creature.Hero.IsEquipped(i) { actionStr += " You can (e)quip this " + strings.ToLower(i.Cat()) + "." } if creature.Hero.IsEquipped(i) { actionStr += " You can (r)emove this " + strings.ToLower(i.Cat()) + "." } if item.IsUsable(i) { actionStr += " You can (u)se this " + strings.ToLower(i.Cat()) + "." } msgs = makeDrawable(actionStr) for y, m := range msgs { t := text.New(m, termbox.ColorCyan) ui.Print(t, ui.Inventory.XOffset, y+rows, ui.Inventory.Width) } termbox.Flush() itemDetailLoop: for { switch detailsEvent := termbox.PollEvent(); detailsEvent.Type { case termbox.EventKey: if detailsEvent.Key == ui.CancelKey { break itemDetailLoop } switch string(detailsEvent.Ch) { case string(ui.DropItemKey): creature.Hero.DropItem(i.Hotkey(), a) return true case string(ui.EquipItemKey): NarrativeEquip(i.Hotkey()) return true case string(ui.UseItemKey): NarrativeUse(i.Hotkey()) return true case string(ui.UnEquipItemKey): NarrativeUnEquip(i.Hotkey()) return true } } } return false }
func InvText(i item.Itemer) string { invStr := "" if item.IsStackable(i) { name := i.Name() if i.Count() > 1 { name = inflections.Pluralize(name) } invStr = fmt.Sprintf("%c - %d %s", i.Hotkey(), i.Count(), name) } else { invStr = fmt.Sprintf("%c - %s", i.Hotkey(), i.Name()) } if item.IsEquipable(i) { if creature.Hero.IsEquipped(i) { invStr += " (wielding)" } } return invStr }