THIS LIBRARY IS CURRENTLY IN ACTIVE DEVELOPMENET, THINGS WILL SIGNIFICANTLY CHANGE IN NEAREST FUTURE!
Simple Entity-Component-System (ECS) engine for JavaScript written in TypeScript.
npm install ecsengine --save
- Create an instance of engine
import { Engine } from 'ecsengine'
const engine = new Engine()
- Define your components. The components are just to store data. It does not have to contain any logic. According to ECS paradigm - you store all your logic in System's code.
class PositionComponent extends Component{
x: number = 0
y: number = 0
z: number = 0
}
class PhysicComponent extends Component{}
Component may be an empty class - just to point that entity with that component have some behavior.
- Define component group for system. Each system interested in work with entity that have some set of components.
class PhysicComponentGroup{
position: PositionComponent = new PositionComponent()
physic: PhysicComponent = new PhysicComponent()
}
- Define system and describe your logic there:
@componentsGroup(PhysicComponent)
class PhysicSystem extends System<PhysicComponentGroup>{
execute(content: PhysicComponentGroup){
content.position.x -= 9.8
}
}
Also note that this code use decorators so you must have "experimentalDecorators": true,
in your tsconfig.json
- Define class for your entity:
class GameObject extends Entity{
constructor(){
super()
this.add(PhysicComponent, {})
this.add(PositionComponent, {})
}
}
- Add system and entity to engine and run it:
const gameObject = new GameObject()
engine.addSystem(PhysicSystem)
engine.addEntity(gameObject)
setInterval(()=>{
engine.update()
console.log(gameObject.components.get(PositionComponent))
}, 100)