apecs: Fast Entity-Component-System library for game programming

[ bsd3, control, data, game, library ] [ Propose Tags ] [ Report a vulnerability ]

apecs is a fast, type-driven Entity-Component-System library for game programming.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.1.0, 0.2.0.0, 0.2.0.1, 0.2.0.2, 0.2.0.3, 0.2.1.0, 0.2.1.1, 0.2.2.0, 0.2.3.0, 0.2.4.0, 0.2.4.1, 0.2.4.2, 0.2.4.3, 0.2.4.4, 0.2.4.5, 0.2.4.6, 0.2.4.7, 0.3.0.0, 0.3.0.1, 0.3.0.2, 0.4.0.0, 0.4.0.1, 0.4.1.0, 0.4.1.1, 0.5.0.0, 0.5.1.0, 0.5.1.1, 0.6.0.0, 0.7.0, 0.7.1, 0.7.2, 0.7.3, 0.8.0, 0.8.1, 0.8.2, 0.8.3, 0.9.0, 0.9.1, 0.9.2, 0.9.3, 0.9.4, 0.9.5, 0.9.6
Change log CHANGELOG.md
Dependencies array (>=0.4 && <0.6), base (>=4.9 && <5), containers (>=0.5 && <0.8), exceptions (>=0.10.0 && <0.11), mtl (>=2.2 && <2.4), template-haskell (>=2.12 && <3), unliftio-core (>=0.2.0.1 && <0.3), vector (>=0.11 && <0.14) [details]
License BSD-3-Clause
Author Jonas Carpay
Maintainer jonascarpay@gmail.com
Category Game, Control, Data
Home page https://github.com/jonascarpay/apecs#readme
Source repo head: git clone git://github.com/jonascarpay/apecs.git
Uploaded by jship at 2024-03-20T21:39:02Z
Distributions LTSHaskell:0.9.6, NixOS:0.9.6, Stackage:0.9.6
Reverse Dependencies 5 direct, 1 indirect [details]
Downloads 28289 total (117 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2024-03-20 [all 1 reports]

Readme for apecs-0.9.6

[back to package description]

apecs

apecs is an Entity Component System (ECS) library for game development.

apecs aims to be

  • Fast - Performance is competitive with Rust ECS libraries (see benchmark results below)
  • Safe - Completely hides the dangers of the low-level machinery
  • Concise - Game logic is expressed using a small number of powerful combinators
  • Flexible - Easily add new modules or backends
  • Cool

Benchmarks

Games/articles
Packages

Example

{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} import Apecs import Linear (V2 (..)) newtype Position = Position (V2 Double) deriving Show newtype Velocity = Velocity (V2 Double) deriving Show data Flying = Flying makeWorldAndComponents "World" [''Position, ''Velocity, ''Flying] game :: System World () game = do newEntity (Position 0, Velocity 1) newEntity (Position 2, Velocity 1) newEntity (Position 1, Velocity 2, Flying) -- 1. Add velocity to position -- 2. Apply gravity to non-flying entities -- 3. Print a list of entities and their positions cmap $ \(Position p, Velocity v) -> Position (v+p) cmap $ \(Velocity v, _ :: Not Flying) -> Velocity (v - V2 0 1) cmapM_ $ \(Position p, Entity e) -> liftIO . print $ (e, p) main :: IO () main = initWorld >>= runSystem game