mischief-render-0.1.0.0: src/Mischief/Render/Layers.hs
module Mischief.Render.Layers where
import Data.Binary (Word32)
import Data.Bits (Bits ((.&.)), (.|.))
import Mischief.ECS
newtype RenderLayers = RenderLayers Word32
deriving anyclass (Component)
deriving newtype (Eq, Show, Bits)
new :: Word32 -> RenderLayers
new = RenderLayers
instance Semigroup RenderLayers where
(<>) = union
union :: RenderLayers -> RenderLayers -> RenderLayers
union (RenderLayers a) (RenderLayers b) = RenderLayers $ a .|. b
intersection :: RenderLayers -> RenderLayers -> RenderLayers
intersection (RenderLayers a) (RenderLayers b) = RenderLayers $ a .&. b
intersects :: RenderLayers -> RenderLayers -> Bool
intersects a b = intersection a b /= noLayer
instance Default RenderLayers where
def = layer0
noLayer :: RenderLayers
noLayer = RenderLayers 0
layer0 :: RenderLayers
layer0 = RenderLayers 1
layer1 :: RenderLayers
layer1 = RenderLayers 2
layer2 :: RenderLayers
layer2 = RenderLayers 4
layer3 :: RenderLayers
layer3 = RenderLayers 8
layer4 :: RenderLayers
layer4 = RenderLayers 16
layer5 :: RenderLayers
layer5 = RenderLayers 32
layer6 :: RenderLayers
layer6 = RenderLayers 64
layer7 :: RenderLayers
layer7 = RenderLayers 128
layer8 :: RenderLayers
layer8 = RenderLayers 256
layer9 :: RenderLayers
layer9 = RenderLayers 512
layer10 :: RenderLayers
layer10 = RenderLayers 1024
layer11 :: RenderLayers
layer11 = RenderLayers 2048
layer12 :: RenderLayers
layer12 = RenderLayers 4096
layer13 :: RenderLayers
layer13 = RenderLayers 8192
layer14 :: RenderLayers
layer14 = RenderLayers 16384
layer15 :: RenderLayers
layer15 = RenderLayers 32768
layer16 :: RenderLayers
layer16 = RenderLayers 65536
layer17 :: RenderLayers
layer17 = RenderLayers 131072
layer18 :: RenderLayers
layer18 = RenderLayers 262144
layer19 :: RenderLayers
layer19 = RenderLayers 524288
layer20 :: RenderLayers
layer20 = RenderLayers 1048576
layer21 :: RenderLayers
layer21 = RenderLayers 2097152
layer22 :: RenderLayers
layer22 = RenderLayers 4194304
layer23 :: RenderLayers
layer23 = RenderLayers 8388608
layer24 :: RenderLayers
layer24 = RenderLayers 16777216
layer25 :: RenderLayers
layer25 = RenderLayers 33554432
layer26 :: RenderLayers
layer26 = RenderLayers 67108864
layer27 :: RenderLayers
layer27 = RenderLayers 134217728
layer28 :: RenderLayers
layer28 = RenderLayers 268435456
layer29 :: RenderLayers
layer29 = RenderLayers 536870912
layer30 :: RenderLayers
layer30 = RenderLayers 1073741824
layer31 :: RenderLayers
layer31 = RenderLayers 2147483648