You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.6 KiB
Go

package lupus
import (
"log"
"github.com/aziis98/lupus-lite/util"
)
var Ruleset1 = Ruleset{
Start: func(config PartitaConfig) PartitaState {
state := PartitaState{
Players: make([]Player, len(config.Players)),
Time: 0,
Actions: []Action{},
}
// Creo uno slice con il numero di ruoli in base al numero corrispondente per ruolo in "config.RoleCounts"
ruoli := make([]Ruolo, 0, len(config.Players))
for ruolo, count := range config.RoleCounts {
ruoli = append(ruoli, util.RepeatedSlice(ruolo, count)...)
}
// ed i rimanenti sono contadini
for len(ruoli) < len(config.Players) { // riempi il resto dei ruoli con contadini
ruoli = append(ruoli, Contadino)
}
// mischio la lista di ruoli
util.Shuffle(ruoli)
for i, username := range config.Players {
log.Printf(`Al giocatore %q è stato assegnato il ruolo di %q`, username, ruoli[i].Nome)
state.Players[i] = Player{
Username: username,
Ruolo: ruoli[i],
Vivo: true,
}
}
return state
},
Update: func(state PartitaState, responses []PlayerMessage) (PartitaState, []PlayerCommand) {
if state.Time == 0 {
ruoliAgenti := map[Ruolo]struct{}{
Fattucchiera: {},
Veggente: {},
}
playerCommands := []PlayerCommand{}
for _, player := range state.Players {
if _, present := ruoliAgenti[player.Ruolo]; present {
if cmd, noop := RuoloMainCmd(player, state); !noop {
playerCommands = append(playerCommands, cmd)
}
}
}
state.Time++
return state, playerCommands
} else {
}
return state, []PlayerCommand{}
},
}