wip: refactor controller

This commit is contained in:
Ilia Denisov
2026-01-14 22:17:24 +02:00
parent 1bfc9242af
commit fe8a8d4150
43 changed files with 4710 additions and 2188 deletions
+68 -68
View File
@@ -1,80 +1,80 @@
package game
import (
"fmt"
"slices"
// import (
// "fmt"
// "slices"
e "github.com/iliadenisov/galaxy/internal/error"
"github.com/iliadenisov/galaxy/internal/util"
)
// 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) 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()
}
// 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)
}
// 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)
}
}
// 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
}
// if *sourcePlanet == planetNumber {
// UnsendFleet(g, ri, fi)
// return nil
// }
LaunchFleet(g, ri, fi, planetNumber)
// LaunchFleet(g, ri, fi, planetNumber)
return nil
}
// 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 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)
}
}
// 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)
// }
// }