Ejemplo n.º 1
0
        static public ControllerState ReadFromPacket(byte[] packet)
        {
            var state = new ControllerStateBuilder();

            switch (packet.Length)
            {
            // Standard 64 bit packet size
            case PACKET_SIZE:
                for (int i = 0; i < BUTTONS.Length; ++i)
                {
                    if (string.IsNullOrEmpty(BUTTONS[i]))
                    {
                        continue;
                    }
                    state.SetButton(BUTTONS[i], packet[i] != 0x00);
                }
                state.SetAnalog("lstick_x", readStick(SignalTool.readByte(packet, BUTTONS.Length)));
                state.SetAnalog("lstick_y", readStick(SignalTool.readByte(packet, BUTTONS.Length + 8)));
                state.SetAnalog("cstick_x", readStick(SignalTool.readByte(packet, BUTTONS.Length + 16)));
                state.SetAnalog("cstick_y", readStick(SignalTool.readByte(packet, BUTTONS.Length + 24)));
                state.SetAnalog("trig_l", readTrigger(SignalTool.readByte(packet, BUTTONS.Length + 32)));
                state.SetAnalog("trig_r", readTrigger(SignalTool.readByte(packet, BUTTONS.Length + 40)));
                break;

            // Packets are written as bytes when writing from the NicoHood API, so we're looking for a packet size of 8 (interpreted as bytes)
            case NICOHOOD_PACKET_SIZE:
                for (int i = 0; i < 16; i++)
                {
                    if (string.IsNullOrEmpty(NICOHOOD_BUTTONS[i]))
                    {
                        continue;
                    }
                    int bitPacket = (packet[i / 8] >> (i % 8)) & 0x1;
                    state.SetButton(NICOHOOD_BUTTONS[i], bitPacket != 0x00);
                }
                state.SetAnalog("lstick_x", readStick(packet[2]));
                state.SetAnalog("lstick_y", readStick(packet[3]));
                state.SetAnalog("cstick_x", readStick(packet[4]));
                state.SetAnalog("cstick_y", readStick(packet[5]));
                state.SetAnalog("trig_l", readTrigger(packet[6]));
                state.SetAnalog("trig_r", readTrigger(packet[7]));
                break;

            default:
                return(null);
            }

            return(state.Build());
        }
Ejemplo n.º 2
0
        static public ControllerState ReadFromPacket(byte[] packet)
        {
            if (packet.Length < PACKET_SIZE)
            {
                return(null);
            }

            var state = new ControllerStateBuilder();

            for (int i = 0; i < BUTTONS.Length; ++i)
            {
                if (string.IsNullOrEmpty(BUTTONS[i]))
                {
                    continue;
                }
                state.SetButton(BUTTONS[i], packet[i] != 0x00);
            }

            state.SetAnalog("stick_x", readStick(SignalTool.readByte(packet, BUTTONS.Length)));
            state.SetAnalog("stick_y", readStick(SignalTool.readByte(packet, BUTTONS.Length + 8)));

            return(state.Build());
        }