game stats shows planes and population
This commit is contained in:
@@ -152,10 +152,25 @@ func GameState(configure func(*Param)) (s game.State, err error) {
|
||||
Players: make([]game.PlayerState, len(g.Race)),
|
||||
}
|
||||
|
||||
planetCount := make(map[uuid.UUID]uint)
|
||||
population := make(map[uuid.UUID]game.Float)
|
||||
|
||||
for i := range g.Map.Planet {
|
||||
p := &g.Map.Planet[i]
|
||||
if p.Owner == nil {
|
||||
continue
|
||||
}
|
||||
owner := *p.Owner
|
||||
planetCount[owner] += 1
|
||||
population[owner] += p.Population
|
||||
}
|
||||
|
||||
for i := range g.Race {
|
||||
r := &g.Race[i]
|
||||
result.Players[i].ID = r.ID
|
||||
result.Players[i].Name = r.Name
|
||||
result.Players[i].RaceName = r.Name
|
||||
result.Players[i].Planets = planetCount[r.ID]
|
||||
result.Players[i].Population = population[r.ID]
|
||||
result.Players[i].Extinct = r.Extinct
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,9 @@ type State struct {
|
||||
}
|
||||
|
||||
type PlayerState struct {
|
||||
ID uuid.UUID
|
||||
Name string
|
||||
Extinct bool
|
||||
ID uuid.UUID
|
||||
RaceName string
|
||||
Planets uint
|
||||
Population Float
|
||||
Extinct bool
|
||||
}
|
||||
|
||||
@@ -99,7 +99,9 @@ func stateResponse(s game.State) rest.StateResponse {
|
||||
}
|
||||
for i := range s.Players {
|
||||
result.Players[i].ID = s.Players[i].ID
|
||||
result.Players[i].Name = s.Players[i].Name
|
||||
result.Players[i].RaceName = s.Players[i].RaceName
|
||||
result.Players[i].Planets = s.Players[i].Planets
|
||||
result.Players[i].Population = s.Players[i].Population.F()
|
||||
result.Players[i].Extinct = s.Players[i].Extinct
|
||||
}
|
||||
return *result
|
||||
|
||||
@@ -9,14 +9,14 @@ import (
|
||||
)
|
||||
|
||||
func InitHandler(c *gin.Context, executor CommandExecutor) {
|
||||
var init rest.Init
|
||||
var init rest.InitRequest
|
||||
if errorResponse(c, c.ShouldBindJSON(&init)) {
|
||||
return
|
||||
}
|
||||
|
||||
races := make([]string, len(init.Races))
|
||||
for i := range init.Races {
|
||||
races[i] = init.Races[i].Name
|
||||
races[i] = init.Races[i].RaceName
|
||||
}
|
||||
|
||||
s, err := executor.GenerateGame(races)
|
||||
|
||||
@@ -68,12 +68,12 @@ func limitTestingRouter() *gin.Engine {
|
||||
return r
|
||||
}
|
||||
|
||||
func generateInitRequest(races int) rest.Init {
|
||||
request := rest.Init{
|
||||
Races: make([]rest.Race, races),
|
||||
func generateInitRequest(races int) rest.InitRequest {
|
||||
request := rest.InitRequest{
|
||||
Races: make([]rest.InitRace, races),
|
||||
}
|
||||
for i := range request.Races {
|
||||
request.Races[i] = rest.Race{Name: raceName(i)}
|
||||
request.Races[i] = rest.InitRace{RaceName: raceName(i)}
|
||||
}
|
||||
return request
|
||||
}
|
||||
|
||||
@@ -50,7 +50,9 @@ func TestGetStatus(t *testing.T) {
|
||||
assert.Len(t, stateResponse.Players, 10)
|
||||
for i := range stateResponse.Players {
|
||||
assert.NoError(t, uuid.Validate(stateResponse.Players[i].ID.String()))
|
||||
assert.Equal(t, raceName(i), stateResponse.Players[i].Name)
|
||||
assert.Equal(t, raceName(i), stateResponse.Players[i].RaceName)
|
||||
assert.Equal(t, uint(3), stateResponse.Players[i].Planets)
|
||||
assert.Equal(t, 2000., stateResponse.Players[i].Population)
|
||||
assert.False(t, stateResponse.Players[i].Extinct)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,13 @@ func TestGetTurn(t *testing.T) {
|
||||
assert.NotEqual(t, uuid.Nil, uuid.MustParse(initResponse.ID.String()))
|
||||
assert.Equal(t, uint(0), initResponse.Turn)
|
||||
assert.Equal(t, uint(0), initResponse.Stage)
|
||||
for i := range initResponse.Players {
|
||||
assert.NoError(t, uuid.Validate(initResponse.Players[i].ID.String()))
|
||||
assert.Equal(t, raceName(i), initResponse.Players[i].RaceName)
|
||||
assert.Equal(t, uint(3), initResponse.Players[i].Planets)
|
||||
assert.Equal(t, 2000., initResponse.Players[i].Population)
|
||||
assert.False(t, initResponse.Players[i].Extinct)
|
||||
}
|
||||
|
||||
// generate next turn
|
||||
|
||||
@@ -54,6 +61,13 @@ func TestGetTurn(t *testing.T) {
|
||||
assert.Equal(t, initResponse.ID, turnResponse.ID)
|
||||
assert.Equal(t, uint(1), turnResponse.Turn)
|
||||
assert.Equal(t, uint(0), turnResponse.Stage)
|
||||
for i := range turnResponse.Players {
|
||||
assert.NoError(t, uuid.Validate(turnResponse.Players[i].ID.String()))
|
||||
assert.Equal(t, raceName(i), turnResponse.Players[i].RaceName)
|
||||
assert.Equal(t, uint(3), turnResponse.Players[i].Planets)
|
||||
assert.Equal(t, 2000., turnResponse.Players[i].Population)
|
||||
assert.False(t, turnResponse.Players[i].Extinct)
|
||||
}
|
||||
|
||||
// validate status
|
||||
|
||||
@@ -67,4 +81,11 @@ func TestGetTurn(t *testing.T) {
|
||||
assert.Equal(t, initResponse.ID, stateResponse.ID)
|
||||
assert.Equal(t, uint(1), stateResponse.Turn)
|
||||
assert.Equal(t, uint(0), stateResponse.Stage)
|
||||
for i := range stateResponse.Players {
|
||||
assert.NoError(t, uuid.Validate(stateResponse.Players[i].ID.String()))
|
||||
assert.Equal(t, raceName(i), stateResponse.Players[i].RaceName)
|
||||
assert.Equal(t, uint(3), stateResponse.Players[i].Planets)
|
||||
assert.Equal(t, 2000., stateResponse.Players[i].Population)
|
||||
assert.False(t, stateResponse.Players[i].Extinct)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user