packages feed

pine-0.1.0.0: src/Pine/Internal/Types.hs

module Pine.Internal.Types where

import qualified SDL (Event)

import Data.Semigroup

-- DeltaTime Double | KeyPress | KeyRelease | KeyState deriving (Eq, Show) --ideas
data Event = DeltaTime Double | SDLEvent SDL.Event deriving (Eq, Show) --placeholder

class Drawable d where
  draw :: d -> Canvas --Foldable f => d -> f Image

class Stateful s where
  initial :: s
  update  :: Event -> s -> s -- Event -> s -> s

newtype Image = Image
  { imageSrc :: FilePath
  } deriving (Eq, Show) -- put in other info later (like dimensions, quads, etc)

newImage :: FilePath -> Image
newImage = Image

data Canvas = EmptyCanvas | SingleImage Image | Images [Image] deriving (Eq, Show)

instance Semigroup Canvas where
  (<>) (SingleImage img1) (SingleImage img2) = Images [img1,img2]
  (<>) (Images imgs1) (Images imgs2) = Images $ imgs1 <> imgs2
  (<>) (SingleImage img) (Images imgs) = Images $ img:imgs
  (<>) (Images imgs) (SingleImage img) = Images $ imgs <> [img]
  (<>) EmptyCanvas c = c
  (<>) c EmptyCanvas = c

instance Monoid Canvas where
  mempty = EmptyCanvas
  mappend = (<>)

fromImage :: Image -> Canvas
fromImage = SingleImage