[haskell] implemented ship refueling
This commit is contained in:
parent
dde6abef39
commit
51705b930f
3 changed files with 46 additions and 5 deletions
|
@ -5,6 +5,7 @@ import SpaceTraders.APIClient.Agent
|
||||||
import SpaceTraders.APIClient.Contracts
|
import SpaceTraders.APIClient.Contracts
|
||||||
import SpaceTraders.APIClient.Ships
|
import SpaceTraders.APIClient.Ships
|
||||||
import SpaceTraders.Automation.Init
|
import SpaceTraders.Automation.Init
|
||||||
|
import SpaceTraders.Database.Ships
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
|
@ -15,10 +16,14 @@ main = do
|
||||||
main' :: SpaceTradersT ()
|
main' :: SpaceTradersT ()
|
||||||
main' = do
|
main' = do
|
||||||
-- refresh our core objects
|
-- refresh our core objects
|
||||||
_ <- myAgent
|
(Right _) <- myAgent
|
||||||
_ <- myContracts
|
(Right _) <- myContracts
|
||||||
(Right ships) <- myShips -- work around to fetch the initial probe
|
(Right _) <- myShips
|
||||||
|
-- Testing
|
||||||
|
ships <- getShips
|
||||||
let cmdShip = head ships
|
let cmdShip = head ships
|
||||||
(Right t) <- orbit cmdShip
|
t <- refuel cmdShip
|
||||||
liftIO $ print t
|
liftIO . print $ case t of
|
||||||
|
(Right r) -> "response: " ++ show r
|
||||||
|
(Left e) -> "error: " ++ show e
|
||||||
return ()
|
return ()
|
||||||
|
|
|
@ -6,6 +6,7 @@ module SpaceTraders.APIClient.Ships
|
||||||
( dock
|
( dock
|
||||||
, myShips
|
, myShips
|
||||||
, orbit
|
, orbit
|
||||||
|
, refuel
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.Aeson.Types
|
import Data.Aeson.Types
|
||||||
|
@ -16,7 +17,10 @@ import Network.HTTP.Simple
|
||||||
import SpaceTraders
|
import SpaceTraders
|
||||||
import SpaceTraders.APIClient.Client
|
import SpaceTraders.APIClient.Client
|
||||||
import SpaceTraders.APIClient.Pagination
|
import SpaceTraders.APIClient.Pagination
|
||||||
|
import SpaceTraders.Database.Agents
|
||||||
import SpaceTraders.Database.Ships
|
import SpaceTraders.Database.Ships
|
||||||
|
import qualified SpaceTraders.Model.Agent
|
||||||
|
import SpaceTraders.Model.Fuel
|
||||||
import SpaceTraders.Model.Nav
|
import SpaceTraders.Model.Nav
|
||||||
import SpaceTraders.Model.Ship
|
import SpaceTraders.Model.Ship
|
||||||
|
|
||||||
|
@ -62,3 +66,27 @@ orbit ship = if isInOrbit ship then pure (Right ship) else orbit'
|
||||||
let s = ship{SpaceTraders.Model.Ship.nav=n}
|
let s = ship{SpaceTraders.Model.Ship.nav=n}
|
||||||
setShip s
|
setShip s
|
||||||
return $ Right s
|
return $ Right s
|
||||||
|
|
||||||
|
data RefuelMessage = RefuelMessage { agent :: SpaceTraders.Model.Agent.Agent
|
||||||
|
, fuel :: Fuel
|
||||||
|
} deriving (FromJSON, Generic, Show)
|
||||||
|
|
||||||
|
refuel :: Ship -> SpaceTradersT (APIResponse Ship)
|
||||||
|
refuel ship = if overNinetyPercentFuel ship then pure (Right ship) else refuel'
|
||||||
|
where
|
||||||
|
refuel' = do
|
||||||
|
resp <- dock ship
|
||||||
|
case resp of
|
||||||
|
(Left e) -> return $ Left e
|
||||||
|
(Right ship') -> refuel'' ship'
|
||||||
|
refuel'' ship' = do
|
||||||
|
-- TODO check if we are at a marketplace, that sells fuel
|
||||||
|
resp' <- send $ setRequestPath (T.encodeUtf8 $ mconcat ["/v2/my/ships/", symbol ship, "/refuel"])
|
||||||
|
. setRequestMethod "POST" :: SpaceTradersT (APIResponse RefuelMessage)
|
||||||
|
case resp' of
|
||||||
|
Left e -> return $ Left e
|
||||||
|
Right (RefuelMessage a f) -> do
|
||||||
|
setAgent a
|
||||||
|
let s = ship'{SpaceTraders.Model.Ship.fuel=f}
|
||||||
|
setShip s
|
||||||
|
return $ Right s
|
||||||
|
|
|
@ -6,6 +6,7 @@ module SpaceTraders.Model.Ship
|
||||||
( Ship(..)
|
( Ship(..)
|
||||||
, isDocked
|
, isDocked
|
||||||
, isInOrbit
|
, isInOrbit
|
||||||
|
, overNinetyPercentFuel
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
|
@ -40,3 +41,10 @@ isDocked ship = status (nav ship) == "DOCKED"
|
||||||
|
|
||||||
isInOrbit :: Ship -> Bool
|
isInOrbit :: Ship -> Bool
|
||||||
isInOrbit = not . isDocked
|
isInOrbit = not . isDocked
|
||||||
|
|
||||||
|
overNinetyPercentFuel :: Ship -> Bool
|
||||||
|
overNinetyPercentFuel ship = curr * 10 > capa * 9
|
||||||
|
where
|
||||||
|
curr = current f
|
||||||
|
capa = SpaceTraders.Model.Fuel.capacity f
|
||||||
|
f = fuel ship
|
||||||
|
|
Loading…
Add table
Reference in a new issue