module Mischief.Render.Layers where

import Data.Binary (Word32)
import Data.Bits (Bits ((.&.)), (.|.))
import Mischief.ECS

newtype RenderLayers = RenderLayers Word32
  deriving anyclass (Typeable RenderLayers
[HookRel RenderLayers]
[Hook RenderLayers]
Set DefaultComponentType
IsExclusive (IsExclusiveRel RenderLayers)
(Typeable RenderLayers,
 IsExclusive (IsExclusiveRel RenderLayers)) =>
Set DefaultComponentType
-> [Hook RenderLayers]
-> [Hook RenderLayers]
-> [Hook RenderLayers]
-> [HookRel RenderLayers]
-> [HookRel RenderLayers]
-> [HookRel RenderLayers]
-> Component RenderLayers
forall c.
(Typeable c, IsExclusive (IsExclusiveRel c)) =>
Set DefaultComponentType
-> [Hook c]
-> [Hook c]
-> [Hook c]
-> [HookRel c]
-> [HookRel c]
-> [HookRel c]
-> Component c
$crequired :: Set DefaultComponentType
required :: Set DefaultComponentType
$conAdd :: [Hook RenderLayers]
onAdd :: [Hook RenderLayers]
$conSet :: [Hook RenderLayers]
onSet :: [Hook RenderLayers]
$conRemove :: [Hook RenderLayers]
onRemove :: [Hook RenderLayers]
$conAddRel :: [HookRel RenderLayers]
onAddRel :: [HookRel RenderLayers]
$conSetRel :: [HookRel RenderLayers]
onSetRel :: [HookRel RenderLayers]
$conRemoveRel :: [HookRel RenderLayers]
onRemoveRel :: [HookRel RenderLayers]
Component)
  deriving newtype (RenderLayers -> RenderLayers -> Bool
(RenderLayers -> RenderLayers -> Bool)
-> (RenderLayers -> RenderLayers -> Bool) -> Eq RenderLayers
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RenderLayers -> RenderLayers -> Bool
== :: RenderLayers -> RenderLayers -> Bool
$c/= :: RenderLayers -> RenderLayers -> Bool
/= :: RenderLayers -> RenderLayers -> Bool
Eq, Int -> RenderLayers -> ShowS
[RenderLayers] -> ShowS
RenderLayers -> String
(Int -> RenderLayers -> ShowS)
-> (RenderLayers -> String)
-> ([RenderLayers] -> ShowS)
-> Show RenderLayers
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RenderLayers -> ShowS
showsPrec :: Int -> RenderLayers -> ShowS
$cshow :: RenderLayers -> String
show :: RenderLayers -> String
$cshowList :: [RenderLayers] -> ShowS
showList :: [RenderLayers] -> ShowS
Show, Eq RenderLayers
RenderLayers
Eq RenderLayers =>
(RenderLayers -> RenderLayers -> RenderLayers)
-> (RenderLayers -> RenderLayers -> RenderLayers)
-> (RenderLayers -> RenderLayers -> RenderLayers)
-> (RenderLayers -> RenderLayers)
-> (RenderLayers -> Int -> RenderLayers)
-> (RenderLayers -> Int -> RenderLayers)
-> RenderLayers
-> (Int -> RenderLayers)
-> (RenderLayers -> Int -> RenderLayers)
-> (RenderLayers -> Int -> RenderLayers)
-> (RenderLayers -> Int -> RenderLayers)
-> (RenderLayers -> Int -> Bool)
-> (RenderLayers -> Maybe Int)
-> (RenderLayers -> Int)
-> (RenderLayers -> Bool)
-> (RenderLayers -> Int -> RenderLayers)
-> (RenderLayers -> Int -> RenderLayers)
-> (RenderLayers -> Int -> RenderLayers)
-> (RenderLayers -> Int -> RenderLayers)
-> (RenderLayers -> Int -> RenderLayers)
-> (RenderLayers -> Int -> RenderLayers)
-> (RenderLayers -> Int)
-> Bits RenderLayers
Int -> RenderLayers
RenderLayers -> Bool
RenderLayers -> Int
RenderLayers -> Maybe Int
RenderLayers -> RenderLayers
RenderLayers -> Int -> Bool
RenderLayers -> Int -> RenderLayers
RenderLayers -> RenderLayers -> RenderLayers
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: RenderLayers -> RenderLayers -> RenderLayers
.&. :: RenderLayers -> RenderLayers -> RenderLayers
$c.|. :: RenderLayers -> RenderLayers -> RenderLayers
.|. :: RenderLayers -> RenderLayers -> RenderLayers
$cxor :: RenderLayers -> RenderLayers -> RenderLayers
xor :: RenderLayers -> RenderLayers -> RenderLayers
$ccomplement :: RenderLayers -> RenderLayers
complement :: RenderLayers -> RenderLayers
$cshift :: RenderLayers -> Int -> RenderLayers
shift :: RenderLayers -> Int -> RenderLayers
$crotate :: RenderLayers -> Int -> RenderLayers
rotate :: RenderLayers -> Int -> RenderLayers
$czeroBits :: RenderLayers
zeroBits :: RenderLayers
$cbit :: Int -> RenderLayers
bit :: Int -> RenderLayers
$csetBit :: RenderLayers -> Int -> RenderLayers
setBit :: RenderLayers -> Int -> RenderLayers
$cclearBit :: RenderLayers -> Int -> RenderLayers
clearBit :: RenderLayers -> Int -> RenderLayers
$ccomplementBit :: RenderLayers -> Int -> RenderLayers
complementBit :: RenderLayers -> Int -> RenderLayers
$ctestBit :: RenderLayers -> Int -> Bool
testBit :: RenderLayers -> Int -> Bool
$cbitSizeMaybe :: RenderLayers -> Maybe Int
bitSizeMaybe :: RenderLayers -> Maybe Int
$cbitSize :: RenderLayers -> Int
bitSize :: RenderLayers -> Int
$cisSigned :: RenderLayers -> Bool
isSigned :: RenderLayers -> Bool
$cshiftL :: RenderLayers -> Int -> RenderLayers
shiftL :: RenderLayers -> Int -> RenderLayers
$cunsafeShiftL :: RenderLayers -> Int -> RenderLayers
unsafeShiftL :: RenderLayers -> Int -> RenderLayers
$cshiftR :: RenderLayers -> Int -> RenderLayers
shiftR :: RenderLayers -> Int -> RenderLayers
$cunsafeShiftR :: RenderLayers -> Int -> RenderLayers
unsafeShiftR :: RenderLayers -> Int -> RenderLayers
$crotateL :: RenderLayers -> Int -> RenderLayers
rotateL :: RenderLayers -> Int -> RenderLayers
$crotateR :: RenderLayers -> Int -> RenderLayers
rotateR :: RenderLayers -> Int -> RenderLayers
$cpopCount :: RenderLayers -> Int
popCount :: RenderLayers -> Int
Bits)

