packages feed

aztecs-0.14.0: src/Aztecs/Entity.hs

module Aztecs.Entity where

import Data.Bits
import Data.Word

newtype Entity = Entity {unEntity :: Word64}
  deriving (Eq, Ord)

instance Show Entity where
  show e = "Entity {index = " ++ show (entityIndex e) ++ ", generation = " ++ show (entityGeneration e) ++ "}"

mkEntity :: Word32 -> Word32 -> Entity
mkEntity index generation = Entity $ (fromIntegral generation `shiftL` 32) .|. fromIntegral index
{-# INLINE mkEntity #-}

entityIndex :: Entity -> Word32
entityIndex (Entity e) = fromIntegral (e .&. 0xFFFFFFFF)
{-# INLINE entityIndex #-}

entityGeneration :: Entity -> Word32
entityGeneration (Entity e) = fromIntegral ((e `shiftR` 32) .&. 0xFFFFFFFF)
{-# INLINE entityGeneration #-}