packages feed

minilight 0.4.3 → 0.4.4

raw patch · 5 files changed

+86/−1 lines, 5 files

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for minilight +## 0.4.4 -- 2020-05-05++* Add `registerComponent` and `extend9tiles` functions+ ## 0.4.3 -- 2020-03-11  * Support GHC 8.8
README.md view
@@ -16,6 +16,8 @@ ~$ sudo apt install -y libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-gfx-dev ``` +For ghc-8.8, use a version `>= 0.4.3`+ ## Tutorial  Create a new project. Assume that you have the `resource` directory under the project root, which contains the resource stuff.
minilight.cabal view
@@ -3,7 +3,7 @@ --   For further documentation, see http://haskell.org/cabal/users-guide/  name:                minilight-version:             0.4.3+version:             0.4.4 synopsis:            A SDL2-based graphics library, batteries-included. description:   This package provides the wheel for a graphical application or a game.
src/MiniLight.hs view
@@ -21,6 +21,7 @@   runComponentEnv,   (@@!),   quit,+  registerComponent, ) where  import Control.Concurrent (threadDelay, forkIO)@@ -189,6 +190,31 @@   reg <- view _registry   v   <- reg R.! key   runComponentEnv v $ emit (Just key) $ ev+++-- | Register a component to the component system+registerComponent+  :: ( HasLoaderEnv env+     , HasLightEnv env+     , MonadIO m+     , MonadMask m+     , ComponentUnit c+     )+  => T.Text+  -> c+  -> LightT env m Component+registerComponent name cu = do+  uuid <- newUID+  comp <- newComponent uuid cu++  reg  <- view _registry+  R.register reg uuid comp++  tag <- view _tagRegistry+  liftIO $ modifyIORef' tag $ HM.insert name uuid++  return comp+  -- | Same as 'runMainloop' but fixing the type. runMiniloop :: LoopConfig -> s -> (s -> MiniLoop s) -> MiniLight ()
src/MiniLight/Figure.hs view
@@ -56,6 +56,59 @@                              (c2 - c1 + fmap (`div` 2) (s1 + s2))   | otherwise = union y x ++-- | Split a figure into 9 pieces and extend it to the given size frame.+extend9tiles :: Figure -> Vect.V2 Int -> MiniLight Figure+extend9tiles fig size = do+  mrenderer <- view _renderer+  target    <- flip mapM mrenderer $ \renderer -> do+    let siz      = fmap toEnum size+    let Just tex = texture fig+    let texSize  = fmap toEnum $ getFigureSize fig++    tinfo  <- SDL.queryTexture tex++    target <- SDL.createTexture renderer+                                (SDL.texturePixelFormat tinfo)+                                SDL.TextureAccessTarget+                                siz+    SDL.rendererRenderTarget renderer SDL.$= Just target+    SDL.textureBlendMode target SDL.$= SDL.BlendAlphaBlend++    let tileSize = fmap (`div` 3) texSize++    forM_ [0 .. 2] $ \ix -> forM_ [0 .. 2] $ \iy -> do+      let targetSize = Vect.V2+            (if ix == 1 then siz ^. _x - 2 * tileSize ^. _x else tileSize ^. _x)+            (if iy == 1 then siz ^. _y - 2 * tileSize ^. _y else tileSize ^. _y)+      let targetLoc = Vect.V2+            ( if ix == 0+              then 0+              else if ix == 1+                then tileSize ^. _x+                else siz ^. _x - tileSize ^. _x+            )+            ( if iy == 0+              then 0+              else if iy == 1+                then tileSize ^. _y+                else siz ^. _y - tileSize ^. _y+            )++      SDL.copy+        renderer+        tex+        (Just $ SDL.Rectangle (SDL.P (tileSize * Vect.V2 ix iy)) tileSize)+        (Just $ SDL.Rectangle (SDL.P targetLoc) targetSize)++    SDL.rendererRenderTarget renderer SDL.$= Nothing++    return target++  tex <- maybe (return emptyFigure) fromTexture target+  return tex++ -- | Render a figure. render :: (HasLightEnv env, MonadIO m, MonadMask m) => Figure -> LightT env m () render fig = do