package game import ( "math" "strings" "thehouseoficarus/internal/color" "thehouseoficarus/internal/net" ) func (g *Game) hpBar(sess *net.Session, current, max int) string { if max <= 0 { max = 1 } if current < 0 { current = 0 } if current > max { current = max } pct := float64(current) / float64(max) * 100.0 filled := int(math.Round(pct / 10.0)) if filled < 0 { filled = 0 } if filled > 10 { filled = 10 } mode := g.colorMode(sess) var fgColor int switch { case pct >= 70: fgColor = 82 case pct >= 40: fgColor = 220 default: fgColor = 160 } fillSpec := color.ColorSpec{Fg: fgColor} emptySpec := color.ColorSpec{Fg: 238, Dim: true} fillChar := "█" emptyChar := "░" if sess.Player != nil && !sess.Player.OptionBool("unicode") { fillChar = "#" emptyChar = "." } var sb strings.Builder sb.WriteString("[") sb.WriteString(color.Render(mode, fillSpec, strings.Repeat(fillChar, filled))) sb.WriteString(color.Render(mode, emptySpec, strings.Repeat(emptyChar, 10-filled))) sb.WriteString("]") return sb.String() }