packages feed

apecs 0.9.2 → 0.9.3

raw patch · 5 files changed

+86/−76 lines, 5 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Apecs: data Proxy (t :: k) :: forall k. () => k -> Type
- Apecs.Experimental.Reactive: instance (Apecs.Experimental.Reactive.Reacts m r, Apecs.Core.ExplDestroy m s, Apecs.Core.ExplGet m s, Apecs.Core.Elem s Data.Type.Equality.~ Apecs.Core.Elem r) => Apecs.Core.ExplDestroy m (Apecs.Experimental.Reactive.Reactive r s)
- Apecs.Experimental.Reactive: instance (Apecs.Experimental.Reactive.Reacts m r, Apecs.Core.ExplSet m s, Apecs.Core.ExplGet m s, Apecs.Core.Elem s Data.Type.Equality.~ Apecs.Core.Elem r) => Apecs.Core.ExplSet m (Apecs.Experimental.Reactive.Reactive r s)
- Apecs.Experimental.Reactive: instance (Control.Monad.IO.Class.MonadIO m, GHC.Arr.Ix c, GHC.Enum.Bounded c) => Apecs.Experimental.Reactive.Reacts m (Apecs.Experimental.Reactive.IxMap c)
- Apecs.Experimental.Stores: instance (Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) Data.Type.Equality.~ Apecs.Experimental.Stores.Stack c, Apecs.Core.ExplDestroy m (s (Apecs.Experimental.Stores.Stack c))) => Apecs.Core.ExplDestroy m (Apecs.Experimental.Stores.StackStore (Apecs.Experimental.Stores.Pushdown s c))
- Apecs.Experimental.Stores: instance (Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) Data.Type.Equality.~ Apecs.Experimental.Stores.Stack c, Apecs.Core.ExplGet m (s (Apecs.Experimental.Stores.Stack c))) => Apecs.Core.ExplGet m (Apecs.Experimental.Stores.StackStore (Apecs.Experimental.Stores.Pushdown s c))
- Apecs.Experimental.Stores: instance (Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) Data.Type.Equality.~ Apecs.Experimental.Stores.Stack c, Apecs.Core.ExplMembers m (s (Apecs.Experimental.Stores.Stack c))) => Apecs.Core.ExplMembers m (Apecs.Experimental.Stores.StackStore (Apecs.Experimental.Stores.Pushdown s c))
- Apecs.Experimental.Stores: instance (Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) Data.Type.Equality.~ Apecs.Experimental.Stores.Stack c, Apecs.Core.ExplSet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.ExplDestroy m (s (Apecs.Experimental.Stores.Stack c))) => Apecs.Core.ExplSet m (Apecs.Experimental.Stores.StackStore (Apecs.Experimental.Stores.Pushdown s c))
- Apecs.Experimental.Stores: instance (Apecs.Core.Storage c Data.Type.Equality.~ Apecs.Experimental.Stores.Pushdown s c, Apecs.Core.Component c) => Apecs.Core.Component (Apecs.Experimental.Stores.Stack c)
- Apecs.Experimental.Stores: instance (Apecs.Core.Storage c Data.Type.Equality.~ Apecs.Experimental.Stores.Pushdown s c, Apecs.Core.Has w m c) => Apecs.Core.Has w m (Apecs.Experimental.Stores.Stack c)
- Apecs.Experimental.Stores: instance (GHC.Base.Monad m, Apecs.Core.ExplGet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) Data.Type.Equality.~ Apecs.Experimental.Stores.Stack c) => Apecs.Core.ExplGet m (Apecs.Experimental.Stores.Pushdown s c)
- Apecs.Experimental.Stores: instance (GHC.Base.Monad m, Apecs.Core.ExplGet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.ExplSet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) Data.Type.Equality.~ Apecs.Experimental.Stores.Stack c) => Apecs.Core.ExplSet m (Apecs.Experimental.Stores.Pushdown s c)
- Apecs.Experimental.Stores: instance (GHC.Base.Monad m, Apecs.Core.ExplGet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.ExplSet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.ExplDestroy m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) Data.Type.Equality.~ Apecs.Experimental.Stores.Stack c) => Apecs.Core.ExplDestroy m (Apecs.Experimental.Stores.Pushdown s c)
- Apecs.Experimental.Stores: instance (GHC.Base.Monad m, Apecs.Core.ExplMembers m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) Data.Type.Equality.~ Apecs.Experimental.Stores.Stack c) => Apecs.Core.ExplMembers m (Apecs.Experimental.Stores.Pushdown s c)
+ Apecs: data Proxy (t :: k)
+ Apecs: newEntity_ :: (MonadIO m, Set world m component, Get world m EntityCounter) => component -> SystemT world m ()
+ Apecs.Experimental.Reactive: instance (Apecs.Experimental.Reactive.Reacts m r, Apecs.Core.ExplDestroy m s, Apecs.Core.ExplGet m s, Apecs.Core.Elem s GHC.Types.~ Apecs.Core.Elem r) => Apecs.Core.ExplDestroy m (Apecs.Experimental.Reactive.Reactive r s)
+ Apecs.Experimental.Reactive: instance (Apecs.Experimental.Reactive.Reacts m r, Apecs.Core.ExplSet m s, Apecs.Core.ExplGet m s, Apecs.Core.Elem s GHC.Types.~ Apecs.Core.Elem r) => Apecs.Core.ExplSet m (Apecs.Experimental.Reactive.Reactive r s)
+ Apecs.Experimental.Reactive: instance (Control.Monad.IO.Class.MonadIO m, GHC.Ix.Ix c, GHC.Enum.Bounded c) => Apecs.Experimental.Reactive.Reacts m (Apecs.Experimental.Reactive.IxMap c)
+ Apecs.Experimental.Stores: instance (Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) GHC.Types.~ Apecs.Experimental.Stores.Stack c, Apecs.Core.ExplDestroy m (s (Apecs.Experimental.Stores.Stack c))) => Apecs.Core.ExplDestroy m (Apecs.Experimental.Stores.StackStore (Apecs.Experimental.Stores.Pushdown s c))
+ Apecs.Experimental.Stores: instance (Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) GHC.Types.~ Apecs.Experimental.Stores.Stack c, Apecs.Core.ExplGet m (s (Apecs.Experimental.Stores.Stack c))) => Apecs.Core.ExplGet m (Apecs.Experimental.Stores.StackStore (Apecs.Experimental.Stores.Pushdown s c))
+ Apecs.Experimental.Stores: instance (Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) GHC.Types.~ Apecs.Experimental.Stores.Stack c, Apecs.Core.ExplMembers m (s (Apecs.Experimental.Stores.Stack c))) => Apecs.Core.ExplMembers m (Apecs.Experimental.Stores.StackStore (Apecs.Experimental.Stores.Pushdown s c))
+ Apecs.Experimental.Stores: instance (Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) GHC.Types.~ Apecs.Experimental.Stores.Stack c, Apecs.Core.ExplSet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.ExplDestroy m (s (Apecs.Experimental.Stores.Stack c))) => Apecs.Core.ExplSet m (Apecs.Experimental.Stores.StackStore (Apecs.Experimental.Stores.Pushdown s c))
+ Apecs.Experimental.Stores: instance (Apecs.Core.Storage c GHC.Types.~ Apecs.Experimental.Stores.Pushdown s c, Apecs.Core.Component c) => Apecs.Core.Component (Apecs.Experimental.Stores.Stack c)
+ Apecs.Experimental.Stores: instance (Apecs.Core.Storage c GHC.Types.~ Apecs.Experimental.Stores.Pushdown s c, Apecs.Core.Has w m c) => Apecs.Core.Has w m (Apecs.Experimental.Stores.Stack c)
+ Apecs.Experimental.Stores: instance (GHC.Base.Monad m, Apecs.Core.ExplGet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) GHC.Types.~ Apecs.Experimental.Stores.Stack c) => Apecs.Core.ExplGet m (Apecs.Experimental.Stores.Pushdown s c)
+ Apecs.Experimental.Stores: instance (GHC.Base.Monad m, Apecs.Core.ExplGet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.ExplSet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) GHC.Types.~ Apecs.Experimental.Stores.Stack c) => Apecs.Core.ExplSet m (Apecs.Experimental.Stores.Pushdown s c)
+ Apecs.Experimental.Stores: instance (GHC.Base.Monad m, Apecs.Core.ExplGet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.ExplSet m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.ExplDestroy m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) GHC.Types.~ Apecs.Experimental.Stores.Stack c) => Apecs.Core.ExplDestroy m (Apecs.Experimental.Stores.Pushdown s c)
+ Apecs.Experimental.Stores: instance (GHC.Base.Monad m, Apecs.Core.ExplMembers m (s (Apecs.Experimental.Stores.Stack c)), Apecs.Core.Elem (s (Apecs.Experimental.Stores.Stack c)) GHC.Types.~ Apecs.Experimental.Stores.Stack c) => Apecs.Core.ExplMembers m (Apecs.Experimental.Stores.Pushdown s c)
+ Apecs.TH: makeMapComponentsFor :: Name -> [Name] -> Q [Dec]
+ Apecs.Util: newEntity_ :: (MonadIO m, Set world m component, Get world m EntityCounter) => component -> SystemT world m ()
- Apecs: Proxy :: Proxy
+ Apecs: Proxy :: Proxy (t :: k)

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+## [0.9.3]+### Added+- `newEntity_ = void . newEntity`+ ## [0.9.2] ### Changed - (#68) Add instances of MonadThrow, MonadCatch, and MonadMask to SystemT
apecs.cabal view
@@ -1,19 +1,19 @@-name:                apecs-version:             0.9.2-homepage:            https://github.com/jonascarpay/apecs#readme-license:             BSD3-license-file:        LICENSE-author:              Jonas Carpay-maintainer:          jonascarpay@gmail.com-category:            Game, Control, Data-build-type:          Simple-cabal-version:       >=1.10-synopsis:            Fast Entity-Component-System library for game programming+name:               apecs+version:            0.9.3+homepage:           https://github.com/jonascarpay/apecs#readme+license:            BSD3+license-file:       LICENSE+author:             Jonas Carpay+maintainer:         jonascarpay@gmail.com+category:           Game, Control, Data+build-type:         Simple+cabal-version:      >=1.10+synopsis:           Fast Entity-Component-System library for game programming description:   apecs is a fast, type-driven Entity-Component-System library for game programming.  extra-source-files:-  README.md,+  README.md   CHANGELOG.md  source-repository head@@ -21,73 +21,61 @@   location: git://github.com/jonascarpay/apecs.git  library-  hs-source-dirs:-    src+  hs-source-dirs:   src   exposed-modules:-    Apecs,-    Apecs.Core,-    Apecs.Components,-    Apecs.Stores,-    Apecs.System,-    Apecs.TH,-    Apecs.Util,--    Apecs.Experimental.Components,-    Apecs.Experimental.Reactive,-    Apecs.Experimental.Stores,+    Apecs+    Apecs.Components+    Apecs.Core+    Apecs.Experimental.Components+    Apecs.Experimental.Reactive+    Apecs.Experimental.Stores     Apecs.Experimental.Util-  other-modules:-    Apecs.THTuples-  default-language:-    Haskell2010+    Apecs.Stores+    Apecs.System+    Apecs.TH+    Apecs.Util++  other-modules:    Apecs.THTuples+  default-language: Haskell2010   build-depends:-    base             >= 4.9  && < 5,-    array            >= 0.4  && < 0.6,-    containers       >= 0.5  && < 0.8,-    exceptions       >= 0.10.0 && < 0.11,-    mtl              >= 2.2  && < 2.3,-    template-haskell >= 2.12 && < 3,-    vector           >= 0.11 && < 0.13-  ghc-options:-    -Wall+      array             >=0.4    && <0.6+    , base              >=4.9    && <5+    , containers        >=0.5    && <0.8+    , exceptions        >=0.10.0 && <0.11+    , mtl               >=2.2    && <2.3+    , template-haskell  >=2.12   && <3+    , vector            >=0.11   && <0.13 +  ghc-options:      -Wall+ test-suite apecs-test-  type:-    exitcode-stdio-1.0-  main-is:-    Main.hs-  hs-source-dirs:-    test+  type:             exitcode-stdio-1.0+  main-is:          Main.hs+  hs-source-dirs:   test   build-depends:-    apecs,-    base       >= 4.9  && < 5,-    containers >= 0.5  && < 0.8,-    linear     >= 1.20 && < 2,-    vector     >= 0.10 && < 0.13,-    QuickCheck >= 2.10 && < 3-  default-language:-    Haskell2010-  ghc-options: -Wall+      apecs+    , base        >=4.9  && <5+    , containers  >=0.5  && <0.8+    , linear      >=1.20 && <2+    , QuickCheck  >=2.10 && <3+    , vector      >=0.10 && <0.13 +  default-language: Haskell2010+  ghc-options:      -Wall+ benchmark apecs-bench-  type:-    exitcode-stdio-1.0-  hs-source-dirs:-    bench-  main-is:-    Main.hs+  type:             exitcode-stdio-1.0+  hs-source-dirs:   bench+  main-is:          Main.hs   build-depends:-    apecs,-    base      >= 4.9  && < 5,-    criterion >= 1.3  && < 2,-    linear    >= 1.20 && < 2-  default-language:-    Haskell2010+      apecs+    , base       >=4.9  && <5+    , criterion  >=1.3  && <2+    , linear     >=1.20 && <2++  default-language: Haskell2010   ghc-options:-    -Wall-    -O2-    -optlo-O3-    -- -fllvm-    -threaded-    -funfolding-use-threshold1000+    -Wall -O2 -optlo-O3 -threaded -funfolding-use-threshold1000     -funfolding-keeness-factor1000++-- -fllvm
src/Apecs.hs view
@@ -20,7 +20,7 @@    -- * Other     runSystem, runWith,-    runGC, EntityCounter, newEntity, global,+    runGC, EntityCounter, newEntity, newEntity_, global,     makeWorld, makeWorldAndComponents,    -- * Re-exports
src/Apecs/TH.hs view
@@ -6,6 +6,7 @@   , makeWorldNoEC   , makeWorldAndComponents   , makeMapComponents+  , makeMapComponentsFor   ) where  import           Control.Monad@@ -57,9 +58,17 @@ makeMapComponents = mapM makeMapComponent  makeMapComponent :: Name -> Q Dec-makeMapComponent comp = do-  let ct = return$ ConT comp-  head <$> [d| instance Component $ct where type Storage $ct = Map $ct |]+makeMapComponent = makeMapComponentFor ''Map++-- | Allows customization of the store to be used. For example, the base 'Map' or an STM Map.+makeMapComponentFor :: Name -> Name -> Q Dec+makeMapComponentFor store comp = do+  let ct = pure $ ConT comp+      st = pure $ ConT store+  head <$> [d| instance Component $ct where type Storage $ct = $st $ct |]++makeMapComponentsFor :: Name -> [Name] -> Q [Dec]+makeMapComponentsFor store = mapM (makeMapComponentFor store)  -- | Calls 'makeWorld' and 'makeMapComponents', i.e. makes a world and also defines 'Component' instances with a 'Map' store. makeWorldAndComponents :: String -> [Name] -> Q [Dec]
src/Apecs/Util.hs view
@@ -13,7 +13,7 @@   runGC, global,    -- * EntityCounter-  EntityCounter(..), nextEntity, newEntity,+  EntityCounter(..), nextEntity, newEntity, newEntity_, ) where  import           Control.Applicative  (liftA2)@@ -53,6 +53,15 @@ newEntity c = do ety <- nextEntity                  set ety c                  return ety++-- | Writes the given components to a new entity without yelding the result.+-- Used mostly for convenience.+{-# INLINE newEntity_ #-}+newEntity_ :: (MonadIO m, Set world m component, Get world m EntityCounter)+           => component -> SystemT world m ()+newEntity_ component = do+  entity <- nextEntity+  set entity component  -- | Explicitly invoke the garbage collector runGC :: System w ()