packages feed

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