package generator import ( "fmt" "math" ) const defaultFactor float64 = 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 float64 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 float64 MaxSize float64 MinResource float64 MaxResource float64 Probability float64 } 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, }, } }