All Projects → andygeiss → ecs

andygeiss / ecs

Licence: MIT license
Build your own Game-Engine based on the Entity Component System concept in Golang.

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to ecs

ECS
Entity-Component-System
Stars: ✭ 122 (+79.41%)
Mutual labels:  entity-component-system
TinyECS
Tiny ECS is an easy to use Entity-Component-System framework that's designed specially for Unity3D.
Stars: ✭ 20 (-70.59%)
Mutual labels:  entity-component-system
docker-compose-scale-example
Example of Docker Compose scale and load balancing features
Stars: ✭ 18 (-73.53%)
Mutual labels:  scalability
Clustering4Ever
C4E, a JVM friendly library written in Scala for both local and distributed (Spark) Clustering.
Stars: ✭ 126 (+85.29%)
Mutual labels:  scalability
usl
Analyze system scalability with the Universal Scalability Law
Stars: ✭ 33 (-51.47%)
Mutual labels:  scalability
qed
The scalable, auditable and high-performance tamper-evident log project
Stars: ✭ 87 (+27.94%)
Mutual labels:  scalability
workerpool
A workerpool that can get expanded & shrink dynamically.
Stars: ✭ 55 (-19.12%)
Mutual labels:  goroutine
nelua-tetris
Tetris game clone made in Nelua with Raylib
Stars: ✭ 16 (-76.47%)
Mutual labels:  raylib
FNode
Tool based in nodes to build GLSL shaders without any programming knowledge written in C using OpenGL and GLFW.
Stars: ✭ 81 (+19.12%)
Mutual labels:  raylib
context
A proof of concept implementation of scoped context
Stars: ✭ 16 (-76.47%)
Mutual labels:  goroutine
ent-comp
A light, fast Entity Component System in JS
Stars: ✭ 25 (-63.24%)
Mutual labels:  entity-component-system
concurrent-ll
concurrent linked list implementation
Stars: ✭ 66 (-2.94%)
Mutual labels:  scalability
rockgo
A developing game server framework,based on Entity Component System(ECS).
Stars: ✭ 617 (+807.35%)
Mutual labels:  entity-component-system
nest-convoy
[WIP] An opinionated framework for building distributed domain driven systems using microservices architecture
Stars: ✭ 20 (-70.59%)
Mutual labels:  scalability
raylua
Cross-Platform, Modern, And updated LuaJIT bindings for raylib library.
Stars: ✭ 77 (+13.24%)
Mutual labels:  raylib
captcha
Go package captcha generation and verification of image, Refer from https://github.com/dchest/captcha. Use captcha pool generation
Stars: ✭ 29 (-57.35%)
Mutual labels:  goroutine
errgroup
errgroup with goroutine worker limits
Stars: ✭ 143 (+110.29%)
Mutual labels:  goroutine
noroutine
Goroutine analogue for Node.js, spreads I/O-bound routine calls to utilize thread pool (worker_threads) using balancer with event loop utilization. 🌱
Stars: ✭ 86 (+26.47%)
Mutual labels:  goroutine
hazelcast-csharp-client
Hazelcast .NET Client
Stars: ✭ 98 (+44.12%)
Mutual labels:  scalability
RASM
3D Ray-Tracing WebGPU Game Engine Written in Rust WebAssembly.
Stars: ✭ 20 (-70.59%)
Mutual labels:  entity-component-system

ECS - Entity Component System

Go Report Card BCH compliance

Build your own Game-Engine based on the Entity Component System concept in Golang

The architectural pattern of an ECS is mostly used in game development, to provide long-term maintainability and extendability of large, dynamic systems.

Overview

An Entity is basically a composition of different components and has an ID.
A Component contains only the state or data of one specific aspect like health, position, velocity etc.
A System handles the behaviour or logic of the components. A movement system uses the position and velocity to implement an entities movement.

Table of Contents

Goals

  • Provide an easy-to-use framework to build a game engine from scratch.
  • No dependencies to other modules or specific game libraries - Feel free to use what fits your needs.
  • Minimum overhead - use only what is really needed.
  • Plugins to offer unlimited room for improvements.

Installation

From Source

go get -u github.com/andygeiss/ecs

Steps to start

The first step is to be clear about what we want our game engine to do. The main task is to make sure that we have combined all the essential components that are responsible for the technical and logical aspects.

An Entity Component System (ECS) helps us to do this because the logical components (data) such as entities and their components can be separated from the actual logic. Among other things, this has the advantage that we can implement and test the game mechanics independently from the rest.

So let's start...

We decide to use 2D and define the three most important components:

In the next step, the three most important systems implement:

We use main.go to call the entrypoint safely.

I want more than 64 Components !

Yes! You can do that by adding a Name() function to your component and using FilterByNames instead of FilterByMask. However if you want the fastest possible solution you need to know that FilterByNames is 40 times slower than FilterByMask. This will maybe not impact your Game if there are only a few thousands of entities. ;-)

bench

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].