2024-01-20 22:06:56 -06:00
|
|
|
package game
|
|
|
|
|
2024-01-20 23:56:03 -06:00
|
|
|
import (
|
|
|
|
"slices"
|
2024-01-20 22:52:44 -06:00
|
|
|
|
2024-01-20 23:56:03 -06:00
|
|
|
"git.sunturtle.xyz/studio/shotgun/player"
|
2024-01-21 00:56:45 -06:00
|
|
|
"git.sunturtle.xyz/studio/shotgun/serve"
|
2024-01-20 23:56:03 -06:00
|
|
|
)
|
2024-01-20 22:52:44 -06:00
|
|
|
|
2024-02-04 10:37:15 -06:00
|
|
|
type playerState struct {
|
2024-01-21 04:16:48 -06:00
|
|
|
id player.ID
|
|
|
|
hp int8
|
2024-02-04 10:37:15 -06:00
|
|
|
items [8]item
|
|
|
|
cuffs cuffState
|
2024-01-20 22:52:44 -06:00
|
|
|
}
|
|
|
|
|
2024-02-04 10:37:15 -06:00
|
|
|
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-02-04 10:37:15 -06:00
|
|
|
func (p *playerState) startGame(rng *xoshiro, items int) {
|
2024-01-20 22:06:56 -06:00
|
|
|
for i := 0; i < items; i++ {
|
2024-02-04 10:37:15 -06:00
|
|
|
k := slices.Index(p.items[:], itemNone)
|
2024-01-20 22:52:44 -06:00
|
|
|
if k < 0 {
|
|
|
|
break
|
|
|
|
}
|
2024-02-04 10:37:15 -06:00
|
|
|
p.items[k] = newItem(rng)
|
2024-01-20 22:06:56 -06:00
|
|
|
}
|
2024-02-04 10:37:15 -06:00
|
|
|
p.cuffs = uncuffed
|
2024-01-20 22:06:56 -06:00
|
|
|
}
|
2024-01-20 22:52:44 -06:00
|
|
|
|
2024-02-04 10:37:15 -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,
|
2024-02-04 10:37:15 -06:00
|
|
|
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-02-04 10:37:15 -06:00
|
|
|
type cuffState uint8
|
2024-01-20 22:52:44 -06:00
|
|
|
|
|
|
|
const (
|
2024-02-04 10:37:15 -06:00
|
|
|
uncuffed cuffState = iota
|
|
|
|
cuffed
|
|
|
|
cuffedSkip
|
2024-01-20 22:52:44 -06:00
|
|
|
)
|
2024-01-21 00:13:23 -06:00
|
|
|
|
2024-02-04 10:37:15 -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
|
|
|
}
|