ui calculator
This commit is contained in:
@@ -2,6 +2,7 @@ package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"galaxy/calc"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
@@ -179,18 +180,13 @@ func (sg ShipGroup) Equal(other ShipGroup) bool {
|
||||
sg.State() == other.State()
|
||||
}
|
||||
|
||||
// Грузоподъёмность
|
||||
// Грузоподъёмность группы
|
||||
func (sg ShipGroup) CargoCapacity(st *ShipType) float64 {
|
||||
return sg.TechLevel(TechCargo).F() * (st.Cargo.F() + (st.Cargo.F()*st.Cargo.F())/20) * float64(sg.Number)
|
||||
return calc.CargoCapacity(st.Cargo.F(), sg.TechLevel(TechCargo).F()) * float64(sg.Number)
|
||||
}
|
||||
|
||||
// Масса перевозимого груза -
|
||||
// общее количество единиц груза, деленное на технологический уровень Грузоперевозок
|
||||
func (sg ShipGroup) CarryingMass() float64 {
|
||||
if sg.Load.F() == 0 {
|
||||
return 0
|
||||
}
|
||||
return sg.Load.F() / sg.TechLevel(TechCargo).F()
|
||||
return calc.CarryingMass(sg.Load.F(), sg.TechLevel(TechCargo).F())
|
||||
}
|
||||
|
||||
// Масса группы без учёта груза
|
||||
@@ -198,22 +194,16 @@ func (sg ShipGroup) EmptyMass(st *ShipType) float64 {
|
||||
return st.EmptyMass() * float64(sg.Number)
|
||||
}
|
||||
|
||||
// Полная масса -
|
||||
// массу корабля самого по себе плюс масса перевозимого груза
|
||||
func (sg ShipGroup) FullMass(st *ShipType) float64 {
|
||||
return sg.EmptyMass(st) + sg.CarryingMass()
|
||||
return calc.FullMass(sg.EmptyMass(st), sg.CarryingMass())
|
||||
}
|
||||
|
||||
// Эффективность двигателя -
|
||||
// равна мощности Двигателей, умноженной на технологический уровень блока Двигателей
|
||||
func (sg ShipGroup) DriveEffective(st *ShipType) float64 {
|
||||
return st.Drive.F() * sg.TechLevel(TechDrive).F()
|
||||
return calc.DriveEffective(st.Drive.F(), sg.TechLevel(TechDrive).F())
|
||||
}
|
||||
|
||||
// Корабли перемещаются за один ход на количество световых лет, равное
|
||||
// эффективности двигателя, умноженной на 20 и деленной на "Полную массу" корабля
|
||||
func (sg ShipGroup) Speed(st *ShipType) float64 {
|
||||
return sg.DriveEffective(st) * 20 / sg.FullMass(st)
|
||||
return calc.Speed(sg.DriveEffective(st), sg.FullMass(st))
|
||||
}
|
||||
|
||||
// Мощность бомбардировки
|
||||
|
||||
@@ -2,6 +2,7 @@ package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"galaxy/calc"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
@@ -44,10 +45,11 @@ func (st ShipType) DriveBlockMass() float64 {
|
||||
}
|
||||
|
||||
func (st ShipType) WeaponsBlockMass() float64 {
|
||||
if (st.Armament == 0 && st.Weapons != 0) || (st.Armament != 0 && st.Weapons == 0) {
|
||||
if v, ok := calc.WeaponsBlockMass(st.Weapons.F(), st.Armament); !ok {
|
||||
panic(fmt.Sprintf("ship class invalid design: A=%d W=%.03f", st.Armament, st.Weapons))
|
||||
} else {
|
||||
return v
|
||||
}
|
||||
return float64(st.Armament+1) * (st.Weapons.F() / 2)
|
||||
}
|
||||
|
||||
func (st ShipType) ShieldsBlockMass() float64 {
|
||||
@@ -59,6 +61,10 @@ func (st ShipType) CargoBlockMass() float64 {
|
||||
}
|
||||
|
||||
func (st ShipType) EmptyMass() float64 {
|
||||
shipMass := st.DriveBlockMass() + st.ShieldsBlockMass() + st.CargoBlockMass() + st.WeaponsBlockMass()
|
||||
return shipMass
|
||||
if v, ok := calc.EmptyMass(st.Drive.F(), st.Weapons.F(), st.Armament, st.Shields.F(), st.Cargo.F()); !ok {
|
||||
panic(fmt.Sprintf("ship class invalid design: D=%.03f A=%d W=%.03f S=%.03f C=%.03f",
|
||||
st.Drive, st.Armament, st.Weapons, st.Shields, st.Cargo))
|
||||
} else {
|
||||
return v
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user