This repository has been archived on 2024-03-23. You can view files and clone it, but cannot push or open issues or pull requests.
ambition-legacy/frontend/player/player.go
Muhammad Nauman Raza a8e3d0b291 refactor(frontend): everything
The player.go and ui.go files have been separated into their own
separate packages.
Additionally, all go.mod files have been modified to point to local
directories.

This change should not only clean up the frontend codebase, but also
make it easier to send/recieve data from the backend (at least
regarding the player)
2023-07-27 12:57:11 +01:00

85 lines
2 KiB
Go

package player
import ()
// The player struct
type Player struct {
Health int
MaxHealth int
Defence int
Level int
Exp float32
NextExp float32
Ambition float32
MaxAmbition float32
}
// Create the maps for the level/(max) ambition gates
var level_gates = make(map[int]float32)
var level_ambition = make(map[int]float32)
// TODO(midnadimple): Move player initialization to server upon login
func GetPlayer() Player {
return Player{
Health: 100,
MaxHealth: 100,
Defence: 0,
Level: 1,
Exp: 0.0,
NextExp: 0.0,
Ambition: 0.0, // NOTE(midnadimple): In the future this will be affected by player activity
MaxAmbition: level_ambition[1], // NOTE(midnadimple): In the future this will be affected by player activity
}
}
// Formula for XP gain - extremely simple
func gain(basexp float32, modifier float32) float32 {
gain := basexp * modifier
return gain
}
// Update the player
func (p *Player) Update() {
// TODO(midnadimple): update health upon damage
// Auto-generate the level gates
level_gates[1] = 500
for i := 0; i <= 1000; i++ {
if i >= 2 {
switch {
case i <= 10:
level_gates[i] = level_gates[i-1] * 1.2
case (i <= 100) && (i > 10):
level_gates[i] = level_gates[i-1] * 1.1
case (i <= 1000) && (i > 100):
level_gates[i] = level_gates[i-1] * 1.005
}
}
}
// Auto-generate maximum ambition gates
level_ambition[1] = 10
for i := 0; i <= 1000; i++ {
if i >= 2 {
switch {
case i <= 10:
level_ambition[i] = level_ambition[i-1] * 1.1
case (i <= 100) && (i > 10):
level_ambition[i] = level_ambition[i-1] * 1.05
case (i <= 1000) && (i > 100):
level_ambition[i] = level_ambition[i-1] * 1.00005
}
}
}
// Set the XP needed for the player to reach the next level
p.NextExp = level_gates[p.Level]
// Set the XP to 0 and increase both the level and max ambition on level up
if p.Exp >= level_gates[p.Level] {
p.Exp = 0.0
p.Level += 1
p.MaxAmbition = level_ambition[p.Level]
}
}