88 lines
2.4 KiB
Go
88 lines
2.4 KiB
Go
package game
|
|
|
|
import (
|
|
"math"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type UnidentifiedPlanet struct {
|
|
X float64 `json:"x"`
|
|
Y float64 `json:"y"`
|
|
Number uint `json:"number"`
|
|
}
|
|
|
|
type UninhabitedPlanet struct {
|
|
UnidentifiedPlanet
|
|
Size float64 `json:"size"`
|
|
Name string `json:"name"`
|
|
Resources float64 `json:"resources"` // R - Ресурсы
|
|
Capital float64 `json:"capital"` // CAP $ - Запасы промышленности
|
|
Material float64 `json:"material"` // MAT M - Запасы ресурсов / сырья
|
|
}
|
|
|
|
type PlanetReport struct {
|
|
UninhabitedPlanet
|
|
Industry float64 `json:"industry"` // I - Промышленность
|
|
Population float64 `json:"population"` // P - Население
|
|
Colonists float64 `json:"colonists"` // COL C - Количество колонистов
|
|
Production Production `json:"production"` // TODO: internal/report format
|
|
// Параметр "L" - Свободный производственный потенциал
|
|
}
|
|
|
|
type Planet struct {
|
|
Owner uuid.UUID `json:"owner"` // FIXME: nil value when no owner
|
|
Route map[RouteType]uint `json:"route"`
|
|
PlanetReport
|
|
}
|
|
|
|
type PlanetReportForeign struct {
|
|
RaceName string
|
|
PlanetReport
|
|
}
|
|
|
|
// TODO: delete func
|
|
func (p Planet) ProductionCapacity() float64 {
|
|
return p.Industry*0.75 + p.Population*0.25
|
|
}
|
|
|
|
func PlanetProduction(industry, population float64) float64 {
|
|
return industry*0.75 + population*0.25
|
|
}
|
|
|
|
// Производство промышленности
|
|
// TODO: test on real values
|
|
func (p *Planet) IncreaseIndustry() {
|
|
prod := p.ProductionCapacity() / 5
|
|
industryIncrement := math.Min(prod, p.Material)
|
|
p.Industry += industryIncrement
|
|
if p.Industry > p.Population {
|
|
p.Industry = p.Population
|
|
p.Capital += p.Population - p.Industry
|
|
}
|
|
}
|
|
|
|
// Производство материалов
|
|
// TODO: test on real values
|
|
func (p *Planet) IncreaseMaterial() {
|
|
p.Material += p.ProductionCapacity() * p.Industry
|
|
}
|
|
|
|
// Автоматическое увеличение населения на каждом ходу
|
|
func (p *Planet) IncreasePopulation() {
|
|
p.Population *= 1.08
|
|
if p.Population > p.Size {
|
|
p.Colonists += (p.Population - p.Size) / 8
|
|
p.Population = p.Size
|
|
}
|
|
}
|
|
|
|
func UnloadColonists(p Planet, v float64) Planet {
|
|
p.Population += v * 8
|
|
if p.Population > p.Size {
|
|
p.Colonists += (p.Population - p.Size) / 8
|
|
p.Population = p.Size
|
|
}
|
|
return p
|
|
}
|