I’m trying to transition my career of 5 years into Elixir and I’d like to build an interesting portfolio project. The project idea that intrigued me the most was to create something like https://www.gather.town. To start off the MVP would consist of:
- customizable, shareable links to have other users join your workspace
- the workspace consists of a 3D world where users have their own avatar
- when users are within a specified distance to another user, video chat will be initiated
- Could you sync in real time all the users from Godot to the Elixir backend and back? Are there some issues I need to be aware of?
- With some research I saw that I would need to implement ECS on the backend since Elixir is a functional programming language. Godot is not a ECS-based game engine but Unity is. Does it matter if the game engine itself is not ECS?
- Has anyone attempted multiplayer game made with a game engine like Godot and an elixir front/backend?
Thank you in advanced!
Hey there! I asked a difficult and open-ended question myself; so I really want to try to respond to one as well.
Interestingly, Mozilla Hubs uses Elixir (and Phoenix) to power the network and a lot of the features you’re talking about: reticulum. Might be worth a look to see how they do things.
Regarding syncing users. I’m not sure what all this entails, but using websockets with Elixir is a full-duplex way of sending and receiving information without polling (and is the backbone of LiveView). Phoenix Channels and PubSub mixes into this too as the protocol for sending/broadcasting these updates. If you want to tie into it, I understand you’ll probably have to implement your own client in Go as outlined here.
I’m a bit of a noob when it comes to ECS here, so I’ll try my best. I don’t think you necessarily need to worry about the ECS pattern in Elixir. Use Elixir as your “network” for data updates like Mozilla does with Hubs. When new data comes into a client, store it in an ECS-compatible way and can use ECS there to make sure the new data is acted upon by your systems.
There’s quite a history of people using Elixir as the background of multiplayer gaming. There’s even a talk from the recent ElixirConf US talking about game dev in Elixir that might be worth a watch.