ECSpanse - an Entity Component System framework for Elixir

First of all thanks for using the library and all the feedback. Please do share the status updates for your project. As said above, I’m very curious about what people are building with the library. You could share screenshots, or really anything.

Now, let me try to answer your questions.

The biggest issue I have is that the game engine raises an UndefinedFunctionError when t (I think) elixir recompiles and I have to restart the app. I can open a GitHub issue if you’d like.

Yes, please, if you can open an issue and document as much as possible. I’m not aware of the issue. But just as a potential cause, you may have to restart your server if you change the code in your components or systems. The loop runs in a GenServer and that server needs to be restarted to pick up the changes.

Also since my game moves slowly, LiveView instance that join don’t see anything until a projection updates. I know I can get the data right after I create the projection, but would it make the coding cleaner if projections always treated the first run as an update. Since they never got called any state is technically different…

Good idea! I will make this update.

Also none of the tutorials mention a server running multiple concurrent games, but I guess you can just handle that in code, like create a session entity and make all of the units in that game children? I wonder if that kind of scoping could be built in idk if there’s a more efficient way than the way I’m doing it.

I totally understand that. It was a tradeoff I had to do at some point during the library development process.
Allowing multiple Ecspanse servers to run in parallel wouldn’t have been that hard. However, all the external communications with the Ecspanse would have to provide at least the name of the server they refer to. My initial approach was to issue a token with encoded server data when starting the server.
But then you would have to provide that token for every query, event, or projection, basically for all external interactions.
So I decided on a simpler API to the detriment of this functionality.

That being said, I think your session entity parent is the way to go.

Thanks again, and looking forward to your game updates.