Builder:Web APIs we use

From Tootsville Wiki-Wiki
Revision as of 14:20, 17 August 2016 by BRFennPocock (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

We'll be wrapping the following interfaces in the various client-side Common Lisp modules. Package names in ALL-CAPS are the CL packages wrapping the underlying libraries (if any).

The division between Parrot modules and Gossip Mouse modules is a bit artificial, but in general, device-local actions are Parrot, network tasks are Gossip Mouse. That also indicates which type of avatar is used for configuration and errors.

Parrot Modules

Computation

COMMON-LISP
JSCL is our Common Lisp compiler. It uses packages COMMON-LISP (alias: CL, JSCL) and will soon also export symbols into JSCL/FFI (which will affect, eg, JSCL::OGET scoping)
CLOSE
a simple OO-like package that isn't CLOS but provides some simple OO-like integration macros.

Debugging & Quality Assurance

WEBREPL
The REPL is partially packaged via JSCL, but we want to run it in its own frame in a shared context.
WEBDEBUG, WEBINSPECT
There may also be a debugger hook for the parrot interface (farther future).
Analytics via PARROT
We use Google Analytics to track events of various kinds. Some of these come from the “raw” Javascript code; others are invoked by PARROT events. We may change this to instead or also use Facebook analytics for Facebook users, etc.

3D Graphics, Physics, & Display

BABYLON
WebGL and friends, mostly c/o BabylonJS … Loading models, applying textures — integration with mesh networking
DEVICE.AMBIENT-LIGHT
Ambient Light Sensitivity
UX.OVERLAY
for displaying heads-up display and on-screen controls
UX.PARROT
…
UX.GOSSIPMOUSE
…

Notifications

PARROT
PARROT package has PEEP and SQUAWK events for minor or major notifications. Desktop notifications work via Notifications API, at least on Linux and Android.

First Run, Accounts

PARROT.NEW-PLAYER
…
PARROT.BUDDY-LIST
…
PARROT.CHILD-ACCOUNT
…

Sound & Music

UX.BABYLON
also handles some audio, we may reach “under the hood” to touch Web Audio API — but we'll try to use Babylon's interface mostly, right?
UX.EVENTS
Binding to the general events model for Gossipnet, et al.
UX.MAKE-NOISE
Discuss Toot Voices package MAKE-NOISE
UX.SPEAK
Not any time soon. Might just wrap browser built-ins? still very flaky. May need a polyfill.

Camera, Microphone

CHATTER
TODO: Discuss streaming audio, video chats, via virtual mobile in-game
PLAYER-INPUT.LIPREAD
Facial recognition, character facial puppetting; example here and tools and library
PLAYER-INPUT.LISTEN
Voice recognition via PocketSphinx.JS but we'll have to work on training it for a reasonable conversational vocabulary, or else try browser built-ins, maybe allow choice between both/either (polyfill style)

Gamepad, Touch, Keyboard

PLAYER-INPUT.EVENTS
Generalized interface for controlling your character
PLAYER-INPUT.KEYBOARD
TODO: Discuss keyboard events
PLAYER-INPUT.TOUCH
TODO: Discuss touch events
PLAYER-INPUT.GAMEPAD
TODO: Discuss gamepad events
PLAYER-INPUT.TABLETPAD
Using a tablet or phone as a controller for another device, eg, PC
PLAYER-INPUT.BLUETOOTH
Might need some magic to access Bluetooth gamepads like Wiimotes

Physical Device Properties

DEVICE.VIBRATION
Vibration API
DEVICE.ORIENTATION
Screen Orientation, also Screen Orientation

Gossip Mouse Modules

HTTP

XHR
Provides simple access to XMLHttpRequest objects

Gossipnet

GOSSIPNET.NET
Core connectivity
GOSSIPNET.EVENTS
Interaction with player input, Babylon, etc.
GOSSIPNET.INTEGRITY
TODO: discuss netsplit detection, blockchains, signatures
GOSSIPNET.GENESIS
TODO: discuss directory service, STUN/TURN servers

Asset Distribution

ASSETS.SERVICE
The asset distribution system should be using Service Workers (much like Background Sync to handle asset access transparently; see Using Service Workers
ASSETS.TORRENT
WebTorrents
ASSETS.ARCHIVES
Archived assets, sprite sheets, globbed sounds, etc.: TODO, discuss

Simulation world

WORLD.EVENT
Core event bridge

Network Sensitivity

DEVICE.NETWORK
This game can burn through a lot of data (as with any on-line MMO, I suppose). We can use Network Information API on Firefox Mobile to warn users who are likely to be on metered mobile connections.