Coder Social home page Coder Social logo

exokitxr / zeo Goto Github PK

View Code? Open in Web Editor NEW
51.0 12.0 8.0 86.64 MB

Multiplayer WebVR worlds made out of npm modules.

Home Page: https://zeovr.io

JavaScript 99.53% Python 0.03% Shell 0.04% C++ 0.38% Makefile 0.01% HTML 0.02% PowerShell 0.01%
webvr vr threejs npm zeo multiplayer blockchain procedural-generation plugin

zeo's Introduction

Multiplayer WebVR worlds, procedurally generated with hotloaded npm modules. ๐ŸŒฑ๐ŸŒณ๐ŸŒ‹๐ŸŒฒ๐Ÿฆ๐Ÿƒ๐ŸŽฎ

Build status

โš ๏ธ Alpha. If you can't wait, join us on Slack or add your email here. โš ๏ธ

Overview

Mods are plain hotloaded Javascript. Frontend API is plain THREE.js. Mods run on both frontend and backend, so they can do pretty much anything. Voxel-based world builder mods loaded by default.

Mouse + keyboard emulation; only requirement is a modern browser -- but it's more awesome with a headset.

Avatars and items persist across servers on a globally distributed blockchain. Buy, sell, trade, and own your items, skins and plugins using worthless virtual credits.

Mod API supports the usual suspects: position tracking, controller events, multiplayer avatars tracking, configurator menu rendering, positional audio, asset loader, and more. Normalized to work the same regardless of headset (or lack thereof).

The server also handles firewall routing, module hotloading, and world storage, so you don't have to worry about that nonsense.

Getting started

Node

npm i modulesio/zeo
cd node_modules/zeo
node index.js

Docker

docker run -p 8000:8000 modulesio/zeo

Windows

Download latest release

Cloud

Deploy

Steam release

Coming soon ๐Ÿฆ„

Controls

Controls

Plugins

  • Procedural terrain w/ marching cubes
  • Block building with tesselated meshes
  • Voxel lighting system
  • Avatar skins, compatible with Minecraft format
  • Sword, bow, pickaxe
  • Console emulation via RetroArch
  • Tons more

Troubleshooting

General

Windows, OSX, and Linux are supported. node 8+ is required, but included if you use Docker or the Windows builds.

This project uses native modules, so if you're using node you'll need build tools and node-gyp configured or else you'll get an error on npm install.

OSX

  • Make sure you have Xcode and Command Line Tools
  • Check that node-gyp is in the PATH: node-gyp
  • Check that Command Line Tools are installed: xcode-select --install
  • Check that gcc is installed: gcc
  • Point xcode-select to the developer directory: sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
  • Make sure that ~/.node-gyp/<version>/include/node/config.gypi is correct (correct Xcode version, etc.)

Contact

Slack โ€ข Wiki โ€ข Twitter โ€ข Email

zeo's People

Contributors

jo-sm avatar zoecarver 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

Watchers

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

zeo's Issues

Physics engine crashes

This is master.

