Initial stats, etc.

This commit is contained in:
2023-04-02 23:24:47 -07:00
parent bdc095e2b2
commit 825ee8d053
8 changed files with 168 additions and 0 deletions

88
koboldsim/stats.go Normal file
View File

@@ -0,0 +1,88 @@
package koboldsim
import (
"git.chromaticdragon.app/kistaro/CardSimEngine/cardsim"
)
// KoboldMine is the state of a kobold mine.
type KoboldMine struct {
Kobolds cardsim.Stored[int64]
SectorMiningProductivity cardsim.Stored[float64]
SectorScavengingProductivity cardsim.Stored[float64]
GovBureaucracyProductivity cardsim.Stored[float64]
GovWarProductivity cardsim.Stored[float64]
}
func (k *KoboldMine) ProductivityFunc(s *cardsim.Stored[float64]) func() float64 {
return func() float64 {
return s.Value * float64(k.Kobolds.Value)
}
}
func (k *KoboldMine) TotalSectorProductivity() float64 {
return float64(k.Kobolds.Value) * (k.SectorMiningProductivity.Value + k.SectorScavengingProductivity.Value)
}
func (k *KoboldMine) TotalGovProductivity() float64 {
return float64(k.Kobolds.Value) * (k.GovBureaucracyProductivity.Value + k.GovWarProductivity.Value)
}
func (k *KoboldMine) Stats() []cardsim.Stat {
stats := cardsim.ExtractStats(k)
funcs := []cardsim.Stat{
cardsim.StatFunc(
"Total Sector Mining Productivity",
k.ProductivityFunc(&k.SectorMiningProductivity),
),
cardsim.StatFunc(
"Total Sector Scavenging Productivity",
k.ProductivityFunc(&k.SectorScavengingProductivity),
),
cardsim.StatFunc(
"Total Government Bureaucracy Productivity",
k.ProductivityFunc(&k.GovBureaucracyProductivity),
),
cardsim.StatFunc(
"Total Government War Productivity",
k.ProductivityFunc(&k.GovBureaucracyProductivity),
),
cardsim.StatFunc(
"Total Sector Productivity",
k.TotalSectorProductivity,
),
cardsim.StatFunc(
"Total Government Productivity",
k.TotalGovProductivity,
),
}
stats = append(stats, funcs...)
cardsim.SortStats(stats)
return stats
}
func NewKoboldMine() *KoboldMine {
return &KoboldMine{
Kobolds: cardsim.Stored[int64]{
Name: "Kobolds",
Value: 1000,
},
SectorMiningProductivity: cardsim.Stored[float64]{
Name: "Sector Mining Productivity",
Value: 0.15,
},
SectorScavengingProductivity: cardsim.Stored[float64]{
Name: "Sector Scavening Productivity",
Value: 0.1,
},
GovBureaucracyProductivity: cardsim.Stored[float64]{
Name: "Government Bureaucracy Productivity",
Value: 0.05,
},
GovWarProductivity: cardsim.Stored[float64]{
Name: "Government War Productivity",
Value: 0.1,
},
}
}