예제 #1
0
int input_configure(int pnum, int type) {
	// Configure the input
	
	if (confrunning) { return 0; }
	
	SDL_Event event, eventbuf;
	
	int axis = 0, axisnoise = 0, counter = 0;
	
	confrunning = true;
	while (confrunning) {
		#ifdef _GTK
		while (gtk_events_pending()) {
			gtk_main_iteration_do(FALSE);
		}
		#endif
		while(SDL_PollEvent(&event)) {
			// Time to quit?
			switch (event.key.keysym.sym) {
				case SDLK_ESCAPE:
					confrunning = false;
					break;
			
				default: break;
			}
			// Process the event
			if (type == 0) { // Keyboard
				switch(event.type) {
					case SDL_KEYUP:
						input_set_item(event, type, pnum, counter);
						counter++;
						break;
					default: break;
				}
			}
			else if (type == 1) { // Joystick
				switch(event.type) {
					case SDL_JOYBUTTONDOWN:
						input_set_item(event, type, pnum, counter);
						counter++;
						break;
					
					case SDL_JOYHATMOTION:
						if (event.jhat.value != SDL_HAT_CENTERED) {
							input_set_item(event, type, pnum, counter);
							counter++;
						}
						break;
					
					case SDL_JOYAXISMOTION:
						if (abs(event.jaxis.value) >= DEADZONE) {
							eventbuf = event;
							axisnoise = 1;
							axis = event.jaxis.axis;
						}
						
						else if (abs(event.jaxis.value) < DEADZONE && axisnoise && event.jaxis.axis == axis) {
							input_set_item(eventbuf, type, pnum, counter);
							axisnoise = 0;
							counter++;
						}						
						break;
					
					default: break;
				}
			}
			
			if (counter >= NUMBUTTONS) { confrunning = false; }
		}
	}
	
	return 1;
}
예제 #2
0
파일: input.cpp 프로젝트: TaylanUB/nestopia
int input_configure_item(int pnum, int bnum, int type) {
    // Configure an input item

    if (confrunning) {
        return 0;
    }

    SDL_Event event, eventbuf;

    int axis = 0, axisnoise = 0, counter = 0;

    // Enter and Space hack
    bool etoggle = true;
    if (kbactivate) {
        etoggle = false;
    }

    confrunning = true;
    bool confstop = false;
    while (confrunning) {
#ifdef _GTK
        while (gtk_events_pending()) {
            gtk_main_iteration_do(FALSE);
        }
#endif
        while(SDL_PollEvent(&event)) {
            // Time to quit?
            switch (event.key.keysym.sym) {
            case SDLK_ESCAPE:
                confrunning = false;
                break;
            default:
                break;
            }
            // Process the event
            if (type == 0) { // Keyboard
                switch(event.type) {
                case SDL_KEYUP:
                    // Enter and Space need to be handled separately
                    if (event.key.keysym.sym == SDLK_RETURN || event.key.keysym.sym == SDLK_SPACE) {
                        if (etoggle) {
                            input_set_item(event, type, pnum, bnum);
                        }
                        else {
                            etoggle = true;
                            break;
                        }
                    }
                    else {
                        input_set_item(event, type, pnum, bnum);
                    }
                    confstop = true;
                    break;
                default:
                    break;
                }
            }
            else if (type == 1) { // Joystick
                switch(event.type) {
                case SDL_JOYBUTTONDOWN:
                    input_set_item(event, type, pnum, bnum);
                    confstop = true;
                    break;

                case SDL_JOYHATMOTION:
                    if (event.jhat.value != SDL_HAT_CENTERED) {
                        input_set_item(event, type, pnum, bnum);
                        confstop = true;
                    }
                    break;

                case SDL_JOYAXISMOTION:
                    if (abs(event.jaxis.value) >= DEADZONE) {
                        eventbuf = event;
                        axisnoise = 1;
                        axis = event.jaxis.axis;
                    }

                    else if (abs(event.jaxis.value) < DEADZONE && axisnoise && event.jaxis.axis == axis) {
                        input_set_item(eventbuf, type, pnum, bnum);
                        axisnoise = 0;
                        confstop = true;
                    }
                    break;

                default:
                    break;
                }
            }
        }
        if (confstop) {
            confrunning = false;
        }
    }

    return 1;
}