153 lines
3.0 KiB
Go
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,
|
|
})
|
|
}
|