cmd: join group to fleet
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"iter"
|
||||
"math"
|
||||
"slices"
|
||||
|
||||
@@ -30,7 +31,7 @@ func (g Game) FleetSpeed(fl Fleet) float64 {
|
||||
return result
|
||||
}
|
||||
|
||||
func (g Game) JoinShipGroupToFleet(raceName, fleetName string, group, count uint) error {
|
||||
func (g *Game) JoinShipGroupToFleet(raceName, fleetName string, group, count uint) error {
|
||||
ri, err := g.raceIndex(raceName)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -38,14 +39,14 @@ func (g Game) JoinShipGroupToFleet(raceName, fleetName string, group, count uint
|
||||
return g.joinShipGroupToFleetInternal(ri, fleetName, group, count)
|
||||
}
|
||||
|
||||
func (g Game) joinShipGroupToFleetInternal(ri int, fleetName string, group, count uint) (err error) {
|
||||
func (g *Game) joinShipGroupToFleetInternal(ri int, fleetName string, group, count uint) (err error) {
|
||||
name, ok := validateTypeName(fleetName)
|
||||
if !ok {
|
||||
return e.NewEntityTypeNameValidationError("%q", name)
|
||||
}
|
||||
sgi := -1
|
||||
var maxIndex uint
|
||||
for i, sg := range g.listShipGroups(ri) {
|
||||
for i, sg := range g.listIndexShipGroups(ri) {
|
||||
if sgi < 0 && sg.Index == group {
|
||||
sgi = i
|
||||
}
|
||||
@@ -87,7 +88,7 @@ func (g Game) fleetIndex(ri int, name string) int {
|
||||
return slices.IndexFunc(g.Fleets, func(f Fleet) bool { return f.OwnerID == g.Race[ri].ID && f.Name == name })
|
||||
}
|
||||
|
||||
func (g Game) createFleet(ri int, name string) (int, error) {
|
||||
func (g *Game) createFleet(ri int, name string) (int, error) {
|
||||
n, ok := validateTypeName(name)
|
||||
if !ok {
|
||||
return 0, e.NewEntityTypeNameValidationError("%q", n)
|
||||
@@ -102,3 +103,25 @@ func (g Game) createFleet(ri int, name string) (int, error) {
|
||||
})
|
||||
return len(g.Fleets) - 1, nil
|
||||
}
|
||||
|
||||
func (g Game) listFleets(ri int) iter.Seq[Fleet] {
|
||||
return func(yield func(Fleet) bool) {
|
||||
for _, fl := range g.listIndexFleets(ri) {
|
||||
if !yield(fl) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (g Game) listIndexFleets(ri int) iter.Seq2[int, Fleet] {
|
||||
return func(yield func(int, Fleet) bool) {
|
||||
for i := range g.Fleets {
|
||||
if g.Fleets[i].OwnerID == g.Race[ri].ID {
|
||||
if !yield(i, g.Fleets[i]) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user