starter repo
This commit is contained in:
96
internal/gamelogic/gamestate.go
Normal file
96
internal/gamelogic/gamestate.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package gamelogic
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
type GameState struct {
|
||||
Player Player
|
||||
Paused bool
|
||||
mu *sync.RWMutex
|
||||
}
|
||||
|
||||
func NewGameState(username string) *GameState {
|
||||
return &GameState{
|
||||
Player: Player{
|
||||
Username: username,
|
||||
Units: map[int]Unit{},
|
||||
},
|
||||
Paused: false,
|
||||
mu: &sync.RWMutex{},
|
||||
}
|
||||
}
|
||||
|
||||
func (gs *GameState) resumeGame() {
|
||||
gs.mu.Lock()
|
||||
defer gs.mu.Unlock()
|
||||
gs.Paused = false
|
||||
}
|
||||
|
||||
func (gs *GameState) pauseGame() {
|
||||
gs.mu.Lock()
|
||||
defer gs.mu.Unlock()
|
||||
gs.Paused = true
|
||||
}
|
||||
|
||||
func (gs *GameState) isPaused() bool {
|
||||
gs.mu.RLock()
|
||||
defer gs.mu.RUnlock()
|
||||
return gs.Paused
|
||||
}
|
||||
|
||||
func (gs *GameState) addUnit(u Unit) {
|
||||
gs.mu.Lock()
|
||||
defer gs.mu.Unlock()
|
||||
gs.Player.Units[u.ID] = u
|
||||
}
|
||||
|
||||
func (gs *GameState) removeUnitsInLocation(loc Location) {
|
||||
gs.mu.Lock()
|
||||
defer gs.mu.Unlock()
|
||||
for k, v := range gs.Player.Units {
|
||||
if v.Location == loc {
|
||||
delete(gs.Player.Units, k)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (gs *GameState) UpdateUnit(u Unit) {
|
||||
gs.mu.Lock()
|
||||
defer gs.mu.Unlock()
|
||||
gs.Player.Units[u.ID] = u
|
||||
}
|
||||
|
||||
func (gs *GameState) GetUsername() string {
|
||||
return gs.Player.Username
|
||||
}
|
||||
|
||||
func (gs *GameState) getUnitsSnap() []Unit {
|
||||
gs.mu.RLock()
|
||||
defer gs.mu.RUnlock()
|
||||
Units := []Unit{}
|
||||
for _, v := range gs.Player.Units {
|
||||
Units = append(Units, v)
|
||||
}
|
||||
return Units
|
||||
}
|
||||
|
||||
func (gs *GameState) GetUnit(id int) (Unit, bool) {
|
||||
gs.mu.RLock()
|
||||
defer gs.mu.RUnlock()
|
||||
u, ok := gs.Player.Units[id]
|
||||
return u, ok
|
||||
}
|
||||
|
||||
func (gs *GameState) GetPlayerSnap() Player {
|
||||
gs.mu.RLock()
|
||||
defer gs.mu.RUnlock()
|
||||
Units := map[int]Unit{}
|
||||
for k, v := range gs.Player.Units {
|
||||
Units[k] = v
|
||||
}
|
||||
return Player{
|
||||
Username: gs.Player.Username,
|
||||
Units: Units,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user