new :: Word32 -> RenderLayers
new :: Word32 -> RenderLayers
new = Word32 -> RenderLayers
RenderLayers

instance Semigroup RenderLayers where
  <> :: RenderLayers -> RenderLayers -> RenderLayers
(<>) = RenderLayers -> RenderLayers -> RenderLayers
union

union :: RenderLayers -> RenderLayers -> RenderLayers
union :: RenderLayers -> RenderLayers -> RenderLayers
union (RenderLayers Word32
a) (RenderLayers Word32
b) = Word32 -> RenderLayers
RenderLayers (Word32 -> RenderLayers) -> Word32 -> RenderLayers
forall a b. (a -> b) -> a -> b
$ Word32
a Word32 -> Word32 -> Word32
forall a. Bits a => a -> a -> a
.|. Word32
b

intersection :: RenderLayers -> RenderLayers -> RenderLayers
intersection :: RenderLayers -> RenderLayers -> RenderLayers
intersection (RenderLayers Word32
a) (RenderLayers Word32
b) = Word32 -> RenderLayers
RenderLayers (Word32 -> RenderLayers) -> Word32 -> RenderLayers
forall a b. (a -> b) -> a -> b
$ Word32
a Word32 -> Word32 -> Word32
forall a. Bits a => a -> a -> a
.&. Word32
b

intersects :: RenderLayers -> RenderLayers -> Bool
intersects :: RenderLayers -> RenderLayers -> Bool
intersects RenderLayers
a RenderLayers
b = RenderLayers -> RenderLayers -> RenderLayers
intersection RenderLayers
a RenderLayers
b RenderLayers -> RenderLayers -> Bool
forall a. Eq a => a -> a -> Bool
/= RenderLayers
noLayer

instance Default RenderLayers where
  def :: RenderLayers
def = RenderLayers
layer0

noLayer :: RenderLayers
noLayer :: RenderLayers
noLayer = Word32 -> RenderLayers
RenderLayers Word32
0

layer0 :: RenderLayers
layer0 :: RenderLayers
layer0 = Word32 -> RenderLayers
RenderLayers Word32
1

