/* * acm : an aerial combat simulator for X * Copyright (C) 1991-1997 Riley Rainey * * 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; version 2 dated June, 1991. * * 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., 675 Mass Ave., Cambridge, MA 02139, USA. */ #include "pm.h" int flapsDown(craft * c) { c->flapSetting += 10.0 * pi / 180.0; if (c->flapSetting > c->cinfo->maxFlap) c->flapSetting = c->cinfo->maxFlap; return 0; } int flapsUp(craft * c) { c->flapSetting -= 10.0 * pi / 180.0; if (c->flapSetting < 0.0) c->flapSetting = 0.0; return 0; } void flapControl(craft * c) { double geardown; if (isFunctioning(c, SYS_FLAPS)) { if (c->flapSetting > c->curFlap) { c->curFlap += c->cinfo->flapRate * deltaT; if (c->curFlap > c->flapSetting) c->curFlap = c->flapSetting; } else if (c->flapSetting < c->curFlap) { c->curFlap -= c->cinfo->flapRate * deltaT; if (c->curFlap < c->flapSetting) c->curFlap = c->flapSetting; } } if (isFunctioning(c, SYS_SPEEDBRAKE)) { if (c->speedBrakeSetting > c->curSpeedBrake) { c->curSpeedBrake += c->cinfo->speedBrakeRate * deltaT; if (c->curSpeedBrake > c->speedBrakeSetting) c->curSpeedBrake = c->speedBrakeSetting; } else if (c->speedBrakeSetting < c->curSpeedBrake) { c->curSpeedBrake -= c->cinfo->speedBrakeRate * deltaT; if (c->curSpeedBrake < c->speedBrakeSetting) c->curSpeedBrake = c->speedBrakeSetting; } } geardown = pi / 2.0; if (isFunctioning(c, SYS_NOSEGEAR)) { if (c->flags & FL_GHANDLE_DN) { if (c->curGear[0] != geardown) { c->curGear[0] += c->cinfo->gearRate * deltaT; if (c->curGear[0] > geardown) c->curGear[0] = geardown; c->flags &= ~FL_GEAR0_UP; } } else { if (c->curGear[0] != 0.0 && ((c->flags & FL_GND_CONTACT) == 0)) { c->curGear[0] -= c->cinfo->gearRate * deltaT; if (c->curGear[0] < 0.0) { c->flags |= FL_GEAR0_UP; c->curGear[0] = 0.0; } } } } if (isFunctioning(c, SYS_RIGHTMAIN)) { if (c->flags & FL_GHANDLE_DN) { if (c->curGear[1] != geardown) { c->curGear[1] += c->cinfo->gearRate * deltaT; if (c->curGear[1] > geardown) c->curGear[1] = geardown; c->flags &= ~FL_GEAR1_UP; } } else { if (c->curGear[1] != 0.0 && ((c->flags & FL_GND_CONTACT) == 0)) { c->curGear[1] -= c->cinfo->gearRate * deltaT; if (c->curGear[1] < 0.0) { c->flags |= FL_GEAR1_UP; c->curGear[1] = 0.0; } } } } if (isFunctioning(c, SYS_LEFTMAIN)) { if (c->flags & FL_GHANDLE_DN) { if (c->curGear[2] != geardown) { c->curGear[2] += c->cinfo->gearRate * deltaT; if (c->curGear[2] > geardown) c->curGear[2] = geardown; c->flags &= ~FL_GEAR2_UP; } } else { if (c->curGear[2] != 0.0 && ((c->flags & FL_GND_CONTACT) == 0)) { c->curGear[2] -= c->cinfo->gearRate * deltaT; if (c->curGear[2] < 0.0) { c->flags |= FL_GEAR2_UP; c->curGear[2] = 0.0; } } } } /* * Set some status flags */ if (c->fuel < (c->cinfo->maxFuel * 0.15)) c->damageBits &= ~FLAG_LOWFUEL; else c->damageBits |= FLAG_LOWFUEL; if (c->flags & FL_BRAKES) c->damageBits &= ~FLAG_WHEELBRAKE; else c->damageBits |= FLAG_WHEELBRAKE; if (c->speedBrakeSetting > 0.0) c->damageBits &= ~FLAG_SPEEDBRAKE; else c->damageBits |= FLAG_SPEEDBRAKE; } int speedBrakeExtend(craft * c) { c->speedBrakeSetting += c->cinfo->speedBrakeIncr; if (c->speedBrakeSetting > c->cinfo->maxSpeedBrake) c->speedBrakeSetting = c->cinfo->maxSpeedBrake; return 0; } int speedBrakeRetract(craft * c) { c->speedBrakeSetting -= c->cinfo->speedBrakeIncr; if (c->speedBrakeSetting < 0.0) c->speedBrakeSetting = 0.0; return 0; }