Add generic derivations and To/FromJSON instances
This commit is contained in:
+38
-10
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user