Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Actual programming thread

Name: Anonymous 2008-01-07 15:01

Okay negroes, listen up.

Started programming shit for PSP, and I want to implement a pseudo-polling thing for key checking (a la SDL). Currently I've got this big fuck-ass function that's ugly to look at, so I was wondering, /prog/, is there any way to make it smaller/more efficient?
I'd do a for loop but the PSP_CTRL_START etc are bitmasks, so that would be difficult.


enum _buttons {
    BTN_SELECT,
    BTN_START,
    BTN_UP,
    BTN_RIGHT,
    BTN_DOWN,
    BTN_LEFT,
    BTN_LTRIGGER,
    BTN_RTRIGGER,
    BTN_TRIANGLE,
    BTN_CIRCLE,
    BTN_CROSS,
    BTN_SQUARE,
    BTN_HOME,
    BTN_HOLD
};

void getKeysPoll (bool k[14], SceCtrlData pad) {
    sceCtrlReadBufferPositive(&pad, 1);
   
    //Is there an easier way to do this? It's a bit long-winded
    if(pad.Buttons & PSP_CTRL_SELECT && !k[BTN_SELECT]) {
        k [BTN_SELECT] = true;
        printf ("SELECT pressed\n");
    } else if (k[BTN_SELECT]) {
        k [BTN_SELECT] = false;
        printf ("SELECT released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_START && !k[BTN_START]) {
        k [BTN_START] = true;
        printf ("START pressed\n");
    } else if (k[BTN_START]) {
        k [BTN_START] = false;
        printf ("START released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_UP && !k[BTN_UP]) {
        k [BTN_UP] = true;
        printf ("UP pressed\n");
    } else if (k[BTN_UP]) {
        k [BTN_UP] = false;
        printf ("UP released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_RIGHT && !k[BTN_RIGHT]) {
        k [BTN_RIGHT] = true;
        printf ("RIGHT pressed\n");
    } else if (k[BTN_RIGHT]) {
        k [BTN_RIGHT] = false;
        printf ("RIGHT released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_DOWN && !k[BTN_DOWN]) {
        k [BTN_DOWN] = true;
        printf ("DOWN pressed\n");
    } else if (k[BTN_DOWN]) {
        k [BTN_DOWN] = false;
        printf ("DOWN released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_LEFT && !k[BTN_LEFT]) {
        k [BTN_LEFT] = true;
        printf ("LEFT pressed\n");
    } else if (k[BTN_LEFT]) {
        k [BTN_LEFT] = false;
        printf ("LEFT released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_LTRIGGER && !k[BTN_LTRIGGER]) {
        k [BTN_LTRIGGER] = true;
        printf ("LTRIGGER pressed\n");
    } else if (k[BTN_LTRIGGER]) {
        k [BTN_LTRIGGER] = false;
        printf ("LTRIGGER released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_RTRIGGER && !k[BTN_RTRIGGER]) {
        k [BTN_RTRIGGER] = true;
        printf ("RTRIGGER pressed\n");
    } else if (k[BTN_RTRIGGER]) {
        k [BTN_RTRIGGER] = false;
        printf ("RTRIGGER released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_TRIANGLE && !k[BTN_TRIANGLE]) {
        k [BTN_TRIANGLE] = true;
        printf ("TRIANGLE pressed\n");
    } else if (k[BTN_TRIANGLE]) {
        k [BTN_TRIANGLE] = false;
        printf ("TRIANGLE released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_CIRCLE && !k[BTN_CIRCLE]) {
        k [BTN_CIRCLE] = true;
        printf ("CIRCLE pressed\n");
    } else if (k[BTN_CIRCLE]) {
        k [BTN_CIRCLE] = false;
        printf ("CIRCLE released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_CROSS && !k[BTN_CROSS]) {
        k [BTN_CROSS] = true;
        printf ("CROSS pressed\n");
    } else if (k[BTN_CROSS]) {
        k [BTN_CROSS] = false;
        printf ("CROSS released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_SQUARE && !k[BTN_SQUARE]) {
        k [BTN_SQUARE] = true;
        printf ("SQUARE pressed\n");
    } else if (k[BTN_SQUARE]) {
        k [BTN_SQUARE] = false;
        printf ("SQUARE released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_HOME && !k[BTN_HOME]) {
        k [BTN_HOME] = true;
        printf ("HOME pressed\n");
    } else if (k[BTN_HOME]) {
        k [BTN_HOME] = false;
        printf ("HOME released\n");
    }
   
    if(pad.Buttons & PSP_CTRL_HOLD && !k[BTN_HOLD]) {
        k [BTN_HOLD] = true;
        printf ("HOLD pressed\n");
    } else if (k[BTN_HOLD]) {
        k [BTN_HOLD] = false;
        printf ("HOLD released\n");
    }
}

In b4 read K&R etc

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List