read game state on startup
This commit is contained in:
parent
ff87243628
commit
d783ceba93
@ -109,21 +109,21 @@ export default {
|
|||||||
&-row {
|
&-row {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
animation: finals-text 1s ease forwards;
|
animation: finals-text 1s ease forwards;
|
||||||
&:nth-child(1) { animation-delay: 4s; }
|
&:nth-child(1) { animation-delay: 5.5s; }
|
||||||
&:nth-child(2) { animation-delay: 3.8s; }
|
&:nth-child(2) { animation-delay: 4.5s; }
|
||||||
&:nth-child(3) { animation-delay: 3.6s; }
|
&:nth-child(3) { animation-delay: 3.5s; }
|
||||||
&:nth-child(4) { animation-delay: 3.4s; }
|
&:nth-child(4) { animation-delay: 2.4s; }
|
||||||
&:nth-child(5) { animation-delay: 3.2s; }
|
&:nth-child(5) { animation-delay: 2.2s; }
|
||||||
&:nth-child(6) { animation-delay: 3s; }
|
&:nth-child(6) { animation-delay: 2s; }
|
||||||
&:nth-child(7) { animation-delay: 2.8s; }
|
&:nth-child(7) { animation-delay: 1.9s; }
|
||||||
&:nth-child(8) { animation-delay: 2.6s; }
|
&:nth-child(8) { animation-delay: 1.8s; }
|
||||||
&:nth-child(9) { animation-delay: 2.4s; }
|
&:nth-child(9) { animation-delay: 1.7s; }
|
||||||
&:nth-child(10) { animation-delay: 2.2s; }
|
&:nth-child(10) { animation-delay: 1.6s; }
|
||||||
&:nth-child(11) { animation-delay: 2s; }
|
&:nth-child(11) { animation-delay: 1.5s; }
|
||||||
&:nth-child(12) { animation-delay: 1.8s; }
|
&:nth-child(12) { animation-delay: 1.4s; }
|
||||||
&:nth-child(13) { animation-delay: 1.6s; }
|
&:nth-child(13) { animation-delay: 1.3s; }
|
||||||
&:nth-child(14) { animation-delay: 1.4s; }
|
&:nth-child(14) { animation-delay: 1.2s; }
|
||||||
&:nth-child(15) { animation-delay: 1.2s; }
|
&:nth-child(15) { animation-delay: 1.1s; }
|
||||||
&:nth-child(16) { animation-delay: 1s; }
|
&:nth-child(16) { animation-delay: 1s; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<nav v-if="isGamemaster" class="gamecontrols">
|
<nav v-if="isGamemaster" class="gamecontrols">
|
||||||
<button @click="startGame">Start</button>
|
<button @click="startGame">Start</button>
|
||||||
<button @click="resetGame">Reset Round</button>
|
|
||||||
<button @click="continueGame">Continue</button>
|
<button @click="continueGame">Continue</button>
|
||||||
|
<button @click="resetGame">Reset Round</button>
|
||||||
<button @click="finishGame">Finish Game</button>
|
<button @click="finishGame">Finish Game</button>
|
||||||
</nav>
|
</nav>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
package application
|
|
||||||
|
|
||||||
func (app *Application) addUsersToGames() {
|
|
||||||
for _, usr := range app.users {
|
|
||||||
if gm, err := app.GetGameById(usr.GetGameId()); err != nil {
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
gm.AddPlayer(usr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -21,7 +21,6 @@ func NewApplication(config applicationConfig.ApplicationConfig) (*Application, e
|
|||||||
if err := app.loadGames(); err != nil {
|
if err := app.loadGames(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
app.addUsersToGames()
|
|
||||||
|
|
||||||
go app.expireInactivePlayersThread()
|
go app.expireInactivePlayersThread()
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ func (app *Application) ContinueGame(usr *user.User, w http.ResponseWriter, r *h
|
|||||||
|
|
||||||
gm.ContinueGame()
|
gm.ContinueGame()
|
||||||
|
|
||||||
if err := app.saveGame(gm); err != nil {
|
if err := app.saveGameState(gm); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ func (app *Application) expireInactivePlayers() []string {
|
|||||||
|
|
||||||
for usrId, atime := range app.playerATime {
|
for usrId, atime := range app.playerATime {
|
||||||
elapsed := now.Sub(atime)
|
elapsed := now.Sub(atime)
|
||||||
if elapsed.Seconds() > 10 {
|
if elapsed.Seconds() > 5 {
|
||||||
delete(app.playerATime, usrId)
|
delete(app.playerATime, usrId)
|
||||||
removedIds = append(removedIds, usrId)
|
removedIds = append(removedIds, usrId)
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ func (app *Application) FinishGame(usr *user.User, w http.ResponseWriter, r *htt
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := app.saveGame(gm); err != nil {
|
if err := app.saveGameState(gm); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
server/src/application/loadGameState.go
Normal file
23
server/src/application/loadGameState.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package application
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"sirlab.de/go/knyt/game"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (app *Application) loadGameState(gm *game.Game, fileName string) error {
|
||||||
|
jsonBytes, err := os.ReadFile(fileName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var stateJson game.GameStateJson
|
||||||
|
if err := json.Unmarshal(jsonBytes, &stateJson); err != nil {
|
||||||
|
return fmt.Errorf("%s: %v\n", fileName, err)
|
||||||
|
} else {
|
||||||
|
gm.SetGameState(&stateJson)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
@ -16,8 +16,8 @@ func (app Application) loadGames() error {
|
|||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
id := file.Name()
|
id := file.Name()
|
||||||
gameDirName := path.Join(dirName, id)
|
gameDirName := path.Join(dirName, id)
|
||||||
fileName := path.Join(gameDirName, "game.json")
|
gameFileName := path.Join(gameDirName, "game.json")
|
||||||
gm, errGame := game.NewGameFromFile(id, fileName)
|
gm, errGame := game.NewGameFromFile(id, gameFileName)
|
||||||
if errGame != nil {
|
if errGame != nil {
|
||||||
return errGame
|
return errGame
|
||||||
}
|
}
|
||||||
@ -26,6 +26,14 @@ func (app Application) loadGames() error {
|
|||||||
if errStatement != nil {
|
if errStatement != nil {
|
||||||
return errStatement
|
return errStatement
|
||||||
}
|
}
|
||||||
|
for _, usr := range app.users {
|
||||||
|
if usr.GetGameId() == id {
|
||||||
|
gm.AddPlayer(usr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
app.loadGameState(gm, path.Join(gameDirName, "state.json"))
|
||||||
|
|
||||||
|
go gm.StartEngine()
|
||||||
|
|
||||||
app.addGame(gm)
|
app.addGame(gm)
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
"sirlab.de/go/knyt/game"
|
"sirlab.de/go/knyt/game"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (app *Application) saveGame(gm *game.Game) error {
|
func (app *Application) saveGameState(gm *game.Game) error {
|
||||||
gameJson := gm.GetGameState()
|
gameJson := gm.GetGameState()
|
||||||
jsonString, errMarshal := json.MarshalIndent(gameJson, "", " ")
|
jsonString, errMarshal := json.MarshalIndent(gameJson, "", " ")
|
||||||
if errMarshal != nil {
|
if errMarshal != nil {
|
@ -27,12 +27,14 @@ func NewGameFromFile(id, fileName string) (*Game, error) {
|
|||||||
quotes: make(map[string]*quote.Quote, 0),
|
quotes: make(map[string]*quote.Quote, 0),
|
||||||
}
|
}
|
||||||
|
|
||||||
go gm.eng.Run(gm.populateSyncDataCb)
|
|
||||||
|
|
||||||
return &gm, nil
|
return &gm, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gm *Game) StartEngine() {
|
||||||
|
gm.eng.Run(gm.populateSyncDataCb)
|
||||||
|
}
|
||||||
|
|
||||||
func (gm *Game) GetId() string {
|
func (gm *Game) GetId() string {
|
||||||
gm.mu.Lock()
|
gm.mu.Lock()
|
||||||
defer gm.mu.Unlock()
|
defer gm.mu.Unlock()
|
||||||
|
26
server/src/game/setGameState.go
Normal file
26
server/src/game/setGameState.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package game
|
||||||
|
|
||||||
|
func (gm *Game) SetGameState(stateJson *GameStateJson) {
|
||||||
|
for id, score := range stateJson.Scores {
|
||||||
|
gm.setScore(id, score)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, id := range stateJson.QuotesPlayed {
|
||||||
|
if quote, err := gm.getQuoteById(id); err != nil {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
quote.SetIsPlayed()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gm *Game) setScore(id string, score int) {
|
||||||
|
gm.mu.Lock()
|
||||||
|
defer gm.mu.Unlock()
|
||||||
|
|
||||||
|
pi := gm.players[id]
|
||||||
|
if pi.id == id {
|
||||||
|
pi.score = score
|
||||||
|
gm.players[id] = pi
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user