shotgun/game/player.go

58 lines
829 B
Go
Raw Permalink 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"
)
type playerState struct {
2024-01-21 04:16:48 -06:00
id player.ID
hp int8
items [8]item
cuffs cuffState
}
func (p *playerState) 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
}
2024-04-07 15:14:57 -05:00
func (p *playerState) startGame(items int) {
2024-01-20 22:06:56 -06:00
for i := 0; i < items; i++ {
k := slices.Index(p.items[:], itemNone)
if k < 0 {
break
}
2024-04-07 15:14:57 -05:00
p.items[k] = newItem()
2024-01-20 22:06:56 -06:00
}
p.cuffs = uncuffed
2024-01-20 22:06:56 -06:00
}
func (p *playerState) dto() serve.Player {
2024-01-21 00:56:45 -06:00
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
}
type cuffState uint8
const (
uncuffed cuffState = iota
cuffed
cuffedSkip
)
2024-01-21 00:13:23 -06:00
func (c cuffState) nextState() cuffState {
if c != uncuffed {
2024-02-03 13:36:06 -06:00
c--
}
return c
2024-01-21 00:13:23 -06:00
}