Open World is a New Internet, Spatial Server, and 3D Web Browser.
The VR internet is managed by the Open World Consortium and connects many VR experiences into one seamless universe.
The Open World has its own constitution and voting rights.
64 Bit Engine (both in memory and Coordinates)
Spatial 3D server
Spatial Universe Browser
1:1 scale planets
Easiest is to download the Deploy.zip release file under Releases.
Run The MassiveServer on a Windows Machine
Run OpenWorldMinimum to show basic login flow
Run OpenWorld to get a basic 3D browser, with crafting. Use this as a starting point for new browsers.
The Massive2 dll is the engine. It handles syncing the world with the server and the front-end.
OpenWorld is a 3D universe browser and builder powered by the Massive2 dll.
Using Bing-type tiles
Each tile has a biome map (generated by the generator project, which connects to an OpenStreetMap server)
Generates Height, texture, and data files.
Data file has details of roads, buildings, water, etc. Units: Lon/Lat
Each new user is identified by a GUID generated by the server on first login
The client should store the GUID for later logins.
A client can associate a GUID with an email address to retrieve their account and data
Logging in flow
Use the OpenWorldMinimum to examine basic login flow.
When creating your own browsers use this flow. The Browser must first get the Lobby file from [http://BigFun.co.za/massive/lobby/]
Returns a JSON file of all registered servers
The lobby Form is shown, user selects the desired server
Select a server, and call the following in order,
Each server call will have a response
call: Globals.Network.ConnectToMassive (connect to actual universe)
with a valid email and password
the UserID is returned in the loggedin packet.
The Globals.UserAccount is now populated with login details.
On success, the user can now GETWORLD to get a list of nearby objects. Promiximity is throttled by the server.
Set the user's position with Globals.Network.AvatarMoveRequest
As the user moves around updated JSON lists are returned by the server, allowing client app to spawn nearby objects
Destroying and disposing objects is at the discretion of the client
Use other functions like CreateObjectRequest to create objects and associate them with current user
All components communicate through the Message bus - MMessageBus, or Globals.Network for net comms
Call static methods to request actions.
e.g. MMessageBus.ChangeAvatarRequest(this, Globals.UserAccount.UserID, "DOG01") to change the current user's avatar
to the model loaded into template with TemplateID and name DOG01
The server will response with a Globals.Network.AvatarChange handler call
Network runs on its own threads.
Use Massive2.Network to make network requests.
Server is source of truth, so all movement, spawn, chat, gets approved by server before broadcast.
MMessageBus will intercept some server messages relating to UI, and invoke them on the UI thread.
So use MMessageBus event handlers rather than network ones.
There are several Roots that MObjects are attached to.
The SceneGraph is updated, and rendered
MScene.ModelRoot - All models to be rendered (including those who are marked as invisible or out of range)
MScene.AstroRoot - All planetary phenomena
MScene.UtilityRoot - All systems that need a pulse
MSCene.MaterialRoot - All materials, textures, and Shaders
MScene.TemplateRoot - All Templates. "Lite" versions of renderable objects used to define construction.
An object must first be a member of the template root before an instance can spawn
All Renderable objects are instances of a Template object in the MScene.TemplateRoot
Types of Objects
MObject - Base class of anything synced to the Scenegraph Update and Rendering, including Physics
MSCeneObject - Renderable
MPhysicsObject - Attached to an MSceneObject to give it physics properties
Helper static functions contain convenient functions.
MSceneObject mo = Helper.CreateCube(parent, name, position);
MassiveTools and other static Tool classes help converting coordinates
Chat is still primitive, with limited friends lists, etc