/// <summary>
    /// Additional init, ensures that InputShell has instance allocated
    /// </summary>
    void Start()
    {
        inputShell = InputShell.Instance;

        // Shell control states don't need to generate events
        inputShell.ZoomVector.GenerateButtonEvents   = false;
        inputShell.ScrollVector.GenerateButtonEvents = false;
    }
    /// <summary>
    /// Maps input from sources and states to the shell input interface
    /// </summary>
    void ApplyInputToShell()
    {
        InputShell shell = inputShell;

        // Update select button
        bool selectButton = inputSwitchLogic.GetCurrentSelectPressed();

        shell.SelectButton.ApplyState(selectButton);

        // Update menu button
        bool menuButton = inputSwitchLogic.GetAnyMenuPressed();

        shell.MenuButton.ApplyState(menuButton);

        // Update the scroll vector
        shell.ScrollVector.AddState(inputSources.touch6D.touchState);
        if (inputSources.gamepad.IsActiveTargetingSource() && !inputSources.gamepad.JoystickDragging)
        {
            shell.ScrollVector.AddState(stateLeftJoyScroll);
        }
        shell.ScrollVector.AddState(stateTargetScroll);
        shell.ScrollVector.FinalizeState();

        // Update the zoom vector
        shell.ZoomVector.AddState(stateHandZoom);
        shell.ZoomVector.AddState(stateSixDOFZoom);
        shell.ZoomVector.AddState(inputSources.editor.dragControl);
        shell.ZoomVector.AddState(stateMouseWheelZoom);
        shell.ZoomVector.AddState(stateTrigZoom);
        shell.ZoomVector.FinalizeState();

        // Update the cardinal input vector
        shell.CardinalVector.AddState(stateLeftJoyCardinal);
        shell.CardinalVector.AddState(statePadCardinal);
        shell.CardinalVector.FinalizeState();

        // Update targeting ray
        shell.TargetOrigin      = inputSwitchLogic.GetTargetOrigin();
        shell.TargetOrientation = inputSwitchLogic.GetTargetOrientation();
        shell.TargetingReady    = inputSwitchLogic.GetTargetingReady();
    }