module Mischief.Render.Sprite.Common where import Linear (V2 (..)) import Mischief.ECS import Mischief.Math (Transform) import Mischief.Render.Buffer import Mischief.Render.Layers (RenderLayers) import Mischief.Shader.Internal.Buffers import Mischief.Shader.Types (Vec) import Mischief.Shader.Types qualified as ST newtype Sprite = Sprite {Sprite -> Entity image :: Entity} instance Component Sprite where required :: Set DefaultComponentType required = forall b. RequiredBundle b => Set DefaultComponentType forall {k} (b :: k). RequiredBundle b => Set DefaultComponentType require @(SpriteFlip, Anchor, Transform, RenderLayers) data SpriteSlice = SpriteSlice {SpriteSlice -> V2 Int start :: V2 Int, SpriteSlice -> V2 Int size :: V2 Int} deriving (Typeable SpriteSlice [HookRel SpriteSlice] [Hook SpriteSlice] Set DefaultComponentType IsExclusive (IsExclusiveRel SpriteSlice) (Typeable SpriteSlice, IsExclusive (IsExclusiveRel SpriteSlice)) => Set DefaultComponentType -> [Hook SpriteSlice] -> [Hook SpriteSlice] -> [Hook SpriteSlice] -> [HookRel SpriteSlice] -> [HookRel SpriteSlice] -> [HookRel SpriteSlice] -> Component SpriteSlice 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 SpriteSlice] onAdd :: [Hook SpriteSlice] $conSet :: [Hook SpriteSlice] onSet :: [Hook SpriteSlice] $conRemove :: [Hook SpriteSlice] onRemove :: [Hook SpriteSlice] $conAddRel :: [HookRel SpriteSlice] onAddRel :: [HookRel SpriteSlice] $conSetRel :: [HookRel SpriteSlice] onSetRel :: [HookRel SpriteSlice] $conRemoveRel :: [HookRel SpriteSlice] onRemoveRel :: [HookRel SpriteSlice] Component, SpriteSlice -> SpriteSlice -> Bool (SpriteSlice -> SpriteSlice -> Bool) -> (SpriteSlice -> SpriteSlice -> Bool) -> Eq SpriteSlice forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: SpriteSlice -> SpriteSlice -> Bool == :: SpriteSlice -> SpriteSlice -> Bool $c/= :: SpriteSlice -> SpriteSlice -> Bool /= :: SpriteSlice -> SpriteSlice -> Bool Eq, Int -> SpriteSlice -> ShowS [SpriteSlice] -> ShowS SpriteSlice -> String (Int -> SpriteSlice -> ShowS) -> (SpriteSlice -> String) -> ([SpriteSlice] -> ShowS) -> Show SpriteSlice forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> SpriteSlice -> ShowS showsPrec :: Int -> SpriteSlice -> ShowS $cshow :: SpriteSlice -> String show :: SpriteSlice -> String $cshowList :: [SpriteSlice] -> ShowS showList :: [SpriteSlice] -> ShowS Show) data SpriteFlip = SpriteFlip {SpriteFlip -> Bool x :: Bool, SpriteFlip -> Bool y :: Bool} deriving (Typeable SpriteFlip [HookRel SpriteFlip] [Hook SpriteFlip] Set DefaultComponentType IsExclusive (IsExclusiveRel SpriteFlip) (Typeable SpriteFlip, IsExclusive (IsExclusiveRel SpriteFlip)) => Set DefaultComponentType -> [Hook SpriteFlip] -> [Hook SpriteFlip] -> [Hook SpriteFlip] -> [HookRel SpriteFlip] -> [HookRel SpriteFlip] -> [HookRel SpriteFlip] -> Component SpriteFlip 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 SpriteFlip] onAdd :: [Hook SpriteFlip] $conSet :: [Hook SpriteFlip] onSet :: [Hook SpriteFlip] $conRemove :: [Hook SpriteFlip] onRemove :: [Hook SpriteFlip] $conAddRel :: [HookRel SpriteFlip] onAddRel :: [HookRel SpriteFlip] $conSetRel :: [HookRel SpriteFlip] onSetRel :: [HookRel SpriteFlip] $conRemoveRel :: [HookRel SpriteFlip] onRemoveRel :: [HookRel SpriteFlip] Component) instance Default SpriteFlip where def :: SpriteFlip def = SpriteFlip {x :: Bool x = Bool False, y :: Bool y = Bool False} newtype Anchor = Anchor (V2 Float) deriving anyclass (Typeable Anchor [HookRel Anchor] [Hook Anchor] Set DefaultComponentType IsExclusive (IsExclusiveRel Anchor) (Typeable Anchor, IsExclusive (IsExclusiveRel Anchor)) => Set DefaultComponentType -> [Hook Anchor] -> [Hook Anchor] -> [Hook Anchor] -> [HookRel Anchor] -> [HookRel Anchor] -> [HookRel Anchor] -> Component Anchor 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 Anchor] onAdd :: [Hook Anchor] $conSet :: [Hook Anchor] onSet :: [Hook Anchor] $conRemove :: [Hook Anchor] onRemove :: [Hook Anchor] $conAddRel :: [HookRel Anchor] onAddRel :: [HookRel Anchor] $conSetRel :: [HookRel Anchor] onSetRel :: [HookRel Anchor] $conRemoveRel :: [HookRel Anchor] onRemoveRel :: [HookRel Anchor] Component) instance Default Anchor where def :: Anchor def = V2 Float -> Anchor Anchor (V2 Float -> Anchor) -> V2 Float -> Anchor forall a b. (a -> b) -> a -> b $ Float -> Float -> V2 Float forall a. a -> a -> V2 a V2 Float 0.5 Float 0.5