Uncaught TypeError: Cannot read property 'id' of undefined
    at Box.setIgnoreCollisionCheck (https://insecure.zeovr.io:8000/archae/plugins/bullet/bullet.js:464:69)
    at gripdown (https://insecure.zeovr.io:8000/archae/plugins/mc/mc.js:670:41)
    at EventRouter.handle (https://insecure.zeovr.io:8000/archae/plugins/input/input.js:71:11)
    at Object._triggerEvent [as triggerEvent] (https://insecure.zeovr.io:8000/archae/plugins/input/input.js:151:21)
    at EVENT_SPECS.forEach (https://insecure.zeovr.io:8000/archae/plugins/webvr/webvr.js:8658:25)
    at Array.forEach (native)
    at SIDES.forEach.side (https://insecure.zeovr.io:8000/archae/plugins/webvr/webvr.js:8653:27)
    at Array.forEach (native)
    at WebvrInstance.updateStatus (https://insecure.zeovr.io:8000/archae/plugins/webvr/webvr.js:8647:19)
    at _requestAnimationFrame (https://insecure.zeovr.io:8000/archae/plugins/webvr/webvr.js:8393:45)

Bullet physics build failing

debian jessie

https://gist.github.com/ibrahimduran/d06115880041762a0663c6406f86e03f

In file included from ../src/world.cpp:1:0:
../inc/helper.h:51:27: warning: backslash-newline at end of file
 #define MOXCHK(condition) \
 ^
  SOLINK_MODULE(target) Release/obj.target/physics.node
g++: error: /home/ibrah/Projects/vr/node_modules/zeo/core/engines/bullet/bullet3/build/src/BulletDynamics/libBulletDynamics.a: No such file or directory
g++: error: /home/ibrah/Projects/vr/node_modules/zeo/core/engines/bullet/bullet3/build/src/BulletCollision/libBulletCollision.a: No such file or directory
g++: error: /home/ibrah/Projects/vr/node_modules/zeo/core/engines/bullet/bullet3/build/src/LinearMath/libLinearMath.a: No such file or directory
physics.target.mk:134: recipe for target 'Release/obj.target/physics.node' failed
make: *** [Release/obj.target/physics.node] Error 1
make: Leaving directory '/home/ibrah/Projects/vr/node_modules/zeo/core/engines/bullet/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/home/ibrah/Projects/vr/node_modules/zeo/core/engines/bullet/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:106:13)
gyp ERR! stack     at ChildProcess.emit (events.js:192:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)

Was ultimately fixed by going into core/engines/bullet/bullet3 and doing manual build.sh from there.

Bullet physics engine crash when demoing mc plugin

TypeError: Cannot set property 'matrix' of null                                            
    at WebSocket.c.on.s (/home/k/zeo/installed/plugins/node_modules/world/server.js:425:55)
    at emitTwo (events.js:106:13)                                                                                                                                                 
    at WebSocket.emit (events.js:192:7)                                                                                                                                           
    at Receiver._receiver.onmessage (/home/k/zeo/node_modules/ws/lib/WebSocket.js:143:54)                                                                                         
    at Receiver.dataMessage (/home/k/zeo/node_modules/ws/lib/Receiver.js:375:14)                                                                                                  
    at extension.decompress (/home/k/zeo/node_modules/ws/lib/Receiver.js:344:40)                                                                                                  
    at _inflate.flush (/home/k/zeo/node_modules/ws/lib/PerMessageDeflate.js:279:12)                                                                                               
    at afterWrite (_stream_writable.js:383:3)                                                                                                                                     
    at onwrite (_stream_writable.js:374:7)                                                                                                                                        
    at afterTransform (_stream_transform.js:79:3)                                                                                                                                 
    at TransformState.afterTransform (_stream_transform.js:54:12)

Looks like some object isn't being tracked on the backend correctly.

Speed up World / npm tab initial render

Currently skipping too many frames, a bit of a jarring experience.

The tag renders can be batched and some of the processing work can be split to the backend, such as the image rendering.

capture

Finish multiplayer tags reconciliation

  • Commandize all tags actions
  • Pipe, process, save, and broadcase commands on the backend
  • Capture tags actions for self
  • Capture tags actions for remote users/remote headset/controller meshes

Backpack is too eager

It opens when a controller is anywhere behind the camera, even at your sides.

It should only open when the controller is behind the head/over the shoulder.

Delete hands engine

It might not be needed at all now that the world engine tracks tag grab states.

Add ability to exit out of headset mode

Just like the ability to exit out of keyboard + mouse mode. IT's less useful but would still be nice for the ability to revert to keyboard + mouse out of the headet when e.g. developing.

Utilify various calls

Too many _makeId sprinkled around a lot of engine modules, it should be in js-utils or something.

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.