Interface - The-Source-Eternal/Unwritten3D GitHub Wiki

Wherein we talk about interface of the game creator and with the game. They should be synonymous. A seamless editor/interface with multiple levels of complexity (see [Bret Victor's talk] (https://www.youtube.com/watch?v=PUv66718DII)).

There does need to be a way for a creator to press "play" to start their game or scene from the "beginning".

See game builder issues #45, #46, #47, and #48, though they are disorganized right now

Table of contents

Visual System

If you have a HUD, what is on it? What menus are you displaying? What is the camera model?

Control System

How does the game player control the game? What are the specific commands? (Summary of the pieces in esarlier sections)

Basic Controls

Movement

Move around in the x and z plane

Options:

  1. w/a/s/d
  2. e/s/d/f - because it makes more goddamned sense!!! That's where your fingers are anyway! And then you get more hotkeys!
  3. It may be fun to figure out hotkeys for DVORAK too Note: The thing about moving around with the keyboard is that it's hard to control speed. You end up moving the same speed all the time. When dragging the mouse, you can basically go as fast or as slow as you want.

Jump and perhaps fly up (see [Manipulating Objects] (https://github.com/The-Source-Eternal/Source/wiki/Interface#manipulating-objects) as well)

Options:

  1. space bar

Crouch and perhaps fly down (see [Manipulating Objects] (https://github.com/The-Source-Eternal/Source/wiki/Interface#manipulating-objects) as well)

Options:

  1. shift

Look

Options:

  1. Mouse movement

Run

Options:

  1. double-tap walking direction

Game Functionalities

Interface Tree Escapement

Options:

  1. esc
  • Ex1:

Playing

Inspector + Components (if in Components, esc leads straight to playing, they are interchangeable)

Select object

Text field entry

  • Ex2:

Playing

Chat

  • Ex3a:

Playing

Menu/Pause

Menu Option 1

Menu Option 1a

  • Ex3b:

Playing

Menu/Pause + Menu Option 1 + Menu Option 1a (esc from any place in the menu would go back to playing)

  • Ex4:

Menu/Pause

Playing

Deselect all objects

Open editing functionality (into inspector)

Options:

  1. e
  2. q (seems more opaque)
  3. o (for open, seems a bit broad to be helpful)
  4. right click the object
  5. double-click the object

Close editing functionality (to play)

Options:

  1. esc
  2. double click on the object again

Open post-it editor window

Options:

  1. right click on the object
  2. double click on the object

Close post-it editor window

Options:

  1. right click on the object again
  2. double click on the object again
  3. single click on the object again

Open pop-up right-click-type component menu

Options:

  1. right click on the object. Note: this would interfere with the regular right-click menu. I think they wouldn't be able to open the element inspector this way.
  2. double click on the object

Open component editing specifically

Options:

  1. c (for code or component)

Cursor placed in chat window (chat window is made visible if it isn't already)

Options:

  1. enter
  2. t Note: When editing text this functionality would not work (for example, when editing code or when editing inspector text fields)
  3. A gui button for when editing text
  4. Click in exposed chat window

Anything except text entry back to game

Options:

  1. p (play)
  2. esc (no interface tree)

~ ~ Watch out, we may get crazy here ~ ~

Editing code on the object itself

Options:

  1. Click on an object's exposed code, cursor goes to the spot clicked on
  2. Hover over an object's exposed code, cursor goes to the spot hovered over Note: Perhaps reticule turns into the cursor in the object's exposed code Note: Movement stops. In that case, probably click instead of hover. Could hover and press enter? Further pressing of enter will add paragraphs? In that case, enter couldn't be pressed to join chat
  3. Click/double click on an object to get a pop-up over it with a list of its scripts and other components?

Search components of object

Options:

  1. Select object, though not its exposed code (game) and start typing
  2. Hover over object and start typing

Search assets

Options:

  1. cmd/ctrl + f then type for lazy search (at any time or just while in inventory?)
  2. Click search bar when mouse isn't locked

IO Beam Functionalities

Toggle between code emitting and object manipulation

  1. Tab
  2. Enter
  3. m (for mode)
  4. \
  5. Arrow keys

Code emitting functionality

Options:

  1. e
  2. c
  3. r (for ray)
  4. f (for fire and foxy)
  5. x (for x)
  6. something better?

Manipulator Functionalities

Options:

  1. This may have different functionalities as well - perhaps you can use "m", "r", and "d" while in this functionality to manipulate the object (as described in number [switching transform functionality] (https://github.com/The-Source-Eternal/Source/wiki/Interface#switch-between-move-rotate-scaledimensionpushpull). Read more of [manipulating objects] (https://github.com/The-Source-Eternal/Source/wiki/Interface#manipulating-objects) in general to find different object manipulation possibilities

Editing Functionalities

Inspector/Components

Manipulating Objects

QUESTION: Are objects going to move in relation to the player, in relation to their axis, or both in different contexts? Note: Some different overall options presented here, need to figure out how to group them. ~ ~ Note 2: This gets crazier, fair warning ~ ~

Select object

Options:

  1. Click
  2. Hover
  3. Double click

Select multiple objects

Options:

  1. shift + select objects (probably click or double click in this case)
  2. shift + draw a line around all the objects desired
  • This would make a line appear so you can see what you're selecting (or possibly a box)
  • If it's a drawn line, clockwise selects only the objects completely contained inside the drawn line
  • If it's a drawn line, counter clockwise selects all the objects touched by the box
  • If it's a box, moving from bottom left to top right selects only the objects completely contained inside the box
  • If it's a box, moving from bottom right to top left selects all the objects touched by the box

Copy/Paste Object(s)

  1. alt + click + drag creates a copy that moves/rotates/scales as you drag the mouse.
  2. cmd/ctrl + c copies
  3. cmd/ctrl + v pastes (where?)

Gravity Gun

  1. Automatically available when object is clicked on
  • "l" to lock objects on its personal axis so that only it's translation is changed, not its rotation

Switch between Move, Rotate, Scale/Dimension/Push/Pull

  1. m, r, s/d/p
  2. Mouse scroll
  3. Arrow keys
  4. Tab
  5. Shift + any of those
  6. t (for transforms)

Translate object

Options:

  1. Click to select object, then move (gravity gun option)
  • Ex 1: click then space bar for up, click then shift for down
  1. Click and hold, then also move
  • Ex 1: click and hold + space bar for up, click and hold + shift for down
  1. Click and drag around the player
  • Ex 1: click and hold, drag right to move right in relation to the player
  1. Click and drag in relation to the object
  • Ex 1: click and hold, drag right always moves the object in the positive x direction
  1. Click and drag to move object in relation to the axis closest to direction of drag
  • Ex 1: click and hold, drag right moves the object in the direction of the axis that is most aligned with the direction of the right-dragging movement

Rotate object

Options:

  1. Scrolling:
  • Ex1: Scroll up or down for a backflip or forward roll
  • Ex2: Scroll left and right to rotate in those directions
  • Ex3: Not sure about the cartwheel - is it possible to scroll in a circle?
  • Ex4: Perhaps selecting an object for rotation and moving towards or away from the object can do backflips and forward rolls, freeing up and down for cartwheels. Not sure about this. It could become annoying if the player is too close to the object to get the full rotation they want. If they're closer it rotates more quickly?

Scale (Dimension or Push/Pull) object

Options:

  1. If move is click and drag, perhaps scale is click and release then move? Double click?
  2. More likely, if move is click, release, and move (gravity gun style), click and drag would be scale.

One of Move, Rotate, or Push/Pull Manipulation

Options:

  1. Arrow keys could be used for something, though for only two directions, so they're not a perfect solution.
  • Ex1: Perhaps in gravity gun functionality, arrow keys can rotate an object in two vertices
  • Ex2: Perhaps in gravity gun functionality, arrow keys can move an object farther away from the player
  • Ex3: Perhaps since rotation is missing an axis, arrow keys could take care of the cartwheel axis

Switch to axes/plane

Options: Note: Perhaps once the axes functionality is selected, perhaps all the previous gestures affect the object relative to the axis selected (or relative to which gesture we set for each axis). Perhaps without an axis selected, all movement is relative to the player.

  1. Just click on an axis of the selected object. It's axes should be exposed when it's selected (when the object is clicked or, perhaps, hovered over?). Again, I believe the mouse should be the user's or player's point of view and their view will follow the object as they move it. This is only with movement and scaling/dimensioning! With rotation, the players viewpoint remains centered on the object. In other words, the viewpoint remains directed at the same point on the object as when they started the manipulation.
  2. Double click then perform all of the same operations
  3. Double click on an axis
  4. Double click again to cycle between Move, Rotate, and Scale
  5. x/y/z
  6. z/x/c
  7. m/r/p

Note from thesourceeternal: These are selected for their clarity of concept. For convenient location, things like q, w, e, and r are better suited, but my personal experience is that I have wanted clarity over location in the past. We can allow easy re-mapping of the keys so that if people find they prefer a different arrangement it will be easily accessible to them.

Scroll through axes (locking onto each in turn)

Options:

  1. Mouse scroll
  2. Arrow keys
  3. Tab Note: Any of these could be used to scroll through moving, rotating, and dimensioning too
  4. x/y/z
  5. z/x/c

Snap to grid (rotation and dimensioning too)

Options:

  1. Hold shift? Shift is for crouching
  2. x
  3. Arrow keys? Though they can only do two axes, so perhaps you select an axis and then use the arrow keys.

Snap to edges and corners

Options:

  1. I'm too tired for this right now.
  2. A keyboard button to switch functionalities?
  3. Hold a keyboard button and move/rotate/scale object.

IMPORTANT NOTE: It is unlikely that we can do all of these features. Pick the cream of the crop!

Change axes origin

Options:

  1. Maybe this is what the arrow keys are for? To cycle through spots at which the origin is located?

Inventory

Note: Inventory will contain components of all kinds (perhaps assets as well).

Switch between hot bar items

Options:

  1. Number keys

Iterate through hotbar

Options:

  1. Mouse scroll
  2. Tab
  3. Arrow keys

Open inventory interface (add/remove items from hot bar)

Options:

  1. i

Scroll through inventory

Options:

  1. Anything/Multiple things
  2. Scroll
  3. Arrow keys
  4. Tab

Put inventory item in hot bar

Options:

  1. Shift + hot bar number when inventory item is selected
  2. Click and drag to hot bar
  3. Hover mouse over inventory item + hot bar number

Customization

Custom hotkeys

Options:

  1. Any button can be remapped. Option located in the pause menu.

Shortcut Brainstorms

What shortcuts are available?

Keyboard (character keys)

Note: keys near the left hand are optimal

  • Any character keyboard keys
  • shift + any character keyboard keys
  • cmd/ctrl + any character keyboard keys
  • alt + any character keyboard keys (I don't know if this would be very intuitive, not used much)
  • fn + any character keyboard keys (I don't know if this would be very intuitive, not used much)
  • Combinations of modifier keys + any character keyboard keys
  • space bar is of particular note

Keyboard (other keys)

  • tab
  • arrow keys
  • return
  • delete
  • esc
  • caps lock?
  • fn keys?

Mouse

  • Scroll up
  • Scroll down
  • Left click
  • Right click
  • Both click
  • Click and drag
  • Click and release
  • Double click
  • Hover
  • Combo of keyboard keys and mouse input?
  • cmd/ctrl + click(s) (ctrl + click is often a right click on macs)
  • shift + click(s)
  • alt + click(s)
  • Other keys?
  • Are gestures with the mouse recognized? Circles? Diagonal lines?

Trackpad

  • Single finger
  • Left click
  • Click and drag
  • Click and release
  • Double click
  • Hover
  • Two fingers (usually scrolling)
  • Right click
  • Up
  • Down
  • Circle?
  • Pinch (thumb and index finger)
  • Un-pinch (thumb and index finger)
  • Three fingers
  • What other gestures are well recognized? Circle for two and three fingers? Four fingers?
  • Combo of keyboard keys and trackpad input?
  • cmd/ctrl + click(s) (ctrl + click is often a right click on macs)
  • shift + click(s)
  • alt + click(s)
  • Other keys?

Regular Brainstorms

Ideas that need to be integrated into the rest of the doc.

Seamless

  • Clicking on the object gives floating components over it and floating code. Smaller than full screen. You can turn it into full screen if you want. (speech bubble).
  • Icons for components and objects
  • Different components/types of assets are different colors and turn the object that color briefly
  • Accessing object components and the inspector
  • Speech bubbles first? Maybe like Facebook timeline hover over link. For short pieces of code, but maybe for the inspector.
  • Post-it window ~ Half-screen window ~ Full-screen window (translucent background) ~ Thing in the corner like with chrome inspector console, switch position or switch to full screen. ~ Only one player can edit an object at a time (no write access) ~ Other people can see the object being edited (read access)
  • Code Wand
  • Component pasting functionality ~ Different components/types of assets are different colors and turn the object that color briefly
  • Object manipulation functionality

Audio, music, sound effects

Help System

Do you have one? What is it?