refactor: float64 types for storage and report
This commit is contained in:
@@ -107,7 +107,7 @@ type ShipGroup struct {
|
||||
Number uint `json:"number"` // Number (quantity) ships of specific ShipType
|
||||
|
||||
CargoType *CargoType `json:"loadType,omitempty"`
|
||||
Load float64 `json:"load"` // Cargo loaded - "Масса груза"
|
||||
Load Float `json:"load"` // Cargo loaded - "Масса груза"
|
||||
|
||||
Tech TechSet `json:"tech"`
|
||||
|
||||
@@ -117,8 +117,8 @@ type ShipGroup struct {
|
||||
StateUpgrade *InUpgrade `json:"stateUpgrade,omitempty"`
|
||||
}
|
||||
|
||||
func (sg ShipGroup) TechLevel(t Tech) float64 {
|
||||
return sg.Tech.Value(t)
|
||||
func (sg ShipGroup) TechLevel(t Tech) Float {
|
||||
return F(sg.Tech.Value(t))
|
||||
}
|
||||
|
||||
// TODO: refactor to separate method with *ShipGroup as parameter
|
||||
@@ -170,19 +170,19 @@ func (sg ShipGroup) Equal(other ShipGroup) bool {
|
||||
sg.TechLevel(TechShields) == other.TechLevel(TechShields) &&
|
||||
sg.TechLevel(TechCargo) == other.TechLevel(TechCargo) &&
|
||||
sg.CargoType == other.CargoType &&
|
||||
sg.Load/float64(sg.Number) == other.Load/float64(other.Number) &&
|
||||
sg.Load.F()/float64(sg.Number) == other.Load.F()/float64(other.Number) &&
|
||||
sg.State() == other.State()
|
||||
}
|
||||
|
||||
// Грузоподъёмность
|
||||
func (sg ShipGroup) CargoCapacity(st *ShipType) float64 {
|
||||
return sg.TechLevel(TechCargo) * (st.Cargo + (st.Cargo*st.Cargo)/20) * float64(sg.Number)
|
||||
return sg.TechLevel(TechCargo).F() * (st.Cargo + (st.Cargo*st.Cargo)/20) * float64(sg.Number)
|
||||
}
|
||||
|
||||
// Масса перевозимого груза -
|
||||
// общее количество единиц груза, деленное на технологический уровень Грузоперевозок
|
||||
func (sg ShipGroup) CarryingMass() float64 {
|
||||
return sg.Load / sg.TechLevel(TechCargo)
|
||||
return sg.Load.F() / sg.TechLevel(TechCargo).F()
|
||||
}
|
||||
|
||||
// Масса группы без учёта груза
|
||||
@@ -199,7 +199,7 @@ func (sg ShipGroup) FullMass(st *ShipType) float64 {
|
||||
// Эффективность двигателя -
|
||||
// равна мощности Двигателей, умноженной на технологический уровень блока Двигателей
|
||||
func (sg ShipGroup) DriveEffective(st *ShipType) float64 {
|
||||
return st.Drive * sg.TechLevel(TechDrive)
|
||||
return st.Drive * sg.TechLevel(TechDrive).F()
|
||||
}
|
||||
|
||||
// Корабли перемещаются за один ход на количество световых лет, равное
|
||||
@@ -209,27 +209,27 @@ func (sg ShipGroup) Speed(st *ShipType) float64 {
|
||||
}
|
||||
|
||||
func (sg ShipGroup) UpgradeDriveCost(st *ShipType, drive float64) float64 {
|
||||
return (1 - sg.TechLevel(TechDrive)/drive) * 10 * st.Drive
|
||||
return (1 - sg.TechLevel(TechDrive).F()/drive) * 10 * st.Drive
|
||||
}
|
||||
|
||||
// TODO: test on other values
|
||||
func (sg ShipGroup) UpgradeWeaponsCost(st *ShipType, weapons float64) float64 {
|
||||
return (1 - sg.TechLevel(TechWeapons)/weapons) * 10 * st.WeaponsBlockMass()
|
||||
return (1 - sg.TechLevel(TechWeapons).F()/weapons) * 10 * st.WeaponsBlockMass()
|
||||
}
|
||||
|
||||
func (sg ShipGroup) UpgradeShieldsCost(st *ShipType, shields float64) float64 {
|
||||
return (1 - sg.TechLevel(TechShields)/shields) * 10 * st.Shields
|
||||
return (1 - sg.TechLevel(TechShields).F()/shields) * 10 * st.Shields
|
||||
}
|
||||
|
||||
func (sg ShipGroup) UpgradeCargoCost(st *ShipType, cargo float64) float64 {
|
||||
return (1 - sg.TechLevel(TechCargo)/cargo) * 10 * st.Cargo
|
||||
return (1 - sg.TechLevel(TechCargo).F()/cargo) * 10 * st.Cargo
|
||||
}
|
||||
|
||||
// Мощность бомбардировки
|
||||
func (sg ShipGroup) BombingPower(st *ShipType) float64 {
|
||||
return (math.Sqrt(st.Weapons*sg.TechLevel(TechWeapons))/10. + 1.) *
|
||||
return (math.Sqrt(st.Weapons*sg.TechLevel(TechWeapons).F())/10. + 1.) *
|
||||
st.Weapons *
|
||||
sg.TechLevel(TechWeapons) *
|
||||
sg.TechLevel(TechWeapons).F() *
|
||||
float64(st.Armament) *
|
||||
float64(sg.Number)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user