{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DuplicateRecordFields #-}
module TORCS.Types where
import qualified Data.Map as M
import FRP.Yampa
type Driver = SF CarState DriveState
data DriveState = DriveState {
gear :: Int
,clutch :: Double
,focus :: [Int]
,accel :: Double
,meta :: Int
,brakes :: Double
,steer :: Double
,broadcast :: Message
} deriving (Show)
type Message = String
defaultDriveState = DriveState {
gear = 1
,clutch = 0
,focus = [-90, -45, 0, 45, 90]
,accel = 1
,meta = 0
,brakes = 0
,steer = 0
,broadcast = ""}
data CarState = CarState {
z :: Double
,angle :: Double
,gear' :: Int
,trackPos :: Double
,speedY :: Double
,distRaced :: Double
,speedZ :: Double
,damage :: Double
,wheelSpinVel :: [Double]
,focus' :: [Int]
,track :: [Double]
,curLapTime :: Double
,speedX :: Double
,racePos :: Int
,fuel :: Double
,distFromStart :: Double
,opponents :: [Double]
,rpm :: Double
,lastLapTime :: Double
,lapTimes :: [Double]
,communications :: Communications
,monitor :: String
} deriving (Show)
type Communications = M.Map Int (Maybe Message)
defaultCarState = CarState {
z = 0
,angle = 0
,speedX = 0
,speedY = 0
,speedZ = 0
,rpm = 0
,distRaced = 0
,lastLapTime = 0
,curLapTime = 0
,gear' = 1
,fuel = 100
,trackPos = 0
,track = replicate 19 0
,damage = 0
,wheelSpinVel = [0,0,0,0]
,focus' = [0]
,racePos = 1
,distFromStart = 0
,opponents = [0]
,lapTimes = []
,communications = M.empty
,monitor = ""
}