Files
tallytome/handler/tracker.go
2024-03-22 17:53:12 +01:00

156 lines
3.3 KiB
Go

package handler
import (
"fmt"
"math"
"strconv"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/log"
"github.com/itsig0/tallytome/view/hptracker"
)
func Tracker(c fiber.Ctx) error {
hx := len(c.GetReqHeaders()["Hx-Request"]) > 0
data := hptracker.TrackerData{
HP: "0",
HPBase: "0",
HPStartPercentage: "0",
HPPercentage: "0",
Mana: "0",
ManaBase: "0",
ManaRegen: "0",
ManaStartPercentage: "0",
ManaPercentage: "0",
}
return render(c, hptracker.Show(hx, data))
}
func TrackerUpdate(c fiber.Ctx) error {
sess, err := store.Get(c)
if err != nil {
return err
}
data := hptracker.TrackerData{
HP: c.FormValue("hp"),
HPBase: c.FormValue("hp"),
HPStartPercentage: "0",
HPPercentage: "100",
Mana: c.FormValue("mana"),
ManaBase: c.FormValue("mana"),
ManaRegen: c.FormValue("manaregen"),
ManaStartPercentage: "0",
ManaPercentage: "100",
}
// why no work?
// values := reflect.ValueOf(data)
// types := values.Type()
// prefix := "tracker_"
// for i := 0; i < values.NumField(); i++ {
// sess.Set(prefix+types.Field(i).Name, values.Field(i))
// log.Info("test")
// }
pre := "tracker_"
sess.Set(pre+"HP", data.HP)
sess.Set(pre+"HPBase", data.HPBase)
sess.Set(pre+"HPPercentage", data.HPPercentage)
sess.Set(pre+"HPStartPercentage", data.HPStartPercentage)
sess.Set(pre+"Mana", data.Mana)
sess.Set(pre+"ManaBase", data.ManaBase)
sess.Set(pre+"ManaRegen", data.ManaRegen)
sess.Set(pre+"ManaStartPercentage", data.ManaStartPercentage)
sess.Set(pre+"ManaPercentage", data.ManaPercentage)
// sess.Set("tracker", data)
sess.Save()
return render(c, hptracker.TrackerColumn(data))
}
func TrackerDamage(c fiber.Ctx) error {
sess, err := store.Get(c)
if err != nil {
return err
}
damage, err := strconv.Atoi(c.FormValue("damageInput"))
if err != nil {
c.SendStatus(418)
return err
} else if damage == 0 {
c.SendStatus(418)
return c.SendString("HP NOT NULL")
}
if damage < 0 {
damage *= -1
}
currentHP, err := strconv.Atoi(fmt.Sprint(sess.Get("tracker_HP")))
if err != nil {
c.SendStatus(418)
return err
}
baseHP, err := strconv.Atoi(fmt.Sprint(sess.Get("tracker_HPBase")))
if err != nil {
c.SendStatus(418)
return err
}
heal := string(c.FormValue("heal"))
savingThrow := string(c.FormValue("savingthrow"))
if savingThrow == "on" || heal == "false" {
damageFloat := float64(damage) * 0.33333
damage -= int(math.Round(damageFloat))
}
if heal == "true" && damage > 0 {
damage *= -1
}
newHP := currentHP - damage
if newHP < 0 {
newHP = 0
}
if newHP > baseHP {
newHP = baseHP
}
newPercentage := (newHP * 100) / baseHP
data := hptracker.TrackerData{
HP: fmt.Sprint(newHP),
HPBase: fmt.Sprint(sess.Get("tracker_HPBase")),
HPStartPercentage: fmt.Sprint(sess.Get("tracker_HPPercentage")),
HPPercentage: fmt.Sprint(newPercentage),
}
sess.Set("tracker_HP", newHP)
sess.Set("tracker_HPPercentage", newPercentage)
sess.Save()
return render(c, hptracker.HPTracker(data))
}
func CheckStore(c fiber.Ctx) error {
sess, err := store.Get(c)
if err != nil {
return err
}
log.Info(sess.Keys())
return nil
}