Files
loop/src/Dodge/Data/Item/Location.hs
T
2026-05-16 12:21:19 +01:00

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