コード例 #1
0
 public static void GetInputSourceIcons(uint mapperSource, uint mapperParameter, ref atFixedArray_sIconData_4 icons)
 => Invoke(Memory.CTextFormat_GetInputSourceIcons, mapperSource, mapperParameter, AsPointer(ref icons));
コード例 #2
0
 public static void GetIconListFormatString(ref atFixedArray_sIconData_4 icons, byte *buffer, uint bufferSize)
 => Invoke(Memory.CTextFormat_GetIconListFormatString, AsPointer(ref icons), buffer, bufferSize, null);
コード例 #3
0
        public static unsafe string GetId(this InstructionalKey key)
        {
            // special cases
            switch (key)
            {
            case InstructionalKey.ControllerDPadNone: return("b_8");

            case InstructionalKey.ControllerDPadAll: return("b_9");

            case InstructionalKey.ControllerDPadUpDown: return("b_10");

            case InstructionalKey.ControllerDPadLeftRight: return("b_11");

            case InstructionalKey.ControllerLStickRotate: return("b_20");

            case InstructionalKey.ControllerRStickRotate: return("b_29");

            case InstructionalKey.SymbolBusySpinner: return("b_44");

            case InstructionalKey.SymbolPlus: return("b_998");

            case InstructionalKey.SymbolArrowUp: return("b_0");

            case InstructionalKey.SymbolArrowDown: return("b_1");

            case InstructionalKey.SymbolArrowLeft: return("b_2");

            case InstructionalKey.SymbolArrowRight: return("b_3");

            case InstructionalKey.SymbolArrowUpDown: return("b_45");

            case InstructionalKey.SymbolArrowLeftRight: return("b_46");

            case InstructionalKey.SymbolArrowAll: return("b_47");

            case InstructionalKey.Mouse: return("b_114");
            }

            if (!CTextFormat.Available)
            {
                return("b_995"); // button with "???" in red
            }

            // from rage::ioMapperSource enum
            const uint IOMS_KEYBOARD           = 0,
                       IOMS_MOUSE_ABSOLUTEAXIS = 1,
                       IOMS_MOUSE_WHEEL        = 6,
                       IOMS_MOUSE_BUTTON       = 7,
                       IOMS_PAD_DIGITALBUTTON  = 9,
                       IOMS_PAD_AXIS           = 12;

            const uint MouseAxisMask        = 0x200,
                       MouseWheelMask       = 0x400,
                       MouseButtonMask      = 0x800,
                       ControllerAxisMask   = 0x1000,
                       ControllerButtonMask = 0x2000;

            atFixedArray_sIconData_4 icons = default;
            uint parameter = (uint)key;
            uint source    = (parameter & MouseAxisMask) != 0 ? IOMS_MOUSE_ABSOLUTEAXIS :
                             (parameter & MouseWheelMask) != 0 ? IOMS_MOUSE_WHEEL :
                             (parameter & MouseButtonMask) != 0 ? IOMS_MOUSE_BUTTON :
                             (parameter & ControllerAxisMask) != 0 ? IOMS_PAD_AXIS :
                             (parameter & ControllerButtonMask) != 0 ? IOMS_PAD_DIGITALBUTTON :
                             IOMS_KEYBOARD;

            if (source == IOMS_PAD_DIGITALBUTTON)
            {
                parameter = 1u << (int)(parameter & 0xFFu);
            }

            CTextFormat.GetInputSourceIcons(source, parameter, ref icons);

            const int BufferSize = 64;
            byte *    buffer     = stackalloc byte[BufferSize];

            CTextFormat.GetIconListFormatString(ref icons, buffer, BufferSize);

            return(Encoding.UTF8.GetString(buffer, Memory.StrLen(buffer)));
        }