Add generic derivations and To/FromJSON instances

This commit is contained in:
2022-07-25 22:49:18 +01:00
parent f5604ef429
commit b8e8413daa
99 changed files with 1406 additions and 517 deletions
+45 -19
View File
@@ -1,22 +1,28 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Combine.Data
where
import GHC.Generics
import Data.Aeson
import Dodge.Equipment.Data
import Dodge.Data.ItemAmount
import Control.Lens
import qualified Data.Map.Strict as M
-- this should probably store loaded ammo
data ItemType = ItemType
{_iyBase :: ItemBaseType
,_iyModules :: M.Map ModuleSlot ItemModuleType
,_iyStack :: Stack
}
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON ItemType where
toEncoding = genericToEncoding defaultOptions
instance FromJSON ItemType
data Stack = NoStack | Stack IcAmount
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON Stack where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Stack
data CraftType
= PIPE
| TUBE
@@ -67,8 +73,10 @@ data CraftType
| TIMEMODULE
| SIZEMODULE
| GRAVITYMODULE
deriving (Eq,Ord,Show,Enum,Read)
deriving (Eq,Ord,Show,Enum,Read,Generic)
instance ToJSON CraftType where
toEncoding = genericToEncoding defaultOptions
instance FromJSON CraftType
-- TODO make this an enum somehow...?
data ItemBaseType
= NOTDEFINED
@@ -88,8 +96,10 @@ data ItemBaseType
| MEDKIT Int
| CRAFT CraftType
--
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON ItemBaseType where
toEncoding = genericToEncoding defaultOptions
instance FromJSON ItemBaseType
data EquipItemType
= MAGSHIELD
| FLAMESHIELD
@@ -105,7 +115,10 @@ data EquipItemType
| JUMPLEGS
| JETPACK
| AUTODETECTOR Detector
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON EquipItemType where
toEncoding = genericToEncoding defaultOptions
instance FromJSON EquipItemType
data LeftItemType
= BOOSTER
| REWINDER
@@ -113,8 +126,10 @@ data LeftItemType
| BLINKERUNSAFE
| SHRINKER
| SPAWNER
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON LeftItemType where
toEncoding = genericToEncoding defaultOptions
instance FromJSON LeftItemType
data HeldItemType
= BANGSTICK {_xNum :: Int}
| PISTOL
@@ -175,8 +190,10 @@ data HeldItemType
| HELDDETECTOR Detector
| TORCH
| FLATSHIELD
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON HeldItemType where
toEncoding = genericToEncoding defaultOptions
instance FromJSON HeldItemType
data ItemModuleType
= EMPTYMODULE
| DRUMMAG
@@ -200,13 +217,18 @@ data ItemModuleType
| LAUNCHHOME
| EXTRABATTERY
| ATTACHTORCH
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON ItemModuleType where
toEncoding = genericToEncoding defaultOptions
instance FromJSON ItemModuleType
data Detector
= ITEMDETECTOR
| CREATUREDETECTOR
| WALLDETECTOR
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON Detector where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Detector
data ModuleSlot
= ModBullet
| ModBulletSpawn
@@ -219,8 +241,12 @@ data ModuleSlot
| ModTeleport
| ModDualBeam
| ModHeldAttach
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON ModuleSlot where
toEncoding = genericToEncoding defaultOptions
instance FromJSON ModuleSlot
instance ToJSONKey ModuleSlot
instance FromJSONKey ModuleSlot
makeLenses ''ItemType
makeLenses ''ItemBaseType
makeLenses ''HeldItemType