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
+38 -10
View File
@@ -2,12 +2,16 @@
Contains base datatypes that cannot be seperated into
different modules because they are interdependent;
circular imports are probably not a good idea.
WARNING: orphan instances concerning Aeson classes and SDL datatypes have been introduced.
The warnings have been disabled.
-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Dodge.Data
( module Dodge.Data
, module Dodge.Data.CrGroupParams
@@ -87,7 +91,11 @@ module Dodge.Data
, module Dodge.Data.Machine
, module Dodge.Data.GenParams
, module Dodge.Data.Terminal
, module Dodge.Data.FloorItem
) where
import Dodge.Data.FloorItem
import Data.Aeson
import GHC.Generics
import Dodge.Data.Terminal
import Dodge.Data.GenParams
import Dodge.Data.Machine
@@ -305,18 +313,41 @@ data CWorld = CWorld
, _lSelect :: Point2
, _rSelect :: Point2
}
deriving (Eq,Show,Read)
deriving (Eq,Show,Read,Generic)
instance ToJSON CWorld where
toEncoding = genericToEncoding defaultOptions
instance FromJSON CWorld
instance ToJSON MouseButton where
toEncoding = genericToEncoding defaultOptions
instance FromJSON MouseButton
instance ToJSONKey MouseButton
instance FromJSONKey MouseButton
instance ToJSON Scancode where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Scancode
instance ToJSONKey Scancode
instance FromJSONKey Scancode
data TimeFlowStatus
= RewindingNow
| RewindingLastFrame
| NormalTimeFlow
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TimeFlowStatus where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TimeFlowStatus
data WorldHammer
= SubInvHam
| DoubleMouseHam
deriving (Eq,Ord,Show,Read,Enum,Bounded)
deriving (Eq,Ord,Show,Read,Enum,Bounded,Generic)
instance ToJSON WorldHammer where
toEncoding = genericToEncoding defaultOptions
instance FromJSON WorldHammer
instance ToJSONKey WorldHammer
instance FromJSONKey WorldHammer
data SaveSlot = QuicksaveSlot | LevelStartSlot
| SaveSlotNum Int
deriving (Eq,Ord,Show,Read)
data OptionScreenFlag = NormalOptions | GameOverOptions
@@ -361,8 +392,6 @@ data MenuOption
{ _moKey :: Scancode
, _moEff :: Universe -> IO (Maybe Universe)
}
data FloorItem = FlIt { _flIt :: Item , _flItPos :: Point2 , _flItRot :: Float, _flItID :: Int}
deriving (Eq,Ord,Show,Read)
data IntID a = IntID Int a
@@ -373,7 +402,10 @@ data WorldBeams = WorldBeams
,_positronBeams :: [Beam]
,_electronBeams :: [Beam]
}
deriving (Eq,Ord,Show,Read)
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON WorldBeams where
toEncoding = genericToEncoding defaultOptions
instance FromJSON WorldBeams
{- Objects without ids.
Update themselves, perhaps with side effects. -}
@@ -495,12 +527,8 @@ data InPlacement = InPlacement
, _ipPlacementID :: Int
}
makeLenses ''World
makeLenses ''FloorItem
--makeLenses ''Particle
makeLenses ''Universe
makeLenses ''GunBarrels
makeLenses ''Nozzle
makeLenses ''Equipment
makeLenses ''ScreenLayer
makeLenses ''WorldBeams
makeLenses ''GenWorld