/* Copyright (C) 2015 Parallel Realities This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "player.h" static void selectTarget(void); void doPlayer(void) { if (player != NULL) { self = player; if (player->alive == ALIVE_ALIVE) { if (app.keyboard[SDL_SCANCODE_LEFT]) { player->angle -= 4; } if (app.keyboard[SDL_SCANCODE_RIGHT]) { player->angle += 4; } if (app.keyboard[SDL_SCANCODE_UP]) { applyFighterThrust(); } if (app.keyboard[SDL_SCANCODE_DOWN]) { applyFighterBrakes(); } if (app.keyboard[SDL_SCANCODE_LCTRL] && !player->reload && player->guns[0].type) { fireGuns(player); } if (app.keyboard[SDL_SCANCODE_RETURN] && player->missiles.ammo && player->target) { fireMissile(player); app.keyboard[SDL_SCANCODE_RETURN] = 0; } if (!player->target || player->target->health <= 0 || getDistance(player->x, player->y, player->target->x, player->target->y) > 1000) { selectTarget(); } } player->angle = player->angle % 360; player->x = SCREEN_WIDTH / 2; player->y = SCREEN_HEIGHT / 2; if (player->health <= 0 && battle.status == MS_IN_PROGRESS) { failIncompleteObjectives(); battle.status = MS_FAILED; battle.missionFinishedTimer = FPS; } } } static void selectTarget(void) { unsigned int closest = 65535; unsigned int dist = 65535; Fighter *f; player->target = NULL; for (f = battle.fighterHead.next ; f != NULL ; f = f->next) { if (f != player && f->side != player->side && f->alive == ALIVE_ALIVE) { dist = getDistance(self->x, self->y, f->x, f->y); if (dist < closest) { player->target = f; closest = dist; } } } }