313 lines
7.3 KiB
Go
313 lines
7.3 KiB
Go
package handler
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"reflect"
|
|
"strconv"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/itsig0/tallytome/view/hptracker"
|
|
)
|
|
|
|
func Tracker(c fiber.Ctx) error {
|
|
sess, err := store.Get(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
hx := len(c.GetReqHeaders()["Hx-Request"]) > 0
|
|
|
|
data := hptracker.TrackerData{
|
|
Round: "0",
|
|
}
|
|
|
|
fields := []string{"HP", "HPBase", "HPStartPercentage", "HPPercentage", "Mana", "ManaBase", "ManaRegen", "ManaStartPercentage", "ManaPercentage", "Round"}
|
|
for _, field := range fields {
|
|
if val := sess.Get("tracker_" + field); val != nil {
|
|
reflect.ValueOf(&data).Elem().FieldByName(field).SetString(fmt.Sprint(val))
|
|
}
|
|
}
|
|
|
|
if sess.Get("tracker_Round") == nil {
|
|
sess.Set("tracker_Round", "0")
|
|
sess.Save()
|
|
}
|
|
|
|
// prevent animation reset
|
|
data.HPStartPercentage = data.HPPercentage
|
|
data.ManaStartPercentage = data.ManaPercentage
|
|
|
|
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",
|
|
}
|
|
|
|
bd := hptracker.BaseData{}
|
|
|
|
mistake := false
|
|
|
|
if len(data.HP) > 5 || len(data.Mana) > 5 {
|
|
bd.Errors = "Einfach nur zu viel."
|
|
mistake = true
|
|
}
|
|
|
|
intManaRegen, _ := strconv.Atoi(data.ManaRegen)
|
|
if intManaRegen > 100 && !mistake {
|
|
bd.Errors = "Mehr als 100% geht nicht"
|
|
mistake = true
|
|
}
|
|
|
|
if mistake {
|
|
c.Status(422)
|
|
c.Append("HX-Retarget", "#baseStats")
|
|
c.Append("HX-Reswap", "outerHTML")
|
|
|
|
return render(c, hptracker.BaseStats(data, bd))
|
|
}
|
|
|
|
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.HPPercentage)
|
|
|
|
sess.Set(pre+"Mana", data.Mana)
|
|
sess.Set(pre+"ManaBase", data.ManaBase)
|
|
sess.Set(pre+"ManaRegen", data.ManaRegen)
|
|
sess.Set(pre+"ManaStartPercentage", data.ManaPercentage)
|
|
sess.Set(pre+"ManaPercentage", data.ManaPercentage)
|
|
|
|
sess.Set(pre+"Round", "0")
|
|
|
|
sess.Save()
|
|
|
|
c.Append("HX-Trigger", "BaseUpdated")
|
|
|
|
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.Status(422)
|
|
c.Append("HX-Retarget", "#damageInputs")
|
|
c.Append("HX-Reswap", "outerHTML")
|
|
return render(c, hptracker.Hp(hptracker.DamageData{
|
|
Errors: "Einfach nur zu viel.",
|
|
}))
|
|
}
|
|
|
|
if damage <= 0 {
|
|
c.Status(422)
|
|
c.Append("HX-Retarget", "#damageInputs")
|
|
c.Append("HX-Reswap", "outerHTML")
|
|
return render(c, hptracker.Hp(hptracker.DamageData{
|
|
Errors: "Darf nicht 0 oder kleiner sein.",
|
|
}))
|
|
}
|
|
|
|
currentHP, err := strconv.Atoi(fmt.Sprint(sess.Get("tracker_HP")))
|
|
if err != nil {
|
|
c.Status(422)
|
|
c.Append("HX-Retarget", "#damageInputs")
|
|
c.Append("HX-Reswap", "outerHTML")
|
|
return render(c, hptracker.Hp(hptracker.DamageData{
|
|
Errors: "Standard Werte nicht gesetzt.",
|
|
Values: c.FormValue("damageInput"),
|
|
SavingThrow: c.FormValue("savingthrow"),
|
|
}))
|
|
}
|
|
|
|
// no error handling here because it's already done for currentHP
|
|
baseHP, _ := strconv.Atoi(fmt.Sprint(sess.Get("tracker_HPBase")))
|
|
|
|
heal := c.FormValue("heal")
|
|
savingThrow := c.FormValue("savingthrow")
|
|
|
|
if savingThrow == "on" && heal != "true" {
|
|
damageFloat := float64(damage) * 0.33333
|
|
damage -= int(math.Round(damageFloat))
|
|
}
|
|
|
|
if heal == "true" {
|
|
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()
|
|
|
|
c.Append("HX-Trigger", "HPUpdated")
|
|
|
|
return render(c, hptracker.HPTracker(data))
|
|
}
|
|
|
|
func TrackerMana(c fiber.Ctx) error {
|
|
sess, err := store.Get(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
manaData := hptracker.ManaData{}
|
|
|
|
mana, err := strconv.Atoi(c.FormValue("manaInput"))
|
|
if err != nil {
|
|
c.Status(422)
|
|
c.Append("HX-Retarget", "#manaInputs")
|
|
manaData.Errors = "Einfach nur zu viel."
|
|
return render(c, hptracker.Mana(manaData))
|
|
}
|
|
|
|
if mana <= 0 {
|
|
c.Status(422)
|
|
c.Append("HX-Retarget", "#manaInputs")
|
|
manaData.Errors = "Darf nicht 0 oder kleiner sein."
|
|
return render(c, hptracker.Mana(manaData))
|
|
}
|
|
|
|
currentMana, err := strconv.Atoi(fmt.Sprint(sess.Get("tracker_Mana")))
|
|
if err != nil {
|
|
c.Status(422)
|
|
c.Append("HX-Retarget", "#manaInputs")
|
|
manaData.Errors = "Standard Werte nicht gesetzt."
|
|
manaData.Values = c.FormValue("manaInput")
|
|
return render(c, hptracker.Mana(manaData))
|
|
}
|
|
|
|
baseMana, _ := strconv.Atoi(fmt.Sprint(sess.Get("tracker_ManaBase")))
|
|
|
|
add := c.FormValue("add")
|
|
|
|
if add == "true" {
|
|
mana *= -1
|
|
}
|
|
|
|
newMana := currentMana - mana
|
|
|
|
if newMana < 0 {
|
|
newMana = 0
|
|
}
|
|
|
|
if newMana > baseMana {
|
|
newMana = baseMana
|
|
}
|
|
|
|
newPercentage := (newMana * 100) / baseMana
|
|
|
|
data := hptracker.TrackerData{
|
|
Mana: fmt.Sprint(newMana),
|
|
ManaBase: fmt.Sprint(sess.Get("tracker_ManaBase")),
|
|
ManaStartPercentage: fmt.Sprint(sess.Get("tracker_ManaPercentage")),
|
|
ManaPercentage: fmt.Sprint(newPercentage),
|
|
}
|
|
|
|
sess.Set("tracker_Mana", newMana)
|
|
sess.Set("tracker_ManaPercentage", newPercentage)
|
|
|
|
sess.Save()
|
|
|
|
c.Append("HX-Trigger", "ManaUpdated")
|
|
|
|
return render(c, hptracker.ManaTracker(data))
|
|
}
|
|
|
|
func TrackerRound(c fiber.Ctx) error {
|
|
sess, err := store.Get(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data := hptracker.TrackerData{}
|
|
|
|
fields := []string{"HP", "HPBase", "HPStartPercentage", "HPPercentage", "Mana", "ManaBase", "ManaRegen", "ManaStartPercentage", "ManaPercentage", "Round"}
|
|
for _, field := range fields {
|
|
if val := sess.Get("tracker_" + field); val != nil {
|
|
reflect.ValueOf(&data).Elem().FieldByName(field).SetString(fmt.Sprint(val))
|
|
}
|
|
}
|
|
|
|
mana, _ := strconv.Atoi(data.Mana)
|
|
manaBase, _ := strconv.Atoi(data.ManaBase)
|
|
manaRegen, _ := strconv.Atoi(data.ManaRegen)
|
|
round, _ := strconv.Atoi(data.Round)
|
|
|
|
if manaBase == 0 || manaRegen == 0 {
|
|
c.Status(418)
|
|
return render(c, hptracker.TrackerHeader(data))
|
|
}
|
|
|
|
mana += (manaRegen * manaBase) / 100
|
|
|
|
if mana > manaBase {
|
|
mana = manaBase
|
|
}
|
|
|
|
// hp stays the same for now
|
|
data.HPStartPercentage = data.HPPercentage
|
|
|
|
data.Mana = fmt.Sprint(mana)
|
|
data.Round = fmt.Sprint(round + 1)
|
|
data.ManaStartPercentage = data.ManaPercentage
|
|
data.ManaPercentage = fmt.Sprint((mana * 100) / manaBase)
|
|
|
|
sess.Set("tracker_Mana", data.Mana)
|
|
sess.Set("tracker_ManaPercentage", data.ManaPercentage)
|
|
sess.Set("tracker_ManaStartPercentage", data.ManaStartPercentage)
|
|
sess.Set("tracker_Round", data.Round)
|
|
|
|
sess.Save()
|
|
|
|
return render(c, hptracker.TrackerHeader(data))
|
|
}
|
|
|
|
func TrackerReset(c fiber.Ctx) error {
|
|
sess, err := store.Get(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
sess.Reset()
|
|
return render(c, hptracker.Show(true, hptracker.TrackerData{Round: "0"}))
|
|
}
|