package game // import ( // "fmt" // "slices" // e "github.com/iliadenisov/galaxy/internal/error" // "github.com/iliadenisov/galaxy/internal/util" // ) // func (g *Game) SendFleet(raceName, fleetName string, planetNumber uint) error { // ri, err := g.raceIndex(raceName) // if err != nil { // return err // } // fi := g.fleetIndex(ri, fleetName) // if fi < 0 { // return e.NewEntityNotExistsError("fleet %q", fleetName) // } // return g.sendFleetInternal(ri, fi, planetNumber) // } // func (g *Game) sendFleetInternal(ri, fi int, planetNumber uint) error { // state, sourcePlanet, _ := FleetState(g, g.Fleets[fi].ID) // if StateInOrbit != state && StateLaunched != state { // return e.NewShipsBusyError() // } // p1, ok := PlanetByNum(g, *sourcePlanet) // if !ok { // return e.NewGameStateError("source planet #%d does not exists", sourcePlanet) // } // p2, ok := PlanetByNum(g, planetNumber) // if !ok { // return e.NewEntityNotExistsError("destination planet #%d", planetNumber) // } // rangeToDestination := util.ShortDistance(g.Map.Width, g.Map.Height, p1.X, p1.Y, p2.X, p2.Y) // if rangeToDestination > g.Race[ri].FlightDistance() { // return e.NewSendUnreachableDestinationError("range=%.03f", rangeToDestination) // } // for sg := range FleetGroups(g, ri, fi) { // st, ok := ShipClass(g, ri, sg.TypeID) // if !ok { // return e.NewGameStateError("not found: ShipType ID=%v", sg.TypeID) // } // if st.DriveBlockMass() == 0 { // return e.NewSendShipHasNoDrivesError("Class=%s", st.Name) // } // } // if *sourcePlanet == planetNumber { // UnsendFleet(g, ri, fi) // return nil // } // LaunchFleet(g, ri, fi, planetNumber) // return nil // } // func LaunchFleet(g *Game, ri, fi int, destination uint) { // for sg := range FleetGroups(g, ri, fi) { // sgi := slices.IndexFunc(g.ShipGroups, func(s ShipGroup) bool { return sg.Index == s.Index }) // if sgi < 0 { // panic(fmt.Sprintf("LauncgFleet: cannot find ship group index=%d", sg.Index)) // } // g.ShipGroups[sgi] = LaunchShips(sg, destination) // } // } // func UnsendFleet(g *Game, ri, fi int) { // for sg := range FleetGroups(g, ri, fi) { // sgi := slices.IndexFunc(g.ShipGroups, func(s ShipGroup) bool { return sg.Index == s.Index }) // if sgi < 0 { // panic(fmt.Sprintf("UnsendFleet: cannot find ship group index=%d", sg.Index)) // } // g.ShipGroups[sgi] = UnsendShips(sg) // } // }