shotgun/game/player.go

64 lines
978 B
Go
Raw Normal View History

2024-01-20 22:06:56 -06:00
package game
import (
"slices"
"git.sunturtle.xyz/studio/shotgun/player"
2024-01-21 00:56:45 -06:00
"git.sunturtle.xyz/studio/shotgun/serve"
)
2024-01-20 22:06:56 -06:00
type Player struct {
2024-01-21 04:16:48 -06:00
id player.ID
hp int8
items [8]Item
cuffs CuffState
}
func (p *Player) StartRound(hp int8) {
2024-01-21 04:16:48 -06:00
p.hp = hp
clear(p.items[:])
2024-01-20 22:06:56 -06:00
}
func (p *Player) StartGroup(rng *RNG, items int) {
2024-01-20 22:06:56 -06:00
for i := 0; i < items; i++ {
2024-01-21 04:16:48 -06:00
k := slices.Index(p.items[:], ItemNone)
if k < 0 {
break
}
2024-01-21 04:16:48 -06:00
p.items[k] = NewItem(rng)
2024-01-20 22:06:56 -06:00
}
2024-01-21 04:16:48 -06:00
p.cuffs = Uncuffed
2024-01-20 22:06:56 -06:00
}
2024-01-21 00:56:45 -06:00
func (p *Player) DTO() serve.Player {
r := serve.Player{
2024-01-21 04:16:48 -06:00
HP: p.hp,
Cuffs: p.cuffs != Uncuffed,
2024-01-21 00:56:45 -06:00
}
2024-01-21 12:56:12 -06:00
for k, i := range p.items {
r.Items[k] = i.String()
2024-01-21 00:56:45 -06:00
}
return r
}
2024-01-21 19:53:08 -06:00
// Is returns whether the player has the same ID as other.
// This exists for tests.
func (p *Player) Is(other *Player) bool {
return p.id == other.id
}
type CuffState uint8
const (
Uncuffed CuffState = iota
Cuffed
CuffedSkip
)
2024-01-21 00:13:23 -06:00
func (c CuffState) NextState() CuffState {
2024-02-03 13:36:06 -06:00
if c != Uncuffed {
c--
}
return c
2024-01-21 00:13:23 -06:00
}