52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package ui
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/charmbracelet/lipgloss"
|
|
"github.com/tolelom/catacombs/store"
|
|
)
|
|
|
|
func renderLeaderboard(byFloor, byGold []store.RunRecord, width, height int) string {
|
|
title := styleHeader.Render("── Leaderboard ──")
|
|
|
|
// By Floor
|
|
var floorSection string
|
|
floorSection += styleCoop.Render(" Top by Floor") + "\n"
|
|
for i, r := range byFloor {
|
|
if i >= 5 {
|
|
break
|
|
}
|
|
medal := fmt.Sprintf(" %d.", i+1)
|
|
cls := ""
|
|
if r.Class != "" {
|
|
cls = fmt.Sprintf(" [%s]", r.Class)
|
|
}
|
|
floorSection += fmt.Sprintf(" %s %s%s B%d %s\n",
|
|
medal, stylePlayer.Render(r.Player), styleSystem.Render(cls),
|
|
r.Floor, styleGold.Render(fmt.Sprintf("%dg", r.Score)))
|
|
}
|
|
|
|
// By Gold
|
|
var goldSection string
|
|
goldSection += styleCoop.Render("\n Top by Gold") + "\n"
|
|
for i, r := range byGold {
|
|
if i >= 5 {
|
|
break
|
|
}
|
|
medal := fmt.Sprintf(" %d.", i+1)
|
|
cls := ""
|
|
if r.Class != "" {
|
|
cls = fmt.Sprintf(" [%s]", r.Class)
|
|
}
|
|
goldSection += fmt.Sprintf(" %s %s%s B%d %s\n",
|
|
medal, stylePlayer.Render(r.Player), styleSystem.Render(cls),
|
|
r.Floor, styleGold.Render(fmt.Sprintf("%dg", r.Score)))
|
|
}
|
|
|
|
footer := styleSystem.Render("\n[L] Back")
|
|
|
|
return lipgloss.Place(width, height, lipgloss.Center, lipgloss.Center,
|
|
lipgloss.JoinVertical(lipgloss.Center, title, "", floorSection, goldSection, footer))
|
|
}
|