{-# 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