aboutsummaryrefslogtreecommitdiff
path: root/internal/game/render_color.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-06-25 15:40:48 -0400
committerhistoria <[not public]>2026-06-25 15:40:48 -0400
commitabd612c15799f604e671e83dc7c410ed2b44185f (patch)
tree0597ca92350de73aac2a7cf26b2f2d6595dac0cc /internal/game/render_color.go
parent2725e2927a1595c7b100d942d1f14146252adeb7 (diff)
downloadthehouseoficarus-abd612c15799f604e671e83dc7c410ed2b44185f.tar.gz
slop refactor
Diffstat (limited to 'internal/game/render_color.go')
-rw-r--r--internal/game/render_color.go80
1 files changed, 80 insertions, 0 deletions
diff --git a/internal/game/render_color.go b/internal/game/render_color.go
new file mode 100644
index 0000000..c6f154c
--- /dev/null
+++ b/internal/game/render_color.go
@@ -0,0 +1,80 @@
+package game
+
+import (
+ "thehouseoficarus/internal/color"
+ "thehouseoficarus/internal/config"
+ "thehouseoficarus/internal/item"
+ "thehouseoficarus/internal/net"
+ "thehouseoficarus/internal/object"
+)
+
+func (g *Game) colorMode(sess *net.Session) string {
+ if p := sess.Player; p != nil {
+ return p.OptionString("color")
+ }
+ return "none"
+}
+
+func (g *Game) resolveColor(sess *net.Session, category string) color.ColorSpec {
+ if sess.Account != nil && sess.Account.Colors != nil {
+ if val, ok := sess.Account.Colors[category]; ok {
+ if val == "off" {
+ return color.NoColor()
+ }
+ if val != "" {
+ return color.Parse(val)
+ }
+ }
+ }
+ if g.ColorConfig != nil {
+ if val, ok := (*g.ColorConfig)[category]; ok && val != "" {
+ return color.Parse(val)
+ }
+ }
+ if val, ok := config.DefaultColors()[category]; ok && val != "" {
+ return color.Parse(val)
+ }
+ return color.NoColor()
+}
+
+func (g *Game) colorize(sess *net.Session, category, text string) string {
+ spec := g.resolveColor(sess, category)
+ return color.Render(g.colorMode(sess), spec, text)
+}
+
+func levelColorSpec(myLevel, theirLevel int) color.ColorSpec {
+ diff := theirLevel - myLevel
+ switch {
+ case diff == 0:
+ return color.Parse("231")
+ case diff > 0 && diff < 5:
+ return color.Parse("208")
+ case diff >= 5:
+ return color.Parse("196")
+ case diff < 0 && diff > -5:
+ return color.Parse("190")
+ default:
+ return color.Parse("34")
+ }
+}
+
+func (g *Game) levelColorize(sess *net.Session, myLevel, theirLevel int, text string) string {
+ spec := levelColorSpec(myLevel, theirLevel)
+ return color.Render(g.colorMode(sess), spec, text)
+}
+
+func (g *Game) objColorize(sess *net.Session, objDef *object.ObjectDef, text string) string {
+ if objDef != nil && objDef.Color != "" {
+ spec := color.Parse(objDef.Color)
+ return color.Render(g.colorMode(sess), spec, text)
+ }
+ return text
+}
+
+func (g *Game) itemColorize(sess *net.Session, itemDef *item.ItemDef, text string) string {
+ if itemDef != nil && itemDef.Color != "" {
+ spec := color.Parse(itemDef.Color)
+ return color.Render(g.colorMode(sess), spec, text)
+ }
+ return g.colorize(sess, "item", text)
+}