58 lines
846 B
Go
58 lines
846 B
Go
package game
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"git.sunturtle.xyz/studio/shotgun/player"
|
|
"git.sunturtle.xyz/studio/shotgun/serve"
|
|
)
|
|
|
|
type playerState struct {
|
|
id player.ID
|
|
hp int8
|
|
items [8]item
|
|
cuffs cuffState
|
|
}
|
|
|
|
func (p *playerState) startRound(hp int8) {
|
|
p.hp = hp
|
|
clear(p.items[:])
|
|
}
|
|
|
|
func (p *playerState) startGame(rng *xoshiro, items int) {
|
|
for i := 0; i < items; i++ {
|
|
k := slices.Index(p.items[:], itemNone)
|
|
if k < 0 {
|
|
break
|
|
}
|
|
p.items[k] = newItem(rng)
|
|
}
|
|
p.cuffs = uncuffed
|
|
}
|
|
|
|
func (p *playerState) dto() serve.Player {
|
|
r := serve.Player{
|
|
HP: p.hp,
|
|
Cuffs: p.cuffs != uncuffed,
|
|
}
|
|
for k, i := range p.items {
|
|
r.Items[k] = i.String()
|
|
}
|
|
return r
|
|
}
|
|
|
|
type cuffState uint8
|
|
|
|
const (
|
|
uncuffed cuffState = iota
|
|
cuffed
|
|
cuffedSkip
|
|
)
|
|
|
|
func (c cuffState) nextState() cuffState {
|
|
if c != uncuffed {
|
|
c--
|
|
}
|
|
return c
|
|
}
|