63 lines
1.6 KiB
Haskell
63 lines
1.6 KiB
Haskell
{-# LANGUAGE EmptyDataDeriving #-}
|
|
{-# LANGUAGE StrictData #-}
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
module Dodge.Data.Item.Location where
|
|
|
|
import Control.Lens
|
|
import Data.Aeson
|
|
import Data.Aeson.TH
|
|
import Dodge.Data.Equipment.Misc
|
|
import NewInt
|
|
import ShortShow
|
|
|
|
-- it would be nice to have these as empty types, but I'm not sure how to get
|
|
-- aeson to handle that
|
|
data InvInt = InvInt
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
data TurretInt
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
data CrInt = CrInt
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
data ItmInt = ItmInt
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
data ItemLocation
|
|
= InInv
|
|
{ _ilCrID :: Int
|
|
, _ilInvID :: NewInt InvInt
|
|
, _ilIsRoot :: Bool -- of any item
|
|
, _ilIsSelected :: Bool
|
|
, _ilIsAttached :: Bool -- to selected item. question: downwards and upwards?
|
|
, _ilEquipSite :: Maybe EquipSite
|
|
}
|
|
| OnTurret {_ilTuID :: Int}
|
|
| OnFloor
|
|
| InVoid
|
|
deriving (Eq, Show, Ord, Read) --Generic, Flat)
|
|
|
|
instance ShortShow ItemLocation where
|
|
shortShow (InInv cid invid rootb selb attb esite) =
|
|
"InInv:cid" <> shortShow cid <> "invid" <> shortShow (_unNInt invid)
|
|
<> "root"
|
|
<> shortShow rootb
|
|
<> "sel"
|
|
<> shortShow selb
|
|
<> "att"
|
|
<> shortShow attb
|
|
<> shortShow (fmap (SString . show) esite)
|
|
shortShow x = show x
|
|
|
|
-- | OnTurret {_ilTuID :: Int}
|
|
-- | OnFloor-- {_ilFlID :: NewInt FloorInt}
|
|
-- | InVoid
|
|
|
|
makeLenses ''ItemLocation
|
|
deriveJSON defaultOptions ''InvInt
|
|
deriveJSON defaultOptions ''ItemLocation
|
|
deriveJSON defaultOptions ''ItmInt
|
|
deriveJSON defaultOptions ''CrInt
|