# ucratic Interface Design Notes
## Objective
This document is written in order to prioritize the essential needs of a user interface for the ucratic user experience and editor. While this document is written in pseido requirement format, this is not the requirements document for an interface. It is a set of notes to guide discussion and prioritize for initial designs
The ucratic player interface needs to be able to juggle multiple user experiences within a web browser. Interface functions are as follow, needs to be prioritized for initial development (append priority to items):
*list is brainstorming, whittle down as needed or function fulfilled by another platform/not desired*
- [ ] Marketing Website landing page **Milestone 1 Priority**
- [ ] Web viewer **priority milestone 1**
- [ ] Player movement **priority milestone 1**
- [ ] Player text chat **priority milestone 1**
- [ ] Player voice chat **priority milestone 1**
- [ ] Player video chat **nice to have milestone 1**
- [ ] Player friends list (is there anything with ENS we could incorporate for cross-platform friends) **future**
- [ ] Help menu **priority milestone 1 documentation** **milestone 2 tutorial**
- [ ] tutorial **priority milestone 1 documentation** **milestone 2 tutorial**
- [ ] Metaversal directory **milestone 2**
- [ ] Player permissions Management **priority milestone 1** (currently Janus email and google, add ucratic and metamask)
- [ ] Player interactions with world
- [ ] interact with scripted objects
- [ ] Throw handheld objects outside of editor mode
- [ ] Fly (option to turn off in world)
- [ ] Current player list **milestone 1**
- [ ] Access ucratic asset marketplace **priority milestone 1 but limited**
- [ ] free Things
- [ ] 3d assets for Things
- [ ] Free landscapes
- [ ] Landscapes for sale
- [ ] NFT assets for sale
- [ ] free templates
- [ ] templates for sale
- [ ] free skies
- [ ] skies for sale
- [ ] Free daemons
- [ ] Daemons for sale
- [ ] Free scripted assets
- [ ] scripted assets for sale
- [ ] Free Meta Shortcut Format assets
- [ ] MSF for sale
- [ ] free materials
- [ ] materials for sale
Note: Items for sale can be an internal marketplace or API connection to external marketplace if partnership programs exist; just need to get an efficient asset pipeline
- [ ] Avatar inventory System **milestone 2**
- [ ] Access avatar wearables from wallet and change appearance
- [ ] Access avatars in wallet and select different avatars (VRM priority, glTF backup)
- [ ] World Inventory System **priority milestone 1
- [ ] Delineate NFT and non-NFT assets for player
- [ ] Import NFT from wallet
- [ ] Import asset from local file
- [ ] Import asset from ucratic asset library
- [ ] Inventory management system (by class, highlighted object etc.)
- [ ] Web3 functionality **Priority milestone 1**
- [ ] Connect wallet
- [ ] Mint
- [ ] World Editor **highest priority milestone 1**
- [ ] Blank world template
- [ ] Export world as glTF with components as separate objects in mesh
- [ ] Select objects
- [ ] Export individual objects in world as glTF
- [ ] drag-and-drop from inventory (template, 3d asset, daemon)
- [ ] drag-and drop from file on local storage
- [ ] Movement, rotation, scaling interface for objects
- [ ] add websurface attached to surface
- [ ] add image attached to surface
- [ ] add video attached to surface
- [ ] add reactive audio sound system
- [ ] add lighting
- [ ] script lighting blinking
- [ ] lighting color
- [ ] Add weather
- [ ] add meta shortcut format (easier name for the love of god) **later, msf open source needed**
- [ ] Recordplayer/stereo with ability to store and create playlists **later**
**later, needs R&D to componentize game mechanics**
- [ ] Add portal to other spaces and worlds **priority milestone 1**
- [ ] Loading screen for map loading **nice to have milestone 1**
- [ ] No code scripting of objects **nice to have milestone 1**
- [ ] object movement patterns
- [ ] Object sound patterns
- [ ] Object text reply (program daemons to speak like RPG NPC)
- [ ] Add text, sound, voice recording
- [ ] Travel through portal to other worlds, platforms
- [ ] Ability to buy NFTs (storefronts) **later**
- [ ] JS editor for advanced users and content creators
- [ ] JML editor **priority milestone 1**
- [ ] JS **nice to have milestone 1**
note: Can we have an animation while avatar is in edit mode like they are doing psychic magic?

