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 +4/−0
- apecs.cabal +59/−71
- src/Apecs.hs +1/−1
- src/Apecs/TH.hs +12/−3
- src/Apecs/Util.hs +10/−1
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 ()