starrover2-0.0.9: src/Mission.hs
module Mission
where
import Control.Monad (liftM)
import Data.Maybe (isJust)
import Data.List (find)
import qualified Data.Edison.Assoc.AssocList as M
type MissionMap = M.FM String Mission
data MissionCategory = Messenger
| SecretMessage
data Mission = MessengerMission String
| SecretMessageMission String
emptyMissionMap :: MissionMap
emptyMissionMap = M.empty
missionFor :: String -> MissionMap -> Maybe Mission
missionFor = M.lookupM
hasMissionFor :: String -> MissionMap -> Bool
hasMissionFor s m = isJust $ missionFor s m
setMission :: String -> Mission -> MissionMap -> MissionMap
setMission = M.insert
removeMission :: String -> MissionMap -> MissionMap
removeMission = M.delete
minRepForMission = 4
pointsForMessengerMission, pointsForSecretMessage, pointsUntilThePoliceArrives :: Int
pointsForMessengerMission = 2
pointsForSecretMessage = 5
pointsUntilThePoliceArrives = (-18)
missionRepNeeded :: [(Int, MissionCategory)]
missionRepNeeded = [(18, SecretMessage), (minRepForMission, Messenger)]
possibleMissionType :: Int -> Maybe MissionCategory
possibleMissionType thr =
liftM snd (find (\n -> fst n <= thr) missionRepNeeded)
missions :: MissionMap -> [(String, Mission)]
missions = M.toSeq