# an input is something the player does # it can be instantaneous (keydown, keyup) # it can be have duration (keypressed) # it can be analog (joystick) # it can be positional (mouse, touch) # a control is a function the game provides # it allows external control over the game # it # a binding is the configuration for which inputs map to which controls # it can be 1-to-1 # it can be left unmapped # it may not apply in all contexts # a context is a state in which a particular set of bindings are active # it is a tree # multiple contexts can be active, but only one will match and order matters # it can add bindings, remove bindings, or redefine bindings from the context above it # the root of the tree represents bindings that are universally active (unless removed) # different branches of the tree apply to different sections of the game # for example, an inventory screen may have its own context with additional or redefined bindings # several context branches may inherit bindings from a common parent