Exemplo n.º 1
0
inp_ab::inp_ab()
{
    memset(&raw, 0, sizeof(keys_struct));
    memset(&up, 0, sizeof(keys_struct));
    memset(&down, 0, sizeof(keys_struct));
    memset(&hit, 0, sizeof(keys_struct));

    raw_keys_bitset = 0;

    keyhit_timer = 0;

    flush_kframes();
}
Exemplo n.º 2
0
inp_ab::inp_ab()
{
    for (uint32_t i=0; i<INP_KEYS; i++)
    {
        pr_key_dn[i] = false;
        key_dn[i] = false;
        key_frm[i] = 0;
    }

    x_axis = 0;
    y_axis = 0;

    flush_kframes();
}
Exemplo n.º 3
0
int8_t inp_ab::check_input_seq(const char *sq, uint8_t frames, int8_t direction)
{
    uint8_t buf[0x100];

    uint32_t sl = strlen(sq);

    uint8_t XX = KF_A | KF_B | KF_C;

    int8_t ret_val = 0;

    for (uint32_t i=0; i < sl; i++)
    {
        uint8_t t = 0;

        char in = tolower(sq[i]);

        if (in == '0')
            t = KF_DOWN;
        else if (in == '5')
            t = 0;
        else if (in == '1')
            t = KF_LEFT | KF_DOWN;
        else if (in == '2')
            t = KF_DOWN;
        else if (in == '3')
            t = KF_RIGHT | KF_DOWN;
        else if (in == '4')
            t = KF_LEFT;
        else if (in == '6')
            t = KF_RIGHT;
        else if (in == '7')
            t = KF_UP | KF_LEFT;
        else if (in == '8')
            t = KF_UP;
        else if (in == '9')
            t = KF_UP | KF_RIGHT;
        else if (in == 'd')
            t = KF_D;
        else if (in == 'x')
            t = KF_A | KF_B | KF_C ;

        if (direction != 1)
        {
            if (t & KF_LEFT)
                t = (~KF_LEFT & t) | KF_RIGHT;
            else if (t & KF_RIGHT)
                t = (~KF_RIGHT & t) | KF_LEFT;

        }

        if (in == 'r')
            t = KF_RIGHT;
        else if (in == 'l')
            t = KF_LEFT;

        buf[i] = t;
    }

    uint32_t j = 0;

    for (int32_t i=frames-1; i >= 0; i--)
    {
        if (buf[j] != 0)
        {
            if (buf[j] != XX) // movements
            {
                if (k_frames[i] == buf[j])
                    j++;
            }
            else //keys check
            {
                if (k_frames[i] & buf[j])
                    j++;

                if (k_frames[i] & KF_A)
                    ret_val = 1;
                else if (k_frames[i] & KF_B)
                    ret_val = 2;
                else if (k_frames[i] & KF_C)
                    ret_val = 3;
            }
        }
        else if (k_frames[i] == 0) // no input check
            j++;


        if (j == sl)
        {
            flush_kframes();
            if (ret_val == 0)
                ret_val = 1;

            //printf("pressed %s %d\n",sq,ret_val);
            return ret_val;
        }

    }

    return ret_val;
}