153 lines
3.0 KiB
Go

package components
import (
"dk/internal/helpers"
"dk/internal/middleware"
"dk/internal/router"
"dk/internal/spells"
"dk/internal/template"
"dk/internal/towns"
)
// LeftAside generates the left sidebar content
func LeftAside(ctx router.Ctx) string {
user := middleware.GetCurrentUser(ctx)
if user == nil {
return ""
}
tmpl, err := template.Cache.Load("leftside.html")
if err != nil {
return "leftside failed to load?"
}
cardinalX := "E"
if user.X < 0 {
cardinalX = "W"
}
cardinalY := "S"
if user.Y < 0 {
cardinalY = "N"
}
townname := ""
if user.Currently == "In Town" {
town, err := towns.ByCoords(user.X, user.Y)
if err != nil {
townname = "error finding town"
}
townname = "<div class=\"mb-05\"><b>In " + town.Name + "</b></div>"
}
townlist := ""
townIDs := user.GetTownIDs()
if len(townIDs) > 0 {
townlist = "<i>Teleport to:</i><br>"
for _, id := range townIDs {
town, err := towns.Find(id)
if err != nil {
continue
}
townlist += `<a href="#">` + town.Name + "</a><br>"
}
} else {
townlist = "<i>No town maps</i>"
}
return tmpl.RenderNamed(map[string]any{
"user": user.ToMap(),
"cardinalX": cardinalX,
"cardinalY": cardinalY,
"townname": townname,
"townlist": townlist,
})
}
// RightAside generates the right sidebar content
func RightAside(ctx router.Ctx) string {
user := middleware.GetCurrentUser(ctx)
if user == nil {
return ""
}
tmpl, err := template.Cache.Load("rightside.html")
if err != nil {
return ""
}
hpPct := helpers.ClampPct(float64(user.HP), float64(user.MaxHP), 0, 100)
mpPct := helpers.ClampPct(float64(user.MP), float64(user.MaxMP), 0, 100)
tpPct := helpers.ClampPct(float64(user.TP), float64(user.MaxTP), 0, 100)
hpColor := ""
if hpPct < 35 {
hpColor = "danger"
} else if hpPct < 75 {
hpColor = "warning"
}
weaponName := "<i>No weapon</i>"
if user.WeaponName != "" {
weaponName = user.WeaponName
}
armorName := "<i>No armor</i>"
if user.ArmorName != "" {
armorName = user.ArmorName
}
shieldName := "<i>No shield</i>"
if user.ShieldName != "" {
shieldName = user.ShieldName
}
slot1Name := ""
if user.Slot1Name != "" {
slot1Name = user.Slot1Name
}
slot2Name := ""
if user.Slot2Name != "" {
slot2Name = user.Slot2Name
}
slot3Name := ""
if user.Slot3Name != "" {
slot3Name = user.Slot3Name
}
magicList := ""
list := user.GetSpellIDs()
if len(list) > 0 {
for i := range list {
spell, err := spells.Find(i)
if err != nil {
continue
}
if spell.IsHealing() {
magicList += `<a href="#">` + spell.Name + "</a>"
}
}
} else {
magicList = "<i>No healing spells known</i>"
}
return tmpl.RenderNamed(map[string]any{
"user": user.ToMap(),
"hppct": hpPct,
"hpcolor": hpColor,
"mppct": mpPct,
"tppct": tpPct,
"weaponname": weaponName,
"armorname": armorName,
"shieldname": shieldName,
"slot1name": slot1Name,
"slot2name": slot2Name,
"slot3name": slot3Name,
"magiclist": magicList,
})
}