ui calculator

This commit is contained in:
Ilia Denisov
2026-03-30 19:38:24 +02:00
committed by GitHub
parent 17f366cd6b
commit a7793f5416
37 changed files with 2046 additions and 270 deletions
+7 -17
View File
@@ -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))
}
// Мощность бомбардировки
+10 -4
View File
@@ -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
}
}