Skip to content

Commit

Permalink
store|client: Added missing changes on the callers
Browse files Browse the repository at this point in the history
For the concurrency fix
  • Loading branch information
xescugc committed Nov 8, 2023
1 parent dc4e795 commit d85c249
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 12 deletions.
7 changes: 4 additions & 3 deletions client/hud.go
Original file line number Diff line number Diff line change
Expand Up @@ -309,11 +309,12 @@ func (hs *HUDStore) Draw(screen *ebiten.Image) {
screen.DrawImage(hst.SelectedTower.Image().(*ebiten.Image), op)
}

ps := hs.game.Store.Players.GetState().(store.PlayersState)
ebitenutil.DebugPrintAt(screen, fmt.Sprintf("Income Timer: %ds", ps.IncomeTimer), 0, 0)
psit := hs.game.Store.Players.GetState().(store.PlayersState).IncomeTimer
players := hs.game.Store.Players.GetPlayers()
ebitenutil.DebugPrintAt(screen, fmt.Sprintf("Income Timer: %ds", psit), 0, 0)
var pcount = 1
var sortedPlayers = make([]*store.Player, 0, 0)
for _, p := range ps.Players {
for _, p := range players {
sortedPlayers = append(sortedPlayers, p)
}
sort.Slice(sortedPlayers, func(i, j int) bool { return sortedPlayers[i].LineID < sortedPlayers[j].LineID })
Expand Down
10 changes: 5 additions & 5 deletions client/lobby.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@ func (l *Lobby) Update() error {
}
}

players := l.Store.Players.GetState().(store.PlayersState)
if len(players.Players) > 1 {
players := l.Store.Players.GetPlayers()
if len(players) > 1 {
allReady := true
for _, p := range players.Players {
for _, p := range players {
if !p.Ready {
allReady = false
break
Expand All @@ -83,11 +83,11 @@ func (l *Lobby) Update() error {

func (l *Lobby) Draw(screen *ebiten.Image) {
cs := l.Camera.GetState().(CameraState)
ps := l.Store.Players.GetState().(store.PlayersState)
ps := l.Store.Players.GetPlayers()
text.Draw(screen, "LOBBY", normalFont, int(cs.W/2), int(cs.H/2), color.White)
var pcount = 1
var sortedPlayers = make([]*store.Player, 0, 0)
for _, p := range ps.Players {
for _, p := range ps {
sortedPlayers = append(sortedPlayers, p)
}
sort.Slice(sortedPlayers, func(i, j int) bool { return sortedPlayers[i].LineID < sortedPlayers[j].LineID })
Expand Down
8 changes: 4 additions & 4 deletions store/map.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,10 +173,10 @@ func (m *Map) Reduce(state, a interface{}) interface{} {

switch act.Type {
case action.StartGame:
players := m.store.Players.GetState().(PlayersState)
if len(players.Players) > 1 {
players := m.store.Players.GetPlayers()
if len(players) > 1 {
allReady := true
for _, p := range players.Players {
for _, p := range players {
if !p.Ready {
allReady = false
break
Expand All @@ -188,7 +188,7 @@ func (m *Map) Reduce(state, a interface{}) interface{} {
//
// If all players are ready then the map must be set
if allReady {
mstate.Players = len(m.store.Players.GetState().(PlayersState).Players)
mstate.Players = len(players)
mstate.Image, ok = mapImages[mstate.Players]
if !ok {
log.Fatalf("The map for the number of players %d is not available", mstate.Players)
Expand Down
25 changes: 25 additions & 0 deletions store/players.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package store

import (
"sync"

"github.com/xescugc/go-flux"
"github.com/xescugc/ltw/action"
"github.com/xescugc/ltw/tower"
Expand All @@ -13,6 +15,8 @@ const (

type Players struct {
*flux.ReduceStore

mxPlayers sync.RWMutex
}

type PlayersState struct {
Expand Down Expand Up @@ -44,7 +48,21 @@ func NewPlayers(d *flux.Dispatcher) *Players {
return p
}

// GetPlayers returns the players list and it's meant for reading only purposes
func (ps *Players) GetPlayers() []*Player {
ps.mxPlayers.RLock()
defer ps.mxPlayers.RUnlock()
mplayers := ps.GetState().(PlayersState)
players := make([]*Player, 0, len(mplayers.Players))
for _, p := range mplayers.Players {
players = append(players, p)
}
return players
}

func (ps *Players) GetCurrentPlayer() Player {
ps.mxPlayers.RLock()
defer ps.mxPlayers.RUnlock()
for _, p := range ps.GetState().(PlayersState).Players {
if p.Current {
return *p
Expand All @@ -54,11 +72,15 @@ func (ps *Players) GetCurrentPlayer() Player {
}

func (ps *Players) GetPlayerByID(id string) Player {
ps.mxPlayers.RLock()
defer ps.mxPlayers.RUnlock()
p, _ := ps.GetState().(PlayersState).Players[id]
return *p
}

func (ps *Players) GetByLineID(lid int) Player {
ps.mxPlayers.RLock()
defer ps.mxPlayers.RUnlock()
for _, p := range ps.GetState().(PlayersState).Players {
if p.LineID == lid {
return *p
Expand All @@ -78,6 +100,9 @@ func (ps *Players) Reduce(state, a interface{}) interface{} {
return state
}

ps.mxPlayers.Lock()
defer ps.mxPlayers.Unlock()

switch act.Type {
case action.AddPlayer:
pstate.Players[act.AddPlayer.ID] = &Player{
Expand Down

0 comments on commit d85c249

Please sign in to comment.