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-01-20 22:06:56 -06:00
|
|
|
type Player struct {
|
2024-01-20 23:56:03 -06:00
|
|
|
ID player.ID
|
2024-01-20 22:52:44 -06:00
|
|
|
HP int8
|
|
|
|
Items [8]Item
|
|
|
|
Cuffs CuffState
|
|
|
|
}
|
|
|
|
|
2024-01-21 00:25:51 -06:00
|
|
|
func (p *Player) StartRound(hp int8) {
|
|
|
|
p.HP = hp
|
2024-01-20 22:52:44 -06:00
|
|
|
clear(p.Items[:])
|
2024-01-20 22:06:56 -06:00
|
|
|
}
|
|
|
|
|
2024-01-21 00:25:51 -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-20 22:52:44 -06:00
|
|
|
k := slices.Index(p.Items[:], ItemNone)
|
|
|
|
if k < 0 {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
p.Items[k] = NewItem(rng)
|
2024-01-20 22:06:56 -06:00
|
|
|
}
|
2024-01-21 01:09:36 -06:00
|
|
|
p.Cuffs = Uncuffed
|
2024-01-20 22:06:56 -06:00
|
|
|
}
|
2024-01-20 22:52:44 -06:00
|
|
|
|
2024-01-21 00:56:45 -06:00
|
|
|
func (p *Player) DTO() serve.Player {
|
|
|
|
r := serve.Player{
|
|
|
|
HP: p.HP,
|
|
|
|
Items: make([]string, 0, 8),
|
|
|
|
Cuffs: p.Cuffs != Uncuffed,
|
|
|
|
}
|
|
|
|
for _, i := range p.Items {
|
|
|
|
s := i.String()
|
|
|
|
if s == "" {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
r.Items = append(r.Items, s)
|
|
|
|
}
|
|
|
|
return r
|
|
|
|
}
|
|
|
|
|
2024-01-20 22:52:44 -06:00
|
|
|
type CuffState uint8
|
|
|
|
|
|
|
|
const (
|
|
|
|
Uncuffed CuffState = iota
|
|
|
|
Cuffed
|
|
|
|
CuffedSkip
|
|
|
|
)
|
2024-01-21 00:13:23 -06:00
|
|
|
|
|
|
|
func (c CuffState) NextState() CuffState {
|
|
|
|
var m = [...]CuffState{Uncuffed, Uncuffed, Cuffed}
|
|
|
|
return m[c]
|
|
|
|
}
|