The Wayback Machine - https://web.archive.org/web/20230626230118/https://github.com/endel/ecs
Skip to content

endel/ecs

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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