race quit, transfer state, refactor

This commit is contained in:
Ilia Denisov
2026-02-07 01:59:11 +02:00
parent 43ba5eb07c
commit fc73cbf83a
27 changed files with 520 additions and 341 deletions
+21 -24
View File
@@ -100,14 +100,6 @@ func (c *Cache) FleetSpeedAndMass(fi int) (float64, float64) {
return speed, mass
}
func (c *Controller) JoinShipGroupToFleet(raceName, fleetName string, group, count uint) error {
ri, err := c.Cache.raceIndex(raceName)
if err != nil {
return err
}
return c.Cache.JoinShipGroupToFleet(ri, fleetName, group, count)
}
func (c *Cache) JoinShipGroupToFleet(ri int, fleetName string, groupIndex, quantity uint) (err error) {
c.validateRaceIndex(ri)
name, ok := util.ValidateTypeName(fleetName)
@@ -119,8 +111,8 @@ func (c *Cache) JoinShipGroupToFleet(ri int, fleetName string, groupIndex, quant
return e.NewEntityNotExistsError("group #%d", groupIndex)
}
if c.ShipGroup(sgi).State() != game.StateInOrbit {
return e.NewShipsBusyError()
if state := c.ShipGroup(sgi).State(); state != game.StateInOrbit {
return e.NewShipsBusyError("state: %s", state)
}
if c.ShipGroup(sgi).Number < quantity {
@@ -178,14 +170,6 @@ func (c *Cache) JoinShipGroupToFleet(ri int, fleetName string, groupIndex, quant
return nil
}
func (c *Controller) JoinFleets(raceName, fleetSourceName, fleetTargetName string) error {
ri, err := c.Cache.raceIndex(raceName)
if err != nil {
return err
}
return c.Cache.JoinFleets(ri, fleetSourceName, fleetTargetName)
}
func (c *Cache) JoinFleets(ri int, fleetSourceName, fleetTargetName string) (err error) {
fiSource, ok := c.fleetIndex(ri, fleetSourceName)
if !ok {
@@ -242,19 +226,21 @@ func (c *Cache) deleteFleetSafe(ri int, name string) error {
return e.NewEntityInUseError("fleet %s: race %s, group #%d", name, c.g.Race[ri].Name, sg.Number)
}
}
c.g.Fleets = append(c.g.Fleets[:fi], c.g.Fleets[fi+1:]...)
c.cacheFleetIndexByID = nil
c.unsafeDeleteFleet(fi)
return nil
}
func (c *Cache) unsafeDeleteFleet(fi int) {
c.validateFleetIndex(fi)
c.g.Fleets = append(c.g.Fleets[:fi], c.g.Fleets[fi+1:]...)
c.invalidateFleetCache()
}
// Internal funcs
func (c *Cache) FleetIndex(ID uuid.UUID) (int, bool) {
if len(c.cacheFleetIndexByID) == 0 {
c.cacheFleetIndexByID = make(map[uuid.UUID]int)
for i := range c.g.Fleets {
c.cacheFleetIndexByID[c.g.Fleets[i].ID] = i
}
c.cacheFleetIndex()
}
if v, ok := c.cacheFleetIndexByID[ID]; ok {
return v, true
@@ -263,6 +249,17 @@ func (c *Cache) FleetIndex(ID uuid.UUID) (int, bool) {
}
}
func (c *Cache) cacheFleetIndex() {
if c.cacheFleetIndexByID != nil {
clear(c.cacheFleetIndexByID)
} else {
c.cacheFleetIndexByID = make(map[uuid.UUID]int)
}
for i := range c.g.Fleets {
c.cacheFleetIndexByID[c.g.Fleets[i].ID] = i
}
}
func (c *Cache) MustFleetIndex(ID uuid.UUID) int {
if v, ok := c.FleetIndex(ID); ok {
return v