layer1 :: RenderLayers
layer1 :: RenderLayers
layer1 = Word32 -> RenderLayers
RenderLayers Word32
2

layer2 :: RenderLayers
layer2 :: RenderLayers
layer2 = Word32 -> RenderLayers
RenderLayers Word32
4

layer3 :: RenderLayers
layer3 :: RenderLayers
layer3 = Word32 -> RenderLayers
RenderLayers Word32
8

layer4 :: RenderLayers
layer4 :: RenderLayers
layer4 = Word32 -> RenderLayers
RenderLayers Word32
16

layer5 :: RenderLayers
layer5 :: RenderLayers
layer5 = Word32 -> RenderLayers
RenderLayers Word32
32

layer6 :: RenderLayers
layer6 :: RenderLayers
layer6 = Word32 -> RenderLayers
RenderLayers Word32
64

layer7 :: RenderLayers
layer7 :: RenderLayers
layer7 = Word32 -> RenderLayers
RenderLayers Word32
128

layer8 :: RenderLayers
layer8 :: RenderLayers
layer8 = Word32 -> RenderLayers
RenderLayers Word32
256

layer9 :: RenderLayers
layer9 :: RenderLayers
layer9 = Word32 -> RenderLayers
RenderLayers Word32
512

layer10 :: RenderLayers
layer10 :: RenderLayers
layer10 = Word32 -> RenderLayers
RenderLayers Word32
1024

layer11 :: RenderLayers
layer11 :: RenderLayers
layer11 = Word32 -> RenderLayers
RenderLayers Word32
2048

layer12 :: RenderLayers
layer12 :: RenderLayers
layer12 = Word32 -> RenderLayers
RenderLayers Word32
4096

layer13 :: RenderLayers
layer13 :: RenderLayers
layer13 = Word32 -> RenderLayers
RenderLayers Word32
8192

layer14 :: RenderLayers
layer14 :: RenderLayers
layer14 = Word32 -> RenderLayers
RenderLayers Word32
16384

layer15 :: RenderLayers
layer15 :: RenderLayers
layer15 = Word32 -> RenderLayers
RenderLayers Word32
32768

layer16 :: RenderLayers
layer16 :: RenderLayers
layer16 = Word32 -> RenderLayers
RenderLayers Word32
65536

layer17 :: RenderLayers
layer17 :: RenderLayers
layer17 = Word32 -> RenderLayers
RenderLayers Word32
131072

layer18 :: RenderLayers
layer18 :: RenderLayers
layer18 = Word32 -> RenderLayers
RenderLayers Word32
262144

layer19 :: RenderLayers
layer19 :: RenderLayers
layer19 = Word32 -> RenderLayers
RenderLayers Word32
524288

layer20 :: RenderLayers
layer20 :: RenderLayers
layer20 = Word32 -> RenderLayers
RenderLayers Word32
1048576

layer21 :: RenderLayers
layer21 :: RenderLayers
layer21 = Word32 -> RenderLayers
RenderLayers Word32
2097152

layer22 :: RenderLayers
layer22 :: RenderLayers
layer22 = Word32 -> RenderLayers
RenderLayers Word32
4194304

layer23 :: RenderLayers
layer23 :: RenderLayers
layer23 = Word32 -> RenderLayers
RenderLayers Word32
8388608

layer24 :: RenderLayers
layer24 :: RenderLayers
layer24 = Word32 -> RenderLayers
RenderLayers Word32
16777216

layer25 :: RenderLayers
layer25 :: RenderLayers
layer25 = Word32 -> RenderLayers
RenderLayers Word32
33554432

layer26 :: RenderLayers
layer26 :: RenderLayers
layer26 = Word32 -> RenderLayers
RenderLayers Word32
67108864

layer27 :: RenderLayers
layer27 :: RenderLayers
layer27 = Word32 -> RenderLayers
RenderLayers Word32
134217728

layer28 :: RenderLayers
layer28 :: RenderLayers
layer28 = Word32 -> RenderLayers
RenderLayers Word32
268435456

layer29 :: RenderLayers
layer29 :: RenderLayers
layer29 = Word32 -> RenderLayers
RenderLayers Word32
536870912

layer30 :: RenderLayers
layer30 :: RenderLayers
layer30 = Word32 -> RenderLayers
RenderLayers Word32
1073741824

layer31 :: RenderLayers
layer31 :: RenderLayers
layer31 = Word32 -> RenderLayers
RenderLayers Word32
2147483648