Skip to main content

Entity-Component System very popular design pattern for big and complex games

Entity-Component System


Entity component system is a widely used game designing pattern for gaming. 



what is an Entity-Component System?


ECS can be divided into three main categories 

1. Component is a behavior or data 

2. Entity is just an id and you can add Component to Entity

3. System deals mostly with logic like rendering game, updating physics or dealing with game logic



so a Component is just behavior or little logical data like the position of a character in-game scene or scaling factor or RGB color value.


An entity is just a id and its main job to track all behavior ( Component ) so that's means a Entity can multiple Component or behavior.


added small example in typescript 



working link=> https://stackblitz.com/edit/gaming-entity-component-system?file=index.ts

above working link easily be converted to c++ which is widely used gaming language 


example
 Entity position Component scale Component rotation Component
 Monster   Monster position Monster scalingMonster rotation 
 hero    hero position                           hero scaling       hero rotation
 boos boss position boss scaling boss rotation
 so on...   

System- handle complex logics mainly rendering update components at runtime or change the behaviour with renderloop 



notes about ecs 


1. the above example is very simple and suitable for big games


2. But for big games ECS combine with other designing pattern


3.                     Singleton pattern is widely used pattern to share common data between different game scene


4. static classes widely used to solve logic. 



5. sometimes inheritance is a better to approach when ur game is small



6. composition is another approach which can be used in creating games


7. so the question where i can use ECS.


my advice


 if the game contains multiple characters like a hero, monster, boss, sub-boss, evil hero or many more and each character share multiple behaviour it would be tuff to used inheritance in such cases.





Comments

Popular posts from this blog

Creating a word Scramble game where you can drag and drop the word and create a complete word. (drag and drop word Scramble game).

Creating a word game using  phaser game engine which is a javascript based gaming engine  where u can drag and drop world like Word Scramble Game and complete a given word. your index.html file look like below < html > < head > < script src = "src/phaser.min.js" ></ script > < script src = "src/wordGame.js" ></ script > < script src = "src/main.js" ></ script > </ head > < body > </ body > </ html > 1.    <script src="src/phaser.min.js"></script> required to run the  phaser game engine. 2. rest of the two files deals with game logics      <script src="src/wordGame.js"></script>       <script src="src/main.js"></script> you can download whole project from https://github.com/manishchauhan/wordgame/tree/master just copy and paste the project in your local server and run ...

starting with three.js and react with a very simple example

 1. three.js is undoubtedly the best library to create interactive content for the web in 3d. link https://threejs.org/ a working sample of three with react can be found below https://stackblitz.com/edit/react-7n5qf9?file=src%2FApp.js why choose threejs 1. lightweight  2.fast 3.big community  https://discourse.threejs.org/ 4. even you can use unity or unreal to publish html5 content but i don't think that would be acceptable in many cases. 5. open-source project. i created a running sample with React  https://stackblitz.com/edit/react-7n5qf9?file=src%2FApp.js

A simple binary search tree with generic approach tree can store any type of data. (DFS and BFS)

 1. a binary search tree in c++ using a generic approach with both BFS and DFS approach    working tree    https://www.onlinegdb.com/edit/HkuQLdA-w code=> some properties of binary search tree-> 1. binary search tree is not always a balanced tree.  2. Inorder, traversing gives you sorted data.  3.  best is o(log n) and worst is O(n).  4. left node data is always less than root data and right node data always be greater than root data.  5. red-black tree STL map is a balanced binary search tree. *******************************************************************************/ #include <stdio.h> #include<iostream> #include<queue> using namespace std; template < typename T > class Node {   //can store any type of data private:   //genric data or store any type of data   T data;   //reference of left pointer   Node *left = nullptr;   //reference of right pointer   Node *rig...