// Copyright (C) 2007 Jason Woofenden // // This file is part of VoR. // // VoR is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2, or (at your option) // any later version. // // VoR is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with VoR; see the file COPYING. If not, write to the // Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, // MA 02111-1307, USA. // This file has code to generate SDL keypress events #include #include #include "mt.h" // SETTINGS // // auto pilot waits a random amount of time between zero and this many 1/20ths of a second #define AUTOPILOT_MAX_DELAY 20.0 #define NUM_KEYS 5 SDLKey keysyms[NUM_KEYS] = { SDLK_SPACE, SDLK_LEFT, SDLK_RIGHT, SDLK_UP, SDLK_DOWN}; int states[NUM_KEYS] = { 0, 0, 0, 0, 0, }; float next_time; float delay; void autopilot_set_timer() { delay = 0; next_time = frnd() * AUTOPILOT_MAX_DELAY; } void autopilot_init() { autopilot_set_timer(); } void autopilot_fix_keystates(Uint8* table) { int i; for(i = 0; i < NUM_KEYS; ++i) { table[keysyms[i]] = states[i]; } } int autopilot_num_down() { int i, num; for(num = 0, i = 0; i < NUM_KEYS; ++i) { if(states[i]) { num++; } } return num; } void autopilot_send_event() { int down = autopilot_num_down(); int nth, i; //SDL_Event event; if(down && frnd() < 0.25 + (down / 4.0)) { //event.type = SDL_KEYUP; //event.key.state = 0; nth = (urnd() % down) + 1; for(i = 0; ; ++i) { if(states[i]) { --nth; } if(nth == 0) { //event.key.keysym.sym = keysyms[i]; states[i] = 0; break; } } } else { //event.type = SDL_KEYDOWN; //event.key.state = 1; nth = (urnd() % (NUM_KEYS - down)) + 1; for(i = 0; ; ++i) { if(!states[i]) { --nth; } if(nth == 0) { //event.key.keysym.sym = keysyms[i]; states[i] = 1; break; } } } //fprintf(stderr, "push event: %i %i\n", event.key.keysym.sym, event.type); //SDL_PushEvent(&event); } void autopilot(float ticks) { delay += ticks; if(delay > next_time) { autopilot_set_timer(); autopilot_send_event(); } }