Giter Site home page Giter Site logo

capnmidnight / calla Goto Github PK

View Code? Open in Web Editor NEW
1.1K 1.1K 76.0 458.69 MB

Virtual Meetups through Jitsi

Home Page: https://www.calla.chat

License: MIT License

HTML 1.50% JavaScript 60.58% CSS 0.26% Batchfile 0.01% Shell 0.15% C# 0.84% TypeScript 36.66%
javascript meetups open-source webrtc

calla's People

Contributors

capnmidnight avatar heinzelotto avatar manang avatar mooomooo avatar severak2 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

calla's Issues

Only receive streams from people nearby

This is a really fun project :)
I would like to party with hundrets of people on one map.

To make this party scale up, users should just receive the videostreams from avatars nearby.
I don't know how hard this is to implement, but it would be a killer feature in my opinion.

Doesn't start on the Android phone

Screenshot_20200405-102759
Just gives a message (on top, which you don't see when pressing button at the bottom) that needs jitsi app.
I do have jitsi app installed, verified.
Please advise

Add device selector UI

Once users can select which devices they want to stream, we won't need the "show meeting UI" button anymore.

Create a Help button

After a user logs in, they lose access to the instructions. Add a help button to the toolbar so they can view the instructions again.

Speaker volume (Whisper - Shout)

It should be possible to set how loud you're speaking. The most quiet non-mute setting would make you audible only to users in squares adjacent to yours. The loudest setting would make you audible to all users within a given max radius which could be set by room administrators.

Users can occlude each other

There is no collision detection between users, so users can occupy the same grid tile.

However, there is a problem with strict "one user per time" in that it can turn doors into bottlenecks, you have to wait for people to clear a door way before anyone else can get through. If that user blocking the doorway is inattentive or lagged out, then it could be a long time before anyone can get through.

I think it would probably be better if everyone could still occupy the same tile, but their avatar got offset be a few pixels, so you could see that there is a stack of people. Perhaps the avatars could even be shrunk a little. Differently shaped avatars with transparent backgrounds would also help.

suitable tilesets

Hi,
I have gathered some suitable tilesets from itch.io:

There are also some avatars available:

these are enemies, but seems to be usable too:

There is definitely lot of stuff to take from itch.io.

I think I can volunteer to add code which will make these live, but I am not sure how to test it without my own jitsi meet instance. It's possible to test it somehow from localhost?

No "<" visible to get to "raw" jitsi interface

README says

If you need to change your microphone settings, click the < arrow in the menu in the upper right corner of the window to hide the map view and give you full access to the Jitsi Meet interface.

and IIRC it was there. But now for me I just have a menu bar on top and I found no way to hide away Calla interface and get into "raw" jitsi.

Here is how it looks for me:
DeepinScreenshot_select-area_20200430122559

using chromium Version 79.0.3945.130 (Developer Build) built on Debian bullseye/sid, running on Debian bullseye/sid (64-bit)

Rename Project

It's come to my attention that it is hard for people to say. So I'm thinking of renaming the project.

I generally like to name my projects after plants. The name "Lozya" was just a joke about "Jitsi" being the Bulgarian word for "wires" and looking up the Bulgarian word for "vines".

  • I like the word Kudzu, which is an invasive vine that tends to completely cover its host plants, and this project is an invasive extension of Jitsi that completely covers it.
  • A bunch of names I like from this list:
    • Akebia
    • Durandii
    • Jackmanii
    • Taiga
    • Zocoro

Would like to hear feedback or alternative suggestions. Doesn't have to be a vine name, but I would like to keep it to a plant name. Try to be aware of pronunciation difficulty and potentially offensive connotations.

Use logarithmic volume scaling

HTML5 audio volume setting seems to provide for a linear response. I couldn't tell at first, but after testing for a while, it seems pretty clear, given there is very little volume drop off until you reach the edge of the hearing range.

Lots of global variables

As the project grows, managing state gets harder. Need to encapsulate the various parts into classes, then use JS modules to import them to help enforce encapsulation.

Create an emote button in the toolbar

Requiring the user to clock their own avatar is not accessible. There should be two buttons on the toolbar, one to spawn the most recent emote, and one to select an emote. If there is no most recent emote, then the spawn button should open the selection window.

User Avatars

Users should be able to choose from a selection of avatars, or maybe build an avatar from parts. With no selection, we can default to using the avatarURL that Jitsi Meet provides per-user.

Formalize and document API

The interface between Calla and Jitsi (BaseJitsiClient extended into LibJitsiMeetClient) has a very ad-hoc interface that relies on a lot of implicit interfaces for objects existing. This is a maintainability nightmare, as there is no documentation on what interface the methods expect.

This requires two things:

  • all events need to be converted to an explicit event type, extending Event. Currently, they are raw Event objects with additional properties added to the with Object.assign.
  • all methods need to be converted to accepting base-type parameters. Currently, they take an instance of the object from which the parameters originate, then read the parameters directly.

While we're at it, write documentation about it (Doxygen/GhostDoc/etc).

Give room admin option to change map

Let the room admin select an existing map for the room. There should be some default, and then the first user in the room can change it, and then subsequent users get the latest room from the admin.

Increase size of emoji

The icons on the emoji selector are very hard to read. Just need to increase the font size of the container.

Accessibility

Investigate how one can make an RPG map accessible to screen readers.

Move Jitsi Meet server to a subdomain

It's currently running on the bare primrosevr.com domain. The frontend is on meet.primrosevr.com. Need to move the backend to jitsi.primrosevr.com.

Avatar animations and emotes

If we can detect mission activity (I think the Jitsi iframe API might have an event for it), then there should be a jabber animation on the avatar of users who are speaking.

Users should also have a list of emotion animations from which they can choose, probably presented through a radial context menu on their avatar.

No effect?

I am afraid I am missing something. I can see my friend's and my avatar on the map; but the volume is always the same. What are we supposed to do?

Zoomable interface

Users in conversation with each other should be able to zoom in to see more detail on each other's avatars.

They should also be able to zoom out to see much larger areas of the map.

Integrate Three / Aframe

This project is really cool.

It's not entirely unlike Networked Aframe, where you can have walk around 3D space and communicate video WebRTC audio connections (or configure an SFU, which is what Mozilla Hubs does). If you tapped into that ecosystem, you'd get all the benefits of full 2D and 3D sprite rendering, avatar templates, all kinds of stuff.

However, nobody's done NAF with Jitsi, or really intelligently though of how to do SFUs in a way that could benefit people in a video conference setting or, using positional culling, allow hundreds of people to occupy the space of a football field and organize as they see fit.

Maybe there's a way that we could work together in a way that benefits everyone? We're building a free, open source virtual chat (github.com/xrchat) and just getting to work on integrating a Jitsi adapter for NAF that looks, at least on paper, exactly like a 3D version of what you're doing right here... a collaboration would be great :)

Video view is completely occluded

Once we have user avatars, I don't think we necessarily need the webcam view, but Jitsi Meet also supports screensharing, which would be useful to have in the "game". Whiteboards, slideshows, pair programming, etc.

Unfortunately, I think making the system support the video stream might require reimplementing the frontend using the full lib-jisti-meet API https://github.com/jitsi/lib-jitsi-meet

That would require a LOT more effort than I'm willing to put into this.

Maybe just scaling the opacity of the game view down while the user is actively watching a video stream would be enough. Maybe maps could have transparent areas designed into then to let the video feed through, if the user is standing in a "presentation room" type area.

Everything is implemented in one file.

All of the client code is in index.html. That makes it easy to read for people new to the project, but it makes managing the project hard, increasing the likelihood of merge conflicts.

Also, there should be a distinction between the base integration with Jitsi (jitsihax.js which gets installed on the Jitsi Meet server, the sendJitsiHax function, and the tx/rxGameData functions) and the front-end code (everything else). Making a clear distinction between the two will make it easier for people to fork the project and implement their own front-ends in whatever language/framework/whatever they want.

Easier (docker) install

If you could consider default URLs of jitsi. and calla. (and maybe redirect www. to calla. if you wanted to keep that?), then PR #45 makes it so that you don't need to edit any files when hosting on other domains.

Make the front-end server look for tilemaps

Jitsi Meet's concept of rooms is ephemeral. They exist only as long as there are users in them. But a Lozya front-end server could have data (assets, tilemaps, tilesets) specific to pre-configured room names.

Right now, the map is hardcoded into index.html, and the only "tileset" is manually drawing light-grey or dark-grey tiles.

  • When a user first joins a room, the Lozya front-end should perform an AJAX request for .room, a JSON file that specifies how to draw the room.
  • If nothing is returned, it should request "default.room", or programmaticaly build a compliant room file.

Room files should have the following data:

  • Tileset Name
  • Layout of tiles in the map
  • Collision values for each tile in the map.

New users don't see remote users at their correct location

When a user first joins a room, they will receive names of everyone in the room from Jitsi. The client code then requests the current position of each user, but it fails (with an error) because Jitsi has yet to establish the data channel between the local user and the remote user.

The local user will not see the correct location of each remote user until those individual remote users move to a new location.

We need some means of determining when the data channel has connected. Perhaps that's pinging the remote user until the remote acknowledges, and then request the remote user's position.

Scroll around map view

The user should be able to scroll around the map view without moving their avatar, using touch drags or pushing their mouse cursor to the edge of the map.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.