packages feed

mischief-render-0.1.0.0: src/Mischief/Render/Sprite/Common.hs

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 {image :: Entity}

instance Component Sprite where
  required = require @(SpriteFlip, Anchor, Transform, RenderLayers)

data SpriteSlice = SpriteSlice {start :: V2 Int, size :: V2 Int} deriving (Component, Eq, Show)

data SpriteFlip = SpriteFlip {x :: Bool, y :: Bool} deriving (Component)

instance Default SpriteFlip where
  def = SpriteFlip {x = False, y = False}

newtype Anchor = Anchor (V2 Float) deriving anyclass (Component)

instance Default Anchor where
  def = Anchor $ V2 0.5 0.5