94 lines
2.6 KiB
Go
94 lines
2.6 KiB
Go
package game
|
|
|
|
// import (
|
|
// "slices"
|
|
|
|
// e "github.com/iliadenisov/galaxy/internal/error"
|
|
// "github.com/iliadenisov/galaxy/internal/util"
|
|
// )
|
|
|
|
// func (g *Game) SendGroup(raceName string, groupIndex, planetNumber, quantity uint) error {
|
|
// ri, err := g.raceIndex(raceName)
|
|
// if err != nil {
|
|
// return err
|
|
// }
|
|
// return g.sendGroupInternal(ri, groupIndex, planetNumber, quantity)
|
|
// }
|
|
|
|
// func (g *Game) sendGroupInternal(ri int, groupIndex, planetNumber, quantity uint) error {
|
|
// sgi := -1
|
|
// for i, sg := range g.listIndexShipGroups(ri) {
|
|
// if sgi < 0 && sg.Index == groupIndex {
|
|
// sgi = i
|
|
// }
|
|
// }
|
|
// if sgi < 0 {
|
|
// return e.NewEntityNotExistsError("group #%d", groupIndex)
|
|
// }
|
|
|
|
// var sti int
|
|
// if sti = slices.IndexFunc(g.Race[ri].ShipTypes, func(st ShipType) bool { return st.ID == g.ShipGroups[sgi].TypeID }); sti < 0 {
|
|
// // hard to test, need manual game data invalidation
|
|
// return e.NewGameStateError("not found: ShipType ID=%v", g.ShipGroups[sgi].TypeID)
|
|
// }
|
|
// st := g.Race[ri].ShipTypes[sti]
|
|
|
|
// if st.DriveBlockMass() == 0 {
|
|
// return e.NewSendShipHasNoDrivesError()
|
|
// }
|
|
|
|
// sourcePlanet, ok := g.ShipGroups[sgi].OnPlanet()
|
|
// if !ok {
|
|
// return e.NewShipsBusyError()
|
|
// }
|
|
|
|
// if g.ShipGroups[sgi].Number < quantity {
|
|
// return e.NewBeakGroupNumberNotEnoughError("%d<%d", g.ShipGroups[sgi].Number, quantity)
|
|
// }
|
|
|
|
// 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)
|
|
// }
|
|
|
|
// if quantity > 0 && quantity < g.ShipGroups[sgi].Number {
|
|
// nsgi, err := g.breakGroupSafe(ri, groupIndex, quantity)
|
|
// if err != nil {
|
|
// return err
|
|
// }
|
|
// sgi = nsgi
|
|
// }
|
|
|
|
// if sourcePlanet == planetNumber {
|
|
// g.ShipGroups[sgi] = UnsendShips(g.ShipGroups[sgi])
|
|
// g.joinEqualGroupsInternal(ri)
|
|
// return nil
|
|
// }
|
|
|
|
// g.ShipGroups[sgi] = LaunchShips(g.ShipGroups[sgi], planetNumber)
|
|
|
|
// return nil
|
|
// }
|
|
|
|
// func LaunchShips(sg ShipGroup, destination uint) ShipGroup {
|
|
// sg.StateInSpace = &InSpace{
|
|
// Origin: sg.Destination,
|
|
// }
|
|
// sg.Destination = destination
|
|
// return sg
|
|
// }
|
|
|
|
// func UnsendShips(sg ShipGroup) ShipGroup {
|
|
// sg.Destination = sg.StateInSpace.Origin
|
|
// sg.StateInSpace = nil
|
|
// return sg
|
|
// }
|