refactor: game funcs moved to controller
This commit is contained in:
@@ -2,10 +2,8 @@ package game
|
||||
|
||||
import (
|
||||
"math"
|
||||
"slices"
|
||||
|
||||
"github.com/google/uuid"
|
||||
e "github.com/iliadenisov/galaxy/internal/error"
|
||||
)
|
||||
|
||||
type UnidentifiedPlanet struct {
|
||||
@@ -48,21 +46,6 @@ func (p Planet) ProductionCapacity() float64 {
|
||||
return p.Industry*0.75 + p.Population*0.25
|
||||
}
|
||||
|
||||
// Свободный производственный потенциал (L)
|
||||
// промышленность * 0.75 + население * 0.25
|
||||
// за вычетом затрат, расходуемых в течение хода на модернизацию кораблей
|
||||
func PlanetProductionCapacity(g *Game, planetNumber uint) float64 {
|
||||
p, err := g.PlanetByNumber(planetNumber)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
var busyResources float64
|
||||
for sg := range g.ShipsInUpgrade(p.Number) {
|
||||
busyResources += sg.StateUpgrade.Cost()
|
||||
}
|
||||
return PlanetProduction(p.Industry, p.Population) - busyResources
|
||||
}
|
||||
|
||||
func PlanetProduction(industry, population float64) float64 {
|
||||
return industry*0.75 + population*0.25
|
||||
}
|
||||
@@ -102,38 +85,3 @@ func UnloadColonists(p Planet, v float64) Planet {
|
||||
}
|
||||
return p
|
||||
}
|
||||
|
||||
func (g Game) RenamePlanet(raceName string, planetNumber int, typeName string) error {
|
||||
ri, err := g.raceIndex(raceName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return g.renamePlanetInternal(ri, planetNumber, typeName)
|
||||
}
|
||||
|
||||
func (g Game) renamePlanetInternal(ri int, number int, name string) error {
|
||||
n, ok := validateTypeName(name)
|
||||
if !ok {
|
||||
return e.NewEntityTypeNameValidationError("%q", n)
|
||||
}
|
||||
if number < 0 {
|
||||
return e.NewPlanetNumberError(number)
|
||||
}
|
||||
pl := slices.IndexFunc(g.Map.Planet, func(p Planet) bool { return p.Number == uint(number) })
|
||||
if pl < 0 {
|
||||
return e.NewEntityNotExistsError("planet #%d", number)
|
||||
}
|
||||
if g.Map.Planet[pl].Owner != g.Race[ri].ID {
|
||||
return e.NewEntityNotOwnedError("planet #%d", number)
|
||||
}
|
||||
g.Map.Planet[pl].Name = n
|
||||
return nil
|
||||
}
|
||||
|
||||
func PlanetByNum(g *Game, number uint) (Planet, bool) {
|
||||
pi := slices.IndexFunc(g.Map.Planet, func(p Planet) bool { return p.Number == number })
|
||||
if pi < 0 {
|
||||
return Planet{}, false
|
||||
}
|
||||
return g.Map.Planet[pi], true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user