refactor: game funcs moved to controller
This commit is contained in:
@@ -57,7 +57,6 @@ func (c *Cache) FleetSpeed(fl game.Fleet) float64 {
|
||||
continue
|
||||
}
|
||||
st := c.ShipGroupShipClass(sg)
|
||||
// st := g.mustShipType(g.ShipGroups[sg].TypeID)
|
||||
typeSpeed := c.ShipGroup(sg).Speed(st)
|
||||
if typeSpeed < result {
|
||||
result = typeSpeed
|
||||
@@ -85,20 +84,6 @@ func (c *Cache) JoinShipGroupToFleet(ri int, fleetName string, groupIndex, quant
|
||||
return e.NewEntityNotExistsError("group #%d", groupIndex)
|
||||
}
|
||||
|
||||
// sgi := -1
|
||||
// var maxIndex uint
|
||||
// for i, sg := range g.listIndexShipGroups(ri) {
|
||||
// if sgi < 0 && sg.Index == groupIndex {
|
||||
// sgi = i
|
||||
// }
|
||||
// if sg.Index > maxIndex {
|
||||
// maxIndex = sg.Index
|
||||
// }
|
||||
// }
|
||||
// if sgi < 0 {
|
||||
// return e.NewEntityNotExistsError("group #%d", groupIndex)
|
||||
// }
|
||||
|
||||
if c.ShipGroup(sgi).State() != game.StateInOrbit {
|
||||
return e.NewShipsBusyError()
|
||||
}
|
||||
@@ -107,6 +92,12 @@ func (c *Cache) JoinShipGroupToFleet(ri int, fleetName string, groupIndex, quant
|
||||
return e.NewJoinFleetGroupNumberNotEnoughError("%d<%d", c.ShipGroup(sgi).Number, quantity)
|
||||
}
|
||||
|
||||
var oldFleetID *uuid.UUID
|
||||
if c.ShipGroup(sgi).FleetID != nil {
|
||||
fID := *c.ShipGroup(sgi).FleetID
|
||||
oldFleetID = &fID
|
||||
}
|
||||
|
||||
fi, ok := c.fleetIndex(ri, name)
|
||||
if !ok {
|
||||
fi, err = c.createFleet(ri, name)
|
||||
@@ -120,22 +111,35 @@ func (c *Cache) JoinShipGroupToFleet(ri int, fleetName string, groupIndex, quant
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: if g.ShipGroups[sgi].FleetID != nil { // delete old fleet if empty, ALSO mind breaking group }
|
||||
if quantity > 0 && quantity < c.ShipGroup(sgi).Number {
|
||||
nsgi, err := c.breakGroupSafe(ri, groupIndex, quantity)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sgi = nsgi
|
||||
// newGroup := g.ShipGroups[sgi]
|
||||
// newGroup.Number -= quantity
|
||||
// g.ShipGroups[sgi].Number = quantity
|
||||
// newGroup.Index = maxIndex + 1
|
||||
// g.ShipGroups = append(g.ShipGroups, newGroup)
|
||||
}
|
||||
|
||||
// g.ShipGroups[sgi].FleetID = &g.Fleets[fi].ID
|
||||
c.ShipGroupFleet(sgi, &c.g.Fleets[fi].ID)
|
||||
c.ShipGroupJoinFleet(sgi, &c.g.Fleets[fi].ID)
|
||||
|
||||
if oldFleetID != nil {
|
||||
keepOldFleet := false
|
||||
for sg := range c.listShipGroups(ri) {
|
||||
if sg.FleetID != nil && *sg.FleetID == *oldFleetID {
|
||||
keepOldFleet = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !keepOldFleet {
|
||||
oldFleetIndex, ok := c.FleetIndex(*oldFleetID)
|
||||
if !ok {
|
||||
return e.NewGameStateError("old fleet index not found by ID=%v", *oldFleetID)
|
||||
}
|
||||
if err := c.deleteFleetSafe(ri, c.g.Fleets[oldFleetIndex].Name); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -176,7 +180,7 @@ func (c *Cache) createFleet(ri int, name string) (int, error) {
|
||||
return 0, e.NewEntityTypeNameValidationError("%q", n)
|
||||
}
|
||||
if _, ok := c.fleetIndex(ri, n); ok {
|
||||
return 0, e.NewEntityTypeNameDuplicateError("fleet %w", n)
|
||||
return 0, e.NewEntityTypeNameDuplicateError("fleet %q", n)
|
||||
}
|
||||
fleets := slices.Clone(c.g.Fleets)
|
||||
fleets = append(fleets, game.Fleet{
|
||||
@@ -202,17 +206,15 @@ 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)
|
||||
}
|
||||
}
|
||||
if c.cacheFleetIndexByID != nil {
|
||||
delete(c.cacheFleetIndexByID, c.g.Fleets[fi].ID)
|
||||
}
|
||||
c.g.Fleets = append(c.g.Fleets[:fi], c.g.Fleets[fi+1:]...)
|
||||
c.cacheFleetIndexByID = nil
|
||||
return nil
|
||||
}
|
||||
|
||||
// Internal funcs
|
||||
|
||||
func (c *Cache) FleetIndex(ID uuid.UUID) (int, bool) {
|
||||
if c.cacheFleetIndexByID == nil {
|
||||
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
|
||||
@@ -270,16 +272,8 @@ func (c *Cache) fleetIndex(ri int, name string) (int, bool) {
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Cache) mustFleetIndex(ri int, name string) int {
|
||||
if v, ok := c.fleetIndex(ri, name); ok {
|
||||
return v
|
||||
} else {
|
||||
panic(fmt.Sprintf("fleet not found: race_idx=%d name=%q", ri, name))
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Cache) validateFleetIndex(i int) {
|
||||
if i >= len(c.g.Fleets) {
|
||||
panic(fmt.Sprintf("race index out of range: %d >= %d", i, len(c.g.Fleets)))
|
||||
panic(fmt.Sprintf("fleet index out of range: %d >= %d", i, len(c.g.Fleets)))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user