Files
loop/src/Dodge/Data/Block.hs
T

54 lines
1.4 KiB
Haskell

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Block (
module Dodge.Data.Block,
module Dodge.Data.Material,
module Dodge.Data.PathGraph,
) where
import Data.Set (Set)
import Color
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import qualified Data.IntSet as IS
import Dodge.Data.Material
import Dodge.Data.PathGraph
import Geometry
import Shape.Data
data Block = Block
{ _blID :: Int
, _blWallIDs :: IS.IntSet
, _blHP :: Int
, _blShadows :: [Int] -- a list of blocks/walls? that are not shown when this block exists
, _blFootprint :: [Point2] -- TODO check whether this should be clockwise/anticlockwise
, _blPos :: Point2
, _blDir :: Float
, _blHeight :: Float
, _blMaterial :: Material
, _blDraw :: BlockDraw --Block -> SPic
, _blObstructs :: Set PathEdgeNodes
}
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data BlockDraw
= BlockDrawMempty
| BlockDrawBlSh BlSh
| BlockDraws [BlockDraw]
| BlockDrawColHeightPoss Color Float [Point2]
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data BlSh
= BlShMempty
| BlShConst Shape
deriving (Eq, Ord, Show, Read) --Generic, Flat)
makeLenses ''Block
deriveJSON defaultOptions ''BlSh
deriveJSON defaultOptions ''BlockDraw
deriveJSON defaultOptions ''Block