feat: command types list

This commit is contained in:
Ilia Denisov
2026-02-10 07:49:12 +02:00
parent d9c8de27e5
commit 83bcdcbc49
15 changed files with 184 additions and 163 deletions
+3 -3
View File
@@ -97,7 +97,7 @@ func TestFilterBattleOpponents(t *testing.T) {
assert.NoError(t, c.CreateShips(Race_1_idx, Race_1_Gunship, R1_Planet_1_num, 15)) // 2 assert.NoError(t, c.CreateShips(Race_1_idx, Race_1_Gunship, R1_Planet_1_num, 15)) // 2
undefeatedShip := ship undefeatedShip := ship
undefeatedShip.Shields = 100 undefeatedShip.Shields = 100
assert.NoError(t, c.CreateShipType(Race_1_idx, undefeatedShip.Name, undefeatedShip.Drive.F(), int(undefeatedShip.Armament), undefeatedShip.Weapons.F(), undefeatedShip.Shields.F(), undefeatedShip.Cargo.F())) assert.NoError(t, c.ShipClassCreate(Race_1_idx, undefeatedShip.Name, undefeatedShip.Drive.F(), int(undefeatedShip.Armament), undefeatedShip.Weapons.F(), undefeatedShip.Shields.F(), undefeatedShip.Cargo.F()))
assert.NoError(t, c.CreateShips(Race_1_idx, undefeatedShip.Name, R1_Planet_1_num, 1)) // 3 assert.NoError(t, c.CreateShips(Race_1_idx, undefeatedShip.Name, R1_Planet_1_num, 1)) // 3
cacheProbability := make(map[int]map[int]float64) cacheProbability := make(map[int]map[int]float64)
@@ -152,11 +152,11 @@ func TestProduceBattles(t *testing.T) {
c.CreateShipsUnsafe_T(Race_1_idx, c.MustShipClass(Race_1_idx, Race_1_Gunship).ID, R0_Planet_0_num, 11) c.CreateShipsUnsafe_T(Race_1_idx, c.MustShipClass(Race_1_idx, Race_1_Gunship).ID, R0_Planet_0_num, 11)
// Race_C // Race_C
assert.NoError(t, c.CreateShipType(race_C_idx, Cruiser.Name, Cruiser.Drive.F(), int(Cruiser.Armament), Cruiser.Weapons.F(), Cruiser.Shields.F(), Cruiser.Cargo.F())) assert.NoError(t, c.ShipClassCreate(race_C_idx, Cruiser.Name, Cruiser.Drive.F(), int(Cruiser.Armament), Cruiser.Weapons.F(), Cruiser.Shields.F(), Cruiser.Cargo.F()))
c.CreateShipsUnsafe_T(race_C_idx, c.MustShipClass(race_C_idx, Cruiser.Name).ID, R0_Planet_0_num, 12) c.CreateShipsUnsafe_T(race_C_idx, c.MustShipClass(race_C_idx, Cruiser.Name).ID, R0_Planet_0_num, 12)
// Race_D // Race_D
assert.NoError(t, c.CreateShipType(race_D_idx, Cruiser.Name, Cruiser.Drive.F(), int(Cruiser.Armament), Cruiser.Weapons.F(), Cruiser.Shields.F(), Cruiser.Cargo.F())) assert.NoError(t, c.ShipClassCreate(race_D_idx, Cruiser.Name, Cruiser.Drive.F(), int(Cruiser.Armament), Cruiser.Weapons.F(), Cruiser.Shields.F(), Cruiser.Cargo.F()))
c.CreateShipsUnsafe_T(race_D_idx, c.MustShipClass(race_D_idx, Cruiser.Name).ID, R0_Planet_0_num, 13) c.CreateShipsUnsafe_T(race_D_idx, c.MustShipClass(race_D_idx, Cruiser.Name).ID, R0_Planet_0_num, 13)
battle := controller.ProduceBattles(c) battle := controller.ProduceBattles(c)
+120 -120
View File
@@ -54,12 +54,109 @@ func (c Controller) UpdateRelation(actor, acceptor string, v string) error {
return c.Cache.UpdateRelation(ri, other, rel) return c.Cache.UpdateRelation(ri, other, rel)
} }
func (c *Controller) CreateShipType(actor, typeName string, drive float64, ammo int, weapons, shileds, cargo float64) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.ShipClassCreate(ri, typeName, drive, ammo, weapons, shileds, cargo)
}
func (c *Controller) MergeShipType(actor, name, targetName string) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.shipClassMerge(ri, name, targetName)
}
func (c *Controller) DeleteShipType(actor, typeName string) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.shipClassRemove(ri, typeName)
}
func (c *Controller) LoadCargo(actor string, groupIndex uint, cargoType string, ships uint, quantity float64) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
ct, ok := game.CargoTypeSet[cargoType]
if !ok {
return e.NewCargoTypeInvalidError(cargoType)
}
return c.Cache.shipGroupLoad(ri, groupIndex, ct, ships, quantity)
}
func (c *Controller) UnloadCargo(actor string, groupIndex uint, ships uint, quantity float64) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.shipGroupUnload(ri, groupIndex, ships, quantity)
}
func (c *Controller) SendGroup(actor string, groupIndex, planetNumber, quantity uint) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.shipGroupSend(ri, groupIndex, planetNumber, quantity)
}
func (c *Controller) UpgradeGroup(actor string, groupIndex uint, techInput string, limitShips uint, limitLevel float64) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.shipGroupUpgrade(ri, groupIndex, techInput, limitShips, limitLevel)
}
func (c *Controller) JoinEqualGroups(actor string) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
c.Cache.shipGroupMerge(ri)
return nil
}
func (c *Controller) BreakGroup(actor string, groupIndex, quantity uint) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.ShipGroupBreak(ri, groupIndex, quantity)
}
func (c *Controller) DisassembleGroup(actor string, groupIndex, quantity uint) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.shipGroupDismantle(ri, groupIndex, quantity)
}
func (c *Controller) TransferGroup(actor, acceptor string, groupIndex, quantity uint) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
riAccept, err := c.Cache.validRace(acceptor)
if err != nil {
return err
}
return c.Cache.shipGroupTransfer(ri, riAccept, groupIndex, quantity)
}
func (c *Controller) JoinShipGroupToFleet(actor, fleetName string, group, count uint) error { func (c *Controller) JoinShipGroupToFleet(actor, fleetName string, group, count uint) error {
ri, err := c.Cache.validActor(actor) ri, err := c.Cache.validActor(actor)
if err != nil { if err != nil {
return err return err
} }
return c.Cache.JoinShipGroupToFleet(ri, fleetName, group, count) return c.Cache.ShipGroupJoinFleet(ri, fleetName, group, count)
} }
func (c *Controller) JoinFleets(actor, fleetSourceName, fleetTargetName string) error { func (c *Controller) JoinFleets(actor, fleetSourceName, fleetTargetName string) error {
@@ -67,7 +164,7 @@ func (c *Controller) JoinFleets(actor, fleetSourceName, fleetTargetName string)
if err != nil { if err != nil {
return err return err
} }
return c.Cache.JoinFleets(ri, fleetSourceName, fleetTargetName) return c.Cache.fleetMerge(ri, fleetSourceName, fleetTargetName)
} }
func (c *Controller) SendFleet(actor, fleetName string, planetNumber uint) error { func (c *Controller) SendFleet(actor, fleetName string, planetNumber uint) error {
@@ -79,7 +176,23 @@ func (c *Controller) SendFleet(actor, fleetName string, planetNumber uint) error
if !ok { if !ok {
return e.NewEntityNotExistsError("fleet %q", fleetName) return e.NewEntityNotExistsError("fleet %q", fleetName)
} }
return c.Cache.SendFleet(ri, fi, planetNumber) return c.Cache.FleetSend(ri, fi, planetNumber)
}
func (c *Controller) CreateScience(actor, typeName string, drive, weapons, shields, cargo float64) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.ScienceCreate(ri, typeName, drive, weapons, shields, cargo)
}
func (c *Controller) DeleteScience(actor, typeName string) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.ScienceRemove(ri, typeName)
} }
func (c *Controller) RenamePlanet(actor string, planetNumber int, typeName string) error { func (c *Controller) RenamePlanet(actor string, planetNumber int, typeName string) error {
@@ -87,7 +200,7 @@ func (c *Controller) RenamePlanet(actor string, planetNumber int, typeName strin
if err != nil { if err != nil {
return err return err
} }
return c.Cache.RenamePlanet(ri, planetNumber, typeName) return c.Cache.PlanetRename(ri, planetNumber, typeName)
} }
func (c *Controller) PlanetProduction(actor string, planetNumber int, prodType, subject string) error { func (c *Controller) PlanetProduction(actor string, planetNumber int, prodType, subject string) error {
@@ -116,7 +229,7 @@ func (c *Controller) PlanetProduction(actor string, planetNumber int, prodType,
default: default:
return e.NewProductionInvalidError(prodType) return e.NewProductionInvalidError(prodType)
} }
return c.Cache.PlanetProduction(ri, planetNumber, prod, subject) return c.Cache.PlanetProduce(ri, planetNumber, prod, subject)
} }
func (c *Controller) SetRoute(actor, loadType string, origin, destination uint) error { func (c *Controller) SetRoute(actor, loadType string, origin, destination uint) error {
@@ -128,7 +241,7 @@ func (c *Controller) SetRoute(actor, loadType string, origin, destination uint)
if !ok { if !ok {
return e.NewCargoTypeInvalidError(loadType) return e.NewCargoTypeInvalidError(loadType)
} }
return c.Cache.SetRoute(ri, rt, origin, destination) return c.Cache.PlanetRouteSet(ri, rt, origin, destination)
} }
func (c *Controller) RemoveRoute(actor, loadType string, origin uint) error { func (c *Controller) RemoveRoute(actor, loadType string, origin uint) error {
@@ -140,118 +253,5 @@ func (c *Controller) RemoveRoute(actor, loadType string, origin uint) error {
if !ok { if !ok {
return e.NewCargoTypeInvalidError(loadType) return e.NewCargoTypeInvalidError(loadType)
} }
return c.Cache.RemoveRoute(ri, rt, origin) return c.Cache.PlanetRouteRemove(ri, rt, origin)
}
func (c *Controller) CreateScience(actor, typeName string, drive, weapons, shields, cargo float64) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.CreateScience(ri, typeName, drive, weapons, shields, cargo)
}
func (c *Controller) DeleteScience(actor, typeName string) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.DeleteScience(ri, typeName)
}
func (c *Controller) CreateShipType(actor, typeName string, drive float64, ammo int, weapons, shileds, cargo float64) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.CreateShipType(ri, typeName, drive, ammo, weapons, shileds, cargo)
}
func (c *Controller) MergeShipType(actor, name, targetName string) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.MergeShipType(ri, name, targetName)
}
func (c *Controller) DeleteShipType(actor, typeName string) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.DeleteShipType(ri, typeName)
}
func (c *Controller) SendGroup(actor string, groupIndex, planetNumber, quantity uint) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.SendGroup(ri, groupIndex, planetNumber, quantity)
}
func (c *Controller) UpgradeGroup(actor string, groupIndex uint, techInput string, limitShips uint, limitLevel float64) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.UpgradeGroup(ri, groupIndex, techInput, limitShips, limitLevel)
}
func (c *Controller) JoinEqualGroups(actor string) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
c.Cache.JoinEqualGroups(ri)
return nil
}
func (c *Controller) BreakGroup(actor string, groupIndex, quantity uint) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.BreakGroup(ri, groupIndex, quantity)
}
func (c *Controller) DisassembleGroup(actor string, groupIndex, quantity uint) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.DisassembleGroup(ri, groupIndex, quantity)
}
func (c *Controller) LoadCargo(actor string, groupIndex uint, cargoType string, ships uint, quantity float64) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
ct, ok := game.CargoTypeSet[cargoType]
if !ok {
return e.NewCargoTypeInvalidError(cargoType)
}
return c.Cache.LoadCargo(ri, groupIndex, ct, ships, quantity)
}
func (c *Controller) UnloadCargo(actor string, groupIndex uint, ships uint, quantity float64) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
return c.Cache.UnloadCargo(ri, groupIndex, ships, quantity)
}
func (c *Controller) TransferGroup(actor, acceptor string, groupIndex, quantity uint) error {
ri, err := c.Cache.validActor(actor)
if err != nil {
return err
}
riAccept, err := c.Cache.validRace(acceptor)
if err != nil {
return err
}
return c.Cache.TransferGroup(ri, riAccept, groupIndex, quantity)
} }
+6 -6
View File
@@ -133,13 +133,13 @@ func newCache() (*controller.Cache, *controller.Controller) {
// g := newGame() // g := newGame()
// c := controller.NewCache(g) // c := controller.NewCache(g)
c := ctl.Cache c := ctl.Cache
assertNoError(c.CreateShipType(Race_0_idx, Race_0_Gunship, 60, 3, 30, 100, 0)) assertNoError(c.ShipClassCreate(Race_0_idx, Race_0_Gunship, 60, 3, 30, 100, 0))
assertNoError(c.CreateShipType(Race_0_idx, Race_0_Freighter, 8, 0, 0, 2, 10)) assertNoError(c.ShipClassCreate(Race_0_idx, Race_0_Freighter, 8, 0, 0, 2, 10))
assertNoError(c.CreateShipType(Race_0_idx, ShipType_Cruiser, Cruiser.Drive.F(), int(Cruiser.Armament), Cruiser.Weapons.F(), Cruiser.Shields.F(), Cruiser.Cargo.F())) assertNoError(c.ShipClassCreate(Race_0_idx, ShipType_Cruiser, Cruiser.Drive.F(), int(Cruiser.Armament), Cruiser.Weapons.F(), Cruiser.Shields.F(), Cruiser.Cargo.F()))
assertNoError(c.CreateShipType(Race_1_idx, Race_1_Gunship, 60, 3, 30, 100, 0)) assertNoError(c.ShipClassCreate(Race_1_idx, Race_1_Gunship, 60, 3, 30, 100, 0))
assertNoError(c.CreateShipType(Race_1_idx, Race_1_Freighter, 8, 0, 0, 2, 10)) assertNoError(c.ShipClassCreate(Race_1_idx, Race_1_Freighter, 8, 0, 0, 2, 10))
assertNoError(c.CreateShipType(Race_1_idx, ShipType_Cruiser, 15, 2, 15, 15, 0)) // same name - different type (why.) assertNoError(c.ShipClassCreate(Race_1_idx, ShipType_Cruiser, 15, 2, 15, 15, 0)) // same name - different type (why.)
// ctl := controller.NewRepoController(nil) // ctl := controller.NewRepoController(nil)
// ctl.Cache = c // ctl.Cache = c
+3 -3
View File
@@ -100,7 +100,7 @@ func (c *Cache) FleetSpeedAndMass(fi int) (float64, float64) {
return speed, mass return speed, mass
} }
func (c *Cache) JoinShipGroupToFleet(ri int, fleetName string, groupIndex, quantity uint) (err error) { func (c *Cache) ShipGroupJoinFleet(ri int, fleetName string, groupIndex, quantity uint) (err error) {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
name, ok := util.ValidateTypeName(fleetName) name, ok := util.ValidateTypeName(fleetName)
if !ok { if !ok {
@@ -146,7 +146,7 @@ func (c *Cache) JoinShipGroupToFleet(ri int, fleetName string, groupIndex, quant
sgi = nsgi sgi = nsgi
} }
c.ShipGroupJoinFleet(sgi, &c.g.Fleets[fi].ID) c.internalShipGroupJoinFleet(sgi, &c.g.Fleets[fi].ID)
if oldFleetID != nil { if oldFleetID != nil {
keepOldFleet := false keepOldFleet := false
@@ -170,7 +170,7 @@ func (c *Cache) JoinShipGroupToFleet(ri int, fleetName string, groupIndex, quant
return nil return nil
} }
func (c *Cache) JoinFleets(ri int, fleetSourceName, fleetTargetName string) (err error) { func (c *Cache) fleetMerge(ri int, fleetSourceName, fleetTargetName string) (err error) {
fiSource, ok := c.fleetIndex(ri, fleetSourceName) fiSource, ok := c.fleetIndex(ri, fleetSourceName)
if !ok { if !ok {
return e.NewEntityNotExistsError("source fleet %s", fleetSourceName) return e.NewEntityNotExistsError("source fleet %s", fleetSourceName)
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"github.com/iliadenisov/galaxy/internal/util" "github.com/iliadenisov/galaxy/internal/util"
) )
func (c *Cache) SendFleet(ri, fi int, planetNumber uint) error { func (c *Cache) FleetSend(ri, fi int, planetNumber uint) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
c.validateFleetIndex(fi) c.validateFleetIndex(fi)
fleetState := c.FleetState(c.g.Fleets[fi].ID) fleetState := c.FleetState(c.g.Fleets[fi].ID)
+2 -2
View File
@@ -11,7 +11,7 @@ import (
"github.com/iliadenisov/galaxy/internal/util" "github.com/iliadenisov/galaxy/internal/util"
) )
func (c *Cache) RenamePlanet(ri int, number int, name string) error { func (c *Cache) PlanetRename(ri int, number int, name string) error {
n, ok := util.ValidateTypeName(name) n, ok := util.ValidateTypeName(name)
if !ok { if !ok {
return e.NewEntityTypeNameValidationError("%q", n) return e.NewEntityTypeNameValidationError("%q", n)
@@ -30,7 +30,7 @@ func (c *Cache) RenamePlanet(ri int, number int, name string) error {
return nil return nil
} }
func (c *Cache) PlanetProduction(ri int, number int, prod game.ProductionType, subj string) error { func (c *Cache) PlanetProduce(ri int, number int, prod game.ProductionType, subj string) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
if number < 0 { if number < 0 {
return e.NewPlanetNumberError(number) return e.NewPlanetNumberError(number)
+2 -2
View File
@@ -163,7 +163,7 @@ func TestProduceShips(t *testing.T) {
progress := *c.MustPlanet(R0_Planet_0_num).Production.Progress progress := *c.MustPlanet(R0_Planet_0_num).Production.Progress
assert.InDelta(t, 0.45, progress.F(), 0.001) assert.InDelta(t, 0.45, progress.F(), 0.001)
assert.NoError(t, c.CreateShipType(Race_0_idx, "Drone", 1, 0, 0, 0, 0)) assert.NoError(t, c.ShipClassCreate(Race_0_idx, "Drone", 1, 0, 0, 0, 0))
assert.NoError(t, c.CreateShips(Race_0_idx, "Drone", uint(pn), 7)) assert.NoError(t, c.CreateShips(Race_0_idx, "Drone", uint(pn), 7))
assert.Len(t, slices.Collect(c.RaceShipGroups(Race_0_idx)), 1) assert.Len(t, slices.Collect(c.RaceShipGroups(Race_0_idx)), 1)
assert.Equal(t, uint(7), c.ShipGroup(0).Number) assert.Equal(t, uint(7), c.ShipGroup(0).Number)
@@ -364,7 +364,7 @@ func TestListProducingPlanets(t *testing.T) {
func TestTurnPlanetProductions(t *testing.T) { func TestTurnPlanetProductions(t *testing.T) {
c, g := newCache() c, g := newCache()
assert.NoError(t, c.CreateShipType(Race_0_idx, "Drone", 1, 0, 0, 0, 0)) assert.NoError(t, c.ShipClassCreate(Race_0_idx, "Drone", 1, 0, 0, 0, 0))
assert.NoError(t, g.CreateScience(Race_0.Name, "Equality", 0.25, 0.25, 0.25, 0.25)) assert.NoError(t, g.CreateScience(Race_0.Name, "Equality", 0.25, 0.25, 0.25, 0.25))
c.MustPlanet(R0_Planet_0_num).Resources = 10. c.MustPlanet(R0_Planet_0_num).Resources = 10.
c.MustPlanet(R0_Planet_0_num).Size = 1000. c.MustPlanet(R0_Planet_0_num).Size = 1000.
+2 -2
View File
@@ -13,7 +13,7 @@ import (
"github.com/iliadenisov/galaxy/internal/util" "github.com/iliadenisov/galaxy/internal/util"
) )
func (c *Cache) SetRoute(ri int, rt game.RouteType, origin, destination uint) error { func (c *Cache) PlanetRouteSet(ri int, rt game.RouteType, origin, destination uint) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
p1, ok := c.Planet(origin) p1, ok := c.Planet(origin)
if !ok { if !ok {
@@ -36,7 +36,7 @@ func (c *Cache) SetRoute(ri int, rt game.RouteType, origin, destination uint) er
return nil return nil
} }
func (c *Cache) RemoveRoute(ri int, rt game.RouteType, origin uint) error { func (c *Cache) PlanetRouteRemove(ri int, rt game.RouteType, origin uint) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
p1, ok := c.Planet(origin) p1, ok := c.Planet(origin)
if !ok { if !ok {
+2 -2
View File
@@ -10,7 +10,7 @@ import (
"github.com/iliadenisov/galaxy/internal/util" "github.com/iliadenisov/galaxy/internal/util"
) )
func (c *Cache) CreateScience(ri int, name string, drive, weapons, shileds, cargo float64) error { func (c *Cache) ScienceCreate(ri int, name string, drive, weapons, shileds, cargo float64) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
n, ok := util.ValidateTypeName(name) n, ok := util.ValidateTypeName(name)
if !ok { if !ok {
@@ -47,7 +47,7 @@ func (c *Cache) CreateScience(ri int, name string, drive, weapons, shileds, carg
return nil return nil
} }
func (c *Cache) DeleteScience(ri int, name string) error { func (c *Cache) ScienceRemove(ri int, name string) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
sc := slices.IndexFunc(c.g.Race[ri].Sciences, func(s game.Science) bool { return s.Name == name }) sc := slices.IndexFunc(c.g.Race[ri].Sciences, func(s game.Science) bool { return s.Name == name })
if sc < 0 { if sc < 0 {
+3 -3
View File
@@ -11,7 +11,7 @@ import (
"github.com/iliadenisov/galaxy/internal/util" "github.com/iliadenisov/galaxy/internal/util"
) )
func (c *Cache) CreateShipType(ri int, typeName string, drive float64, ammo int, weapons, shileds, cargo float64) error { func (c *Cache) ShipClassCreate(ri int, typeName string, drive float64, ammo int, weapons, shileds, cargo float64) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
if err := validateShipTypeValues(drive, ammo, weapons, shileds, cargo); err != nil { if err := validateShipTypeValues(drive, ammo, weapons, shileds, cargo); err != nil {
return err return err
@@ -37,7 +37,7 @@ func (c *Cache) CreateShipType(ri int, typeName string, drive float64, ammo int,
return nil return nil
} }
func (c *Cache) MergeShipType(ri int, sourceName, targetName string) error { func (c *Cache) shipClassMerge(ri int, sourceName, targetName string) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
sourceClass, sti, ok := c.ShipClass(ri, sourceName) sourceClass, sti, ok := c.ShipClass(ri, sourceName)
@@ -85,7 +85,7 @@ func (c *Cache) MergeShipType(ri int, sourceName, targetName string) error {
return nil return nil
} }
func (c *Cache) DeleteShipType(ri int, name string) error { func (c *Cache) shipClassRemove(ri int, name string) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
st, i, ok := c.ShipClass(ri, name) st, i, ok := c.ShipClass(ri, name)
if !ok { if !ok {
+11 -10
View File
@@ -53,7 +53,7 @@ func (c *Cache) ShipGroup(groupIndex int) *game.ShipGroup {
return &c.g.ShipGroups[groupIndex] return &c.g.ShipGroups[groupIndex]
} }
func (c *Cache) ShipGroupJoinFleet(groupIndex int, fID *uuid.UUID) { func (c *Cache) internalShipGroupJoinFleet(groupIndex int, fID *uuid.UUID) {
c.validateShipGroupIndex(groupIndex) c.validateShipGroupIndex(groupIndex)
c.g.ShipGroups[groupIndex].FleetID = fID c.g.ShipGroups[groupIndex].FleetID = fID
c.invalidateFleetCache() c.invalidateFleetCache()
@@ -140,7 +140,7 @@ func (c *Cache) DeleteKilledShipGroups() {
func (c *Cache) TurnMergeEqualShipGroups() { func (c *Cache) TurnMergeEqualShipGroups() {
for i := range c.listRaceActingIdx() { for i := range c.listRaceActingIdx() {
c.transferPendingGroups(i) c.transferPendingGroups(i)
c.JoinEqualGroups(i) c.shipGroupMerge(i)
} }
} }
@@ -152,7 +152,8 @@ func (c *Cache) transferPendingGroups(ri int) {
} }
} }
func (c *Cache) JoinEqualGroups(ri int) { // shipGroupMerge merges several equal ship groups into one
func (c *Cache) shipGroupMerge(ri int) {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
raceGroups := make([]game.ShipGroup, 0) raceGroups := make([]game.ShipGroup, 0)
for sg := range c.listShipGroups(ri) { for sg := range c.listShipGroups(ri) {
@@ -194,7 +195,7 @@ func (c *Cache) JoinEqualGroups(ri int) {
} }
} }
func (c *Cache) DisassembleGroup(ri int, groupIndex, quantity uint) error { func (c *Cache) shipGroupDismantle(ri int, groupIndex, quantity uint) error {
sgi, ok := c.raceShipGroupIndex(ri, groupIndex) sgi, ok := c.raceShipGroupIndex(ri, groupIndex)
if !ok { if !ok {
return e.NewEntityNotExistsError("group #%d", groupIndex) return e.NewEntityNotExistsError("group #%d", groupIndex)
@@ -252,7 +253,7 @@ func (c *Cache) DisassembleGroup(ri int, groupIndex, quantity uint) error {
// Корабль может нести только один тип груза одновременно. // Корабль может нести только один тип груза одновременно.
// Возможные типы груза - это колонисты, сырье и промышленность. // Возможные типы груза - это колонисты, сырье и промышленность.
// Груз может быть доставлен на борт корабля с Вашей или не занятой планеты, на которой он имеется. // Груз может быть доставлен на борт корабля с Вашей или не занятой планеты, на которой он имеется.
func (c *Cache) LoadCargo(ri int, groupIndex uint, ct game.CargoType, ships uint, quantity float64) error { func (c *Cache) shipGroupLoad(ri int, groupIndex uint, ct game.CargoType, ships uint, quantity float64) error {
if ships == 0 && quantity > 0 { if ships == 0 && quantity > 0 {
return e.NewCargoQuantityWithoutGroupBreakError() return e.NewCargoQuantityWithoutGroupBreakError()
} }
@@ -322,7 +323,7 @@ func (c *Cache) LoadCargo(ri int, groupIndex uint, ct game.CargoType, ships uint
// Промышленность и Сырье могут быть выгружены на любой планете. // Промышленность и Сырье могут быть выгружены на любой планете.
// Колонисты могут быть высажены только на планеты, принадлежащие Вам или на необитаемые планеты. // Колонисты могут быть высажены только на планеты, принадлежащие Вам или на необитаемые планеты.
func (c *Cache) UnloadCargo(ri int, groupIndex uint, ships uint, quantity float64) error { func (c *Cache) shipGroupUnload(ri int, groupIndex uint, ships uint, quantity float64) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
if ships == 0 && quantity > 0 { if ships == 0 && quantity > 0 {
return e.NewCargoQuantityWithoutGroupBreakError() return e.NewCargoQuantityWithoutGroupBreakError()
@@ -404,7 +405,7 @@ func (c *Cache) unsafeUnloadCargo(sgi int, q float64) {
p.UnpackCapital() p.UnpackCapital()
} }
func (c *Cache) TransferGroup(ri, riAccept int, groupIndex, quantity uint) (err error) { func (c *Cache) shipGroupTransfer(ri, riAccept int, groupIndex, quantity uint) (err error) {
if ri == riAccept { if ri == riAccept {
return e.NewSameRaceError(c.g.Race[riAccept].Name) return e.NewSameRaceError(c.g.Race[riAccept].Name)
} }
@@ -429,7 +430,7 @@ func (c *Cache) TransferGroup(ri, riAccept int, groupIndex, quantity uint) (err
return e.NewGiveawayGroupShipsTypeNotEqualError("race %q, ship type %q", c.g.Race[riAccept].Name, c.g.Race[riAccept].ShipTypes[stAcc].Name) return e.NewGiveawayGroupShipsTypeNotEqualError("race %q, ship type %q", c.g.Race[riAccept].Name, c.g.Race[riAccept].ShipTypes[stAcc].Name)
} }
if stAcc < 0 { if stAcc < 0 {
err = c.CreateShipType(riAccept, err = c.ShipClassCreate(riAccept,
st.Name, st.Name,
st.Drive.F(), st.Drive.F(),
int(st.Armament), int(st.Armament),
@@ -461,7 +462,7 @@ func (c *Cache) TransferGroup(ri, riAccept int, groupIndex, quantity uint) (err
return nil return nil
} }
func (c *Cache) BreakGroup(ri int, groupIndex, quantity uint) error { func (c *Cache) ShipGroupBreak(ri int, groupIndex, quantity uint) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
sgi := -1 sgi := -1
for i := range c.ShipGroupsIndex() { for i := range c.ShipGroupsIndex() {
@@ -483,7 +484,7 @@ func (c *Cache) BreakGroup(ri int, groupIndex, quantity uint) error {
} }
if quantity == 0 || quantity == c.ShipGroup(sgi).Number { if quantity == 0 || quantity == c.ShipGroup(sgi).Number {
c.ShipGroupJoinFleet(sgi, nil) c.internalShipGroupJoinFleet(sgi, nil)
} else { } else {
if _, err := c.breakGroupSafe(ri, groupIndex, quantity); err != nil { if _, err := c.breakGroupSafe(ri, groupIndex, quantity); err != nil {
return err return err
+2 -2
View File
@@ -6,7 +6,7 @@ import (
"github.com/iliadenisov/galaxy/internal/util" "github.com/iliadenisov/galaxy/internal/util"
) )
func (c *Cache) SendGroup(ri int, groupIndex, planetNumber, quantity uint) error { func (c *Cache) shipGroupSend(ri int, groupIndex, planetNumber, quantity uint) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
sgi, ok := c.raceShipGroupIndex(ri, groupIndex) sgi, ok := c.raceShipGroupIndex(ri, groupIndex)
@@ -51,7 +51,7 @@ func (c *Cache) SendGroup(ri int, groupIndex, planetNumber, quantity uint) error
if p1.Number == p2.Number { if p1.Number == p2.Number {
c.UnsendShips(c.ShipGroup(sgi)) c.UnsendShips(c.ShipGroup(sgi))
c.JoinEqualGroups(ri) c.shipGroupMerge(ri)
return nil return nil
} }
+3 -3
View File
@@ -127,7 +127,7 @@ func TestBreakGroup(t *testing.T) {
assert.Len(t, slices.Collect(c.ListFleets(Race_0_idx)), 1) assert.Len(t, slices.Collect(c.ListFleets(Race_0_idx)), 1)
// group #1 -> group #3 (5 new, 8 left) // group #1 -> group #3 (5 new, 8 left)
assert.NoError(t, c.BreakGroup(Race_0_idx, 1, 5)) // group #3 (2) assert.NoError(t, c.ShipGroupBreak(Race_0_idx, 1, 5)) // group #3 (2)
assert.Len(t, slices.Collect(c.RaceShipGroups(Race_0_idx)), 3) assert.Len(t, slices.Collect(c.RaceShipGroups(Race_0_idx)), 3)
assert.Equal(t, uint(8), c.ShipGroup(0).Number) assert.Equal(t, uint(8), c.ShipGroup(0).Number)
assert.NotNil(t, c.ShipGroup(0).FleetID) assert.NotNil(t, c.ShipGroup(0).FleetID)
@@ -139,14 +139,14 @@ func TestBreakGroup(t *testing.T) {
// group #1 -> group #4 (2 new, 6 left) // group #1 -> group #4 (2 new, 6 left)
c.ShipGroup(0).CargoType = game.CargoColonist.Ref() c.ShipGroup(0).CargoType = game.CargoColonist.Ref()
c.ShipGroup(0).Load = 32.8 // 8 ships c.ShipGroup(0).Load = 32.8 // 8 ships
assert.NoError(t, c.BreakGroup(Race_0_idx, 1, 2)) // group #4 (3) assert.NoError(t, c.ShipGroupBreak(Race_0_idx, 1, 2)) // group #4 (3)
assert.Len(t, slices.Collect(c.RaceShipGroups(Race_0_idx)), 4) assert.Len(t, slices.Collect(c.RaceShipGroups(Race_0_idx)), 4)
assert.Equal(t, uint(6), c.ShipGroup(0).Number) assert.Equal(t, uint(6), c.ShipGroup(0).Number)
assert.NotNil(t, c.ShipGroup(0).FleetID) assert.NotNil(t, c.ShipGroup(0).FleetID)
assert.Equal(t, uint(2), c.ShipGroup(3).Number) assert.Equal(t, uint(2), c.ShipGroup(3).Number)
assert.Equal(t, uint(4), c.ShipGroup(3).Index) assert.Equal(t, uint(4), c.ShipGroup(3).Index)
assert.Nil(t, c.ShipGroup(3).FleetID) assert.Nil(t, c.ShipGroup(3).FleetID)
assert.NoError(t, c.JoinShipGroupToFleet(Race_0_idx, fleet, 4, 0)) assert.NoError(t, c.ShipGroupJoinFleet(Race_0_idx, fleet, 4, 0))
assert.NotNil(t, c.ShipGroup(3).FleetID) assert.NotNil(t, c.ShipGroup(3).FleetID)
assert.Equal(t, game.CargoColonist.Ref(), c.ShipGroup(0).CargoType) assert.Equal(t, game.CargoColonist.Ref(), c.ShipGroup(0).CargoType)
+1 -1
View File
@@ -9,7 +9,7 @@ import (
"github.com/iliadenisov/galaxy/internal/model/game" "github.com/iliadenisov/galaxy/internal/model/game"
) )
func (c *Cache) UpgradeGroup(ri int, groupIndex uint, techInput string, limitShips uint, limitLevel float64) error { func (c *Cache) shipGroupUpgrade(ri int, groupIndex uint, techInput string, limitShips uint, limitLevel float64) error {
c.validateRaceIndex(ri) c.validateRaceIndex(ri)
sgi, ok := c.raceShipGroupIndex(ri, groupIndex) sgi, ok := c.raceShipGroupIndex(ri, groupIndex)
if !ok { if !ok {
+20
View File
@@ -10,8 +10,28 @@ type Command struct {
type CommandType string type CommandType string
const ( const (
CommandTypeQuit CommandType = "quit"
CommandTypeVote CommandType = "vote" CommandTypeVote CommandType = "vote"
CommandTypeRelation CommandType = "declarePeace" CommandTypeRelation CommandType = "declarePeace"
CommandShipClassCreate CommandType = "shipClassCreate"
CommandShipClassMerge CommandType = "shipClassMerge"
CommandShipClassRemove CommandType = "shipClassRemove"
CommandShipGroupLoad CommandType = "shipGroupLoad"
CommandShipGroupUnload CommandType = "shipGroupUnload"
CommandShipGroupSend CommandType = "shipGroupSend"
CommandShipGroupUpgrade CommandType = "shipGroupUpgrade"
CommandShipGroupMerge CommandType = "shipGroupMerge"
CommandShipGroupDismantle CommandType = "shipGroupDismantle"
CommandShipGroupTransfer CommandType = "shipGroupTransfer"
CommandTypeShipGroupJoinFleet CommandType = "shipGroupJoinFleet"
CommandTypeFleetMerge CommandType = "fleetMerge"
CommandTypeFleetSend CommandType = "fleetSend"
CommandTypeScienceCreate CommandType = "scienceCreate"
CommandTypeScienceRemove CommandType = "scienceRemove"
CommandTypePlanetRename CommandType = "planetRename"
CommandTypePlanetProduce CommandType = "planetProduce"
CommandTypePlanetRouteSet CommandType = "planetRouteSet"
CommandTypePlanetRouteRemove CommandType = "planetRouteRemove"
) )
type CommandMeta struct { type CommandMeta struct {