diff --git a/internal/controller/fleet.go b/internal/controller/fleet.go index 80a9af7..2d42935 100644 --- a/internal/controller/fleet.go +++ b/internal/controller/fleet.go @@ -81,7 +81,6 @@ func (c *Cache) FleetState(fleetID uuid.UUID) FleetState { return *fs } -// TODO: Hello! Wanna know fleet's speed? Good. Implement & test this func first. func (c *Cache) FleetSpeedAndMass(fi int) (float64, float64) { c.validateFleetIndex(fi) speed := math.MaxFloat64 diff --git a/internal/controller/fleet_test.go b/internal/controller/fleet_test.go index 1420253..90450a0 100644 --- a/internal/controller/fleet_test.go +++ b/internal/controller/fleet_test.go @@ -1,6 +1,7 @@ package controller_test import ( + "math" "slices" "testing" @@ -132,3 +133,45 @@ func TestJoinFleets(t *testing.T) { g.JoinFleets(Race_0.Name, fleetOnPlanet2, fleetTargetTwo), e.GenericErrorText(e.ErrShipsNotOnSamePlanet)) } + +func TestFleetSpeedAndMass(t *testing.T) { + c, g := newCache() + + c.MustPlanet(R0_Planet_0_num).Material = 100. + c.MustPlanet(R0_Planet_0_num).Capital = 100. + fleet := "Fleet" + var speed, mass float64 + + assert.NoError(t, c.CreateShips(Race_0_idx, Race_0_Gunship, R0_Planet_0_num, 3)) // 1 + + s := c.ShipGroup(0).Speed(c.MustShipClass(Race_0_idx, Race_0_Gunship)) + m := c.ShipGroup(0).FullMass(c.MustShipClass(Race_0_idx, Race_0_Gunship)) + + assert.NoError(t, c.CreateShips(Race_0_idx, Race_0_Freighter, R0_Planet_0_num, 5)) // 2 + assert.NoError(t, g.LoadCargo(Race_0.Name, 2, "MAT", 10., 0)) + + assert.NoError(t, c.CreateShips(Race_0_idx, Race_0_Freighter, R0_Planet_0_num, 7)) // 3 + assert.NoError(t, g.LoadCargo(Race_0.Name, 3, "CAP", 10., 0)) + + assert.NoError(t, g.JoinShipGroupToFleet(Race_0.Name, fleet, 1, 0)) + fleetIndex := 0 + speed, mass = c.FleetSpeedAndMass(fleetIndex) + assert.Equal(t, s, speed) + assert.Equal(t, m, mass) + + s = math.Min(s, c.ShipGroup(1).Speed(c.MustShipClass(Race_0_idx, Race_0_Freighter))) + m += c.ShipGroup(1).FullMass(c.MustShipClass(Race_0_idx, Race_0_Freighter)) + + assert.NoError(t, g.JoinShipGroupToFleet(Race_0.Name, fleet, 2, 0)) + speed, mass = c.FleetSpeedAndMass(fleetIndex) + assert.Equal(t, s, speed) + assert.Equal(t, m, mass) + + s = math.Min(s, c.ShipGroup(2).Speed(c.MustShipClass(Race_0_idx, Race_0_Freighter))) + m += c.ShipGroup(2).FullMass(c.MustShipClass(Race_0_idx, Race_0_Freighter)) + + assert.NoError(t, g.JoinShipGroupToFleet(Race_0.Name, fleet, 3, 0)) + speed, mass = c.FleetSpeedAndMass(fleetIndex) + assert.Equal(t, s, speed) + assert.Equal(t, m, mass) +} diff --git a/internal/controller/ship_group.go b/internal/controller/ship_group.go index f9aa18a..4ee4d36 100644 --- a/internal/controller/ship_group.go +++ b/internal/controller/ship_group.go @@ -304,7 +304,7 @@ func (c *Cache) LoadCargo(ri int, groupIndex uint, ct game.CargoType, ships uint sgi = nsgi } capacity := c.ShipGroup(sgi).CargoCapacity(st) - freeShipGroupCargoLoad := capacity - c.ShipGroup(sgi).Load.F() + freeShipGroupCargoLoad := capacity - float64(c.ShipGroup(sgi).Load) if freeShipGroupCargoLoad == 0 { return e.NewCargoLoadNoSpaceLeftError() }