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
level_ambition[i] = level_ambition[i-1] * 1.1
level_ambition[i] = level_ambition[i-1] * 1.05
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]