The ucratic interface is intended to accommodate players of all technical skill levels, meaning that much of the functionality is no-code or low-code.
## Web Viewer
* ucratic will be displayed in web browsers
* Players will be able to put ucratic into full screen mode
* Players will be able to hide all on screen menus and icons with a button (except for button to display menus and icons)
* Players will be able to display hidden menus and icons with a button
## Player movement
* Player movement will need to satisfy two modalities at this point in time.
1. WASD, arrow keyboard movement
2. Joystick movement for common VR
* Other modalities include:
* teleport
* hand tracking
note: consider vignette mode if VR is introduced to avoid simulation sickness
* Players will be able to click into the screen or press escape to regain control of mouse pointing.
* Players will be able to jump with inertial physics
* Players will be able to crouch and move while crouching
Optional: jump while crouching
## Text Chat
* Players will have the ability to globally text chat
Decision Point: truly global or within a certain range?
* Text chat menu will default to a closed state
* Text chat will alert player of new message
* Text chat will be opened through an icon
* Text chat will take up no more than 5% of screen in wind
* Players will have the option for global chat
* note: global chat may be a local public chat with a TBD range
* Players will have the ability to chat with only logged in users
* Players will have the ability to chat with all friends
* Players will have the ability to DM another players
* Players will be able to block other players
* Players will be able to send and receive friend requests
* Players will be able to accept or deny friend requests
## World Editor
### Blank world
* Players will be able to initiate world building From home page before initiating ucratic webXR experiences
* Players will be able to save world before launching
* Requires wallet connect
* Players will be required to connect wallet to launch world after editing
* Editor mode will automatically enable flying and disable collision meshes
### In-game Edit Mode
* Players with correct permissions for world will be able to enter edit mode with button
* Players with correct permissions for world will be able to enter edit mode with hotkey
* Editor will have a separate menu from gameplay UI
### Selecting Objects
* Players will be able too select object with mouse click
* Players will be able to select multiple objects by click and drag
* Players will be able to select multiple objects by shift+click
* Players will be able to deselect single object through ctrl+click
### Exporting Models
* Export button will be in the editor menu
* Player will be able to export world as glTF with components as separate objects in mesh through
* Player will be able to export individual objects in world as glTF
* Above two options can be one button
* Player will be able to mint world as NFT and export model/add it to wallet
* note: players are responsible for licenses of their assets and their usage
* Mint button will be on the editor menu
* Player will be alerted to check world object licenses before minting and using world for anything other than personal use
### Player Inventory
* Player will be able to access inventory containing all types of assets (skybox, templaltes, object models, scripted objects, daemons, MSFs) through editor menu
* Player will be able too filter by asset class tags
* Player will be able too search by asset name
* Player will be able to search by asset class tags
* Player will be able to fiter by NFT and non-NFT
### Placing Objects in World
* Player will be able to drag-and-drop from inventory into world
* Player will be able to drag-and drop from file on local storage
* Dragging and dropping will automatically add object too pllayer inventory
* Player will be able to add a websurface attached to a plane object
* Player will be asked for URL at object creation
* Player will be able to resize websurface at object creation
* Player will be able to add websurface to the flat face of an object by right clicking object and selecting "add web browser" and then selecting a face
* Player will be asked for URL at object creation
* Player will be able to resize websurface so that it does not take up entire surface
* Player will be able to add an image attached to a plane object
* Player will be asked for file location(URL or upload) at object creation
* Player will be able to resize image so that it does not take up entire surface
* Player will be able to add image to the flat face of an object by right clicking object and selecting "add web browser" and then selecting a face
* Player will be asked for URL or file browser at object creation
* Player will be able to resize image so that it does not take up entire surface
* Player will be able to add a video attached to a plane object
* Player will be asked for location (URL or uplload) at object creation
* Player will be able to resize image so that it does not take up entire surface
* Player will be able to add video to the flat face of an object by right clicking object and selecting "add web browser" and then selecting a face
* Player will be asked for file location (URL or upload) at object creation
* Player will be able to resize video so that it does not take up entire surface
* Player will be able to add reactive audio system
* reactive audio will have its own creation menu
* Reactive audio will have a standard and advanced setting
* Standard setting will be user-friendly components for the best buy crowd (left and right, subwoofer)
* Advanced setting will include band passes, gain, ,etc.
* Reactive audio will include lights
* Player will select light color through color wheel or code (RGB or hex) at object creation
* Player will be able to add light color sequence at object creation
* Player will choose audio file(s) to play by file upload or connecting too music service (audius, spotify, etc) (too much?)
* reactive audio components will be labeled and have easily accessible description of component use
* Reactive audio components will be optionally clicked to select and place in world with another click
* Reactive audio components will be optionally dragged into world
* Reactive audio components will be connected in standard mode automatically through the audio creation mode
* Reactive audio commponents will be connected in advanced mode through click-drag from component visual connectors
* Player will be able too add lighting
* Lighting color will be selected through a color wheel or code (RGB, hex)
* Intensity will be selected through slider
* directionality will be selected using a circular selector similar to color wheel
* Player will be able to set color sequence and timing
### Manipulating objects in World
* Player will be able to move the objects along x,y,z axis
* use traditional 3D axis to drag or click portion of the axis and then use arrows for fine detail, click again to deselct axis
* After places object and selects it again, menu for numerical manipulation will allow movement by coordinate
* Player will be able too rotate objects around x,y,z axis
* Use traditional 3D rotation sphere tool or click rotation ais and arrows for fine detail, click again to deselct axis
* After places object and selects it again, menu for numerical manipulation will allow rotation by degrees around each axis
* Player will be able to scale objects
* Use method similar to Blender (e.g. scale by mouse movement)
* If mouse is still, scale along all axes using up and down arrows
* After places object and selects it again, menu for numerical manipulation will allow scale around each axis
### To do
- [ ] Add weather
- [ ] hackthegibson initiation object (maybe like a multisig where everyone interacts it and then game starts)
- [ ] Ability to connect interacting with an object to initiating a change or script (push button and slider) with no code (like wiring the sound system)
### Add portal to other spaces and worlds
* Required for world creation: need to define where people teleport into world
* Ideas for representation
* Slight glow showing clicking will teleport
* on click:

- [ ] No code scripting of objects
- [ ] object movement patterns
- [ ] Object sound patterns
- [ ] Object text reply (program daemons to speak like RPG NPC)
- [ ] Add text, sound, voice recording