Files
galaxy-game/pkg/generator/settings.go
T
2025-09-13 02:13:44 +03:00

112 lines
2.4 KiB
Go

package generator
import (
"fmt"
"math"
)
const defaultFactor float32 = 0.1
type MapSetting struct {
Players uint32
HWSize uint32
HWResources uint32
HWMinDistance uint32
DWCount uint32
DWSize uint32
DWResources uint32
DWMinDistance uint32
DWMaxDistance uint32
GiantPlanets PlanetSetting
BigPlanets PlanetSetting
OthersMinDistance float32
NormalPlanets PlanetSetting
RichPlanets PlanetSetting
Asterioids PlanetSetting
}
func (ms MapSetting) String() string {
return fmt.Sprintf("MapSetting[players=%d HWMinDistance=%d Size=%d]", ms.Players, ms.HWMinDistance, ms.ExpectedSize())
}
func (ms MapSetting) ExpectedSize() uint32 {
return uint32(math.Sqrt(float64(ms.Players)) * float64(ms.HWMinDistance) * 1.4)
}
func (ms MapSetting) TotalPlanets() uint32 {
return ms.Players * 10
}
func (ms MapSetting) NobodysPlanets() uint32 {
return ms.TotalPlanets() - ms.Players*(ms.DWCount+1)
}
type PlanetSetting struct {
MinDistanceHW uint32
MinSize float32
MaxSize float32
MinResource float32
MaxResource float32
Probability float32
}
func (ps PlanetSetting) Count(freePlanets uint32) int {
return int(math.Ceil(float64(freePlanets) * float64(ps.Probability)))
}
func DefaultMapSetting() MapSetting {
return MapSetting{
Players: 25,
HWSize: 1000,
HWResources: 10,
HWMinDistance: 30,
DWCount: 2,
DWSize: 500,
DWResources: 10,
DWMinDistance: 5,
DWMaxDistance: 15,
GiantPlanets: PlanetSetting{
MinDistanceHW: 20,
MinSize: 1500,
MaxSize: 2500,
MinResource: 0,
MaxResource: 3,
Probability: 0.06,
},
BigPlanets: PlanetSetting{
MinDistanceHW: 10,
MinSize: 1000,
MaxSize: 2000,
MinResource: 1,
MaxResource: 10,
Probability: 0.18,
},
OthersMinDistance: defaultFactor, // minimal of 1 pixel on the plotter
NormalPlanets: PlanetSetting{
MinDistanceHW: 0,
MinSize: 0,
MaxSize: 1000,
MinResource: 0,
MaxResource: 10,
Probability: 0.5,
},
RichPlanets: PlanetSetting{
MinDistanceHW: 0,
MinSize: 0,
MaxSize: 500,
MinResource: 5,
MaxResource: 25,
Probability: 0.18,
},
Asterioids: PlanetSetting{
MinDistanceHW: 0,
MinSize: 0,
MaxSize: 0,
MinResource: 0,
MaxResource: 0,
Probability: 0.08,
},
}
}