Skip to content
This repository has been archived by the owner on May 1, 2024. It is now read-only.
/ ecs Public archive

(NOT READY TO USE) Experimenting with @colyseus/schema + ECSY

License

Notifications You must be signed in to change notification settings

endel/ecs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ATTENTION: THIS IS JUST AN EXPERIMENT

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.

Build status

Goal

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.

Progress so far

  • This module defines a Component that extends from Schema.
  • 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.
  • ECSY has a component called TagComponent that does not have any data on it. This conflicts with @colyseus/schema, as every Schema instance is required to hold at least one property. - @colyseus/schema@^1.0.0-alpha.29 now allows to have intermediary "abstract" structures with no fields.
  • 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.

Troubleshooting

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)

About

(NOT READY TO USE) Experimenting with @colyseus/schema + ECSY

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published