[golang] implement shipyards visits
This commit is contained in:
parent
3cae67aea4
commit
bd2fb50c81
15 changed files with 299 additions and 45 deletions
|
@ -2,7 +2,7 @@ package agent
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"slices"
|
||||
|
||||
"git.adyxax.org/adyxax/spacetraders/golang/pkg/model"
|
||||
)
|
||||
|
@ -12,13 +12,44 @@ func (a *agent) visitAllShipyards(ship *model.Ship) error {
|
|||
if err != nil {
|
||||
return fmt.Errorf("failed to visit all shipyards: %w", err)
|
||||
}
|
||||
waypoints, err := a.client.ListWaypointsInSystem(system, a.db)
|
||||
shipyards, err := a.listShipyardsInSystem(system)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to visit all shipyards: %w", err)
|
||||
}
|
||||
//slog.Info("get system", "system", system.Waypoints, "err", err)
|
||||
//waypoint, err := a.client.GetWaypoint("X1-RR14-J88", a.db)
|
||||
slog.Info("get waypoint", "waypoint", waypoints[0])
|
||||
|
||||
return fmt.Errorf("failed to visit all shipyards: not implemented yet")
|
||||
shipyards = slices.DeleteFunc(shipyards, func(shipyard model.Shipyard) bool {
|
||||
// filter out shipyards for which we already have ships prices
|
||||
if shipyard.Ships != nil {
|
||||
return true
|
||||
}
|
||||
// filter out shipyards for which a ship is either present or inbound
|
||||
waypoint, err := a.client.GetWaypoint(shipyard.Symbol, a.db)
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("failed to visit all shipyards: %w", err))
|
||||
}
|
||||
return a.isThereAShipAtWaypoint(waypoint)
|
||||
})
|
||||
if len(shipyards) == 0 {
|
||||
return nil
|
||||
}
|
||||
waypoint, err := a.client.GetWaypoint(ship.Nav.WaypointSymbol, a.db)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to visit all shipyards: %w", err)
|
||||
}
|
||||
waypoints := make([]model.Waypoint, 0)
|
||||
for i := range shipyards {
|
||||
waypoint, err := a.client.GetWaypoint(shipyards[i].Symbol, a.db)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to visit all shipyards: %w", err)
|
||||
}
|
||||
waypoints = append(waypoints, *waypoint)
|
||||
}
|
||||
sortByDistanceFrom(*waypoint, waypoints)
|
||||
if err := a.client.Navigate(ship, &waypoints[0], a.db); err != nil {
|
||||
return fmt.Errorf("failed to visit all shipyards: %w", err)
|
||||
}
|
||||
if _, err := a.client.GetShipyard(&waypoints[0], a.db); err != nil {
|
||||
return fmt.Errorf("failed to visit all shipyards: %w", err)
|
||||
}
|
||||
// TODO get market data
|
||||
return a.visitAllShipyards(ship)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue