race quit, transfer state, refactor
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user