cmd: join group to fleet

This commit is contained in:
Ilia Denisov
2025-11-26 23:03:07 +03:00
parent c86ab84ad7
commit 92ad81b2a2
6 changed files with 133 additions and 36 deletions
+27 -4
View File
@@ -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
}
}
}
}
}