NOT READY TO USE
The current state of this repository is very messy - basically a bunch of glue code trying to make @colyseus/schema
work along with ECSY.
If you're feeling brave enough, you're encouraged to continue performing some experiments with this repository and help it reach a not that bad state.
There are quite a few Entity Component Systems written in JavaScript available out there. I'm currently experimenting integrating @colyseus/schema
with ECSY.
The goal of this project is to have a good way to use ECS along with Colyseus - being able to synchronize entities and components defined in the Entity Component System.
- This module defines a
Component
that extends fromSchema
. - ECSY and
@colyseus/schema
require the end user to to define the "schema" of the data structure- I'm overriding the ECSY's
registerComponent()
to replicate the definitions from@colyseus/schema
(through the@type()
annotation) into ECSY's schema.
- I'm overriding the ECSY's
ECSY has a component called- @colyseus/schema@^1.0.0-alpha.29 now allows to have intermediary "abstract" structures with no fields.TagComponent
that does not have any data on it. This conflicts with@colyseus/schema
, as everySchema
instance is required to hold at least one property.- The test scenario is able to encode the
World
into ~1236 bytes.- The test scenario has 50 entities with 3 components on each of them - two vectors and a component holding a string.
Make sure you create or join the room on the client by passing in a concrete type, not just the generic. For instance instead of:
await client.joinById<MyGameState>(roomId)
you should use
await client.joinById(roomId, {}, MyGameState)