swagyolox9000

swagyolox9000

How to create MMO Virtual Office with Video Chat using Elixir/Godot(?)

Hi,
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

I do not want to use javascript libraries for 3D. I want to use a game engine like Godot to create the 3D workspace. Godot can export to HTML canvas. I was thinking maybe using LiveView to have a overlay for the video and video/audio options over the canvas.

  1. 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?
  2. 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?
  3. Has anyone attempted multiplayer game made with a game engine like Godot and an elixir front/backend?

Thank you in advanced!

Most Liked

thoughtarray

thoughtarray

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.

Where Next?

Popular in Questions Top

dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
quazar
How to set Jason to encode all fields in ecto schema, I don’t care about security and implementing only is taking long list of attributes...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
mgjohns61585
Could someone help me? I'm making my first elixir program, number guessing game. I can't figure out how to convert the user's guess from ...
New
LegitStack
I’m trying to make a websocket server in Phoenix or raw Elixir. I heard about gun, I think I could use cowboy, but since I’m not that sma...
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New

Other popular topics Top

JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New

We're in Beta

About us Mission Statement