send player state to clients
This commit is contained in:
parent
597aa65834
commit
5d5c4a68aa
@ -23,7 +23,8 @@ export default {
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background-color: #002040;
|
max-height: 100%;
|
||||||
|
background-color: rgba(0, 32, 64, 0.75);
|
||||||
max-width: 600px;
|
max-width: 600px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
|
||||||
|
@ -22,13 +22,5 @@ func (app *Application) SaveSelection(usr *user.User, w http.ResponseWriter, r *
|
|||||||
}
|
}
|
||||||
|
|
||||||
selection := r.URL.Query().Get("selection")
|
selection := r.URL.Query().Get("selection")
|
||||||
|
gm.SaveSelection(usr, selection)
|
||||||
if err := gm.SaveSelection(usr, selection); err != nil {
|
|
||||||
w.WriteHeader(http.StatusForbidden)
|
|
||||||
fmt.Fprintf(w, "forbidden")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Fprintf(w, "ok")
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
@ -61,9 +61,30 @@ func (gm *Game) getRoundInfo() *syncdata.RoundInfo {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
playerState := make([]syncdata.PlayerState, 0)
|
||||||
|
for id, playerInfo := range gm.players {
|
||||||
|
if !playerInfo.isPlaying {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
state := syncdata.PLAYER_STATE_UNDECIDED
|
||||||
|
selection := gm.round.selection[id]
|
||||||
|
if len(selection) > 0 {
|
||||||
|
state = syncdata.PLAYER_STATE_DECIDED
|
||||||
|
} else if playerInfo.isIdle {
|
||||||
|
state = syncdata.PLAYER_STATE_IDLE
|
||||||
|
}
|
||||||
|
|
||||||
|
playerState = append(playerState, syncdata.PlayerState{
|
||||||
|
Id: id,
|
||||||
|
State: state,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
roundInfo := syncdata.RoundInfo{
|
roundInfo := syncdata.RoundInfo{
|
||||||
Quote: quote.GetQuote(),
|
Quote: quote.GetQuote(),
|
||||||
Sources: sources,
|
Sources: sources,
|
||||||
|
PlayerState: playerState,
|
||||||
}
|
}
|
||||||
|
|
||||||
return &roundInfo
|
return &roundInfo
|
||||||
|
@ -26,7 +26,9 @@ func (gm *Game) setupRound() {
|
|||||||
gm.mu.Lock()
|
gm.mu.Lock()
|
||||||
defer gm.mu.Unlock()
|
defer gm.mu.Unlock()
|
||||||
|
|
||||||
gm.round.selection = make(map[string]string, 0)
|
gm.round = Round{
|
||||||
|
selection: make(map[string]string, 0),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gm *Game) selectQuote() {
|
func (gm *Game) selectQuote() {
|
||||||
|
@ -1,22 +1,17 @@
|
|||||||
package game
|
package game
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"sirlab.de/go/knyt/user"
|
"sirlab.de/go/knyt/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (gm *Game) SaveSelection(usr *user.User, selection string) error {
|
func (gm *Game) SaveSelection(usr *user.User, selection string) {
|
||||||
|
gm.updateSelection(usr, selection)
|
||||||
|
gm.notifyClients()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gm *Game) updateSelection(usr *user.User, selection string) {
|
||||||
gm.mu.Lock()
|
gm.mu.Lock()
|
||||||
defer gm.mu.Unlock()
|
defer gm.mu.Unlock()
|
||||||
|
|
||||||
id := usr.GetId()
|
gm.round.selection[usr.GetId()] = selection
|
||||||
if gm.players[id].id != id {
|
|
||||||
return fmt.Errorf("invalid user")
|
|
||||||
}
|
|
||||||
|
|
||||||
gm.round.selection[id] = selection
|
|
||||||
fmt.Printf("selections: %d\n", len(gm.round.selection))
|
|
||||||
|
|
||||||
fmt.Printf("SaveSelection: \"%s\"\n", selection)
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
package syncdata
|
package syncdata
|
||||||
|
|
||||||
|
const (
|
||||||
|
PLAYER_STATE_IDLE = "idle"
|
||||||
|
PLAYER_STATE_UNDECIDED = "undecided"
|
||||||
|
PLAYER_STATE_DECIDED = "decided"
|
||||||
|
)
|
||||||
|
|
||||||
type PlayerInfo struct {
|
type PlayerInfo struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
@ -11,9 +17,15 @@ type SourceInfo struct {
|
|||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type PlayerState struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
State string `json:"state"`
|
||||||
|
}
|
||||||
|
|
||||||
type RoundInfo struct {
|
type RoundInfo struct {
|
||||||
Quote string `json:"quote"`
|
Quote string `json:"quote"`
|
||||||
Sources []SourceInfo `json:"sources"`
|
Sources []SourceInfo `json:"sources"`
|
||||||
|
PlayerState []PlayerState `json:"state"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type GameInfo struct {
|
type GameInfo struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user