1 /** 2 * @file 3 * @brief Header file for airfights 4 */ 5 6 /* 7 Copyright (C) 2002-2013 UFO: Alien Invasion. 8 9 This program is free software; you can redistribute it and/or 10 modify it under the terms of the GNU General Public License 11 as published by the Free Software Foundation; either version 2 12 of the License, or (at your option) any later version. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 18 See the GNU General Public License for more details. 19 20 You should have received a copy of the GNU General Public License 21 along with this program; if not, write to the Free Software 22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 23 24 */ 25 26 #pragma once 27 28 #define BULLETS_PER_SHOT 1 29 #define MAX_MULTIPLE_PROJECTILES 10 30 31 /** 32 * @note 0 if the weapon can shoot 33 * @note -1 if it can't shoot atm 34 * @note -2 if it will never be able to shoot 35 */ 36 #define AIRFIGHT_WEAPON_CAN_SHOOT 0 37 #define AIRFIGHT_WEAPON_CAN_NOT_SHOOT_AT_THE_MOMENT -1 38 #define AIRFIGHT_WEAPON_CAN_NEVER_SHOOT -2 39 40 #define AIRFIGHT_BASE_CAN_T_FIRE -1 41 42 /** @brief projectile used during fight between two or more aircraft */ 43 typedef struct aircraftProjectile_s { 44 const objDef_t* aircraftItem; /**< Corresponding ammo */ 45 int idx; /**< self link of the idx in ccs.projectiles[] @todo: is this really needed? */ 46 vec3_t pos[MAX_MULTIPLE_PROJECTILES]; /**< array of positions of the projectile (latitude and longitude) - @todo why vec3_t this is long/lat */ 47 vec3_t projectedPos[MAX_MULTIPLE_PROJECTILES]; /**< Array if projected positions of the projectile (latitude and longitude). */ 48 vec3_t oldDrawPos[MAX_MULTIPLE_PROJECTILES]; /**< Array if old draw positions of the projectile (latitude and longitude). */ 49 int numProjectiles; /**< Number of projectile positions used for this projectile. */ 50 bool hasMoved; /**< Has the projectile been moved by the CampaignRunProjectiles function */ 51 int numInterpolationPoints; /**< Number of points drawn so far during interpolation. */ 52 vec3_t idleTarget; /**< target of the projectile 53 ** used only if the projectile will miss its target (that is if aimedAircraft is nullptr) */ 54 aircraft_t* attackingAircraft; /**< Aircraft which shot the projectile. nullptr if aircraft is destroyed or base is shooting */ 55 vec3_t attackerPos; /**< position of the attacker. 56 ** used only if base or samsite is shooting (attackingAircraft == nullptr) */ 57 aircraft_t* aimedAircraft; /**< target of the projectile/ 58 ** used only if the projectile will touch its target (otherwise it's nullptr) */ 59 int time; /**< time since the projectile has been launched */ 60 float angle; /**< angle of the missile on the geoscape */ 61 bool bullets; /**< projectile has active bullets on geoscape */ 62 bool beam; /**< projectile has an active (laser) beam on geoscape */ 63 bool rocket; 64 } aircraftProjectile_t; 65 66 void AIRFIGHT_ExecuteActions(const struct campaign_s* campaign, aircraft_t* air, aircraft_t* ufo); 67 void AIRFIGHT_ActionsAfterAirfight(const struct campaign_s* campaign, aircraft_t* shooter, aircraft_t* aircraft, bool phalanxWon); 68 void AIRFIGHT_CampaignRunProjectiles(const struct campaign_s* campaign, int dt); 69 void AIRFIGHT_CampaignRunBaseDefence(int dt); 70 int AIRFIGHT_CheckWeapon(const aircraftSlot_t* slot, float distance); 71 int AIRFIGHT_ChooseWeapon(const aircraftSlot_t* slot, int maxSlot, const vec2_t pos, const vec2_t targetPos); 72 bool AIRFIGHT_BaseCanTargetUFO(const struct base_s* base, const aircraft_t* ufo); 73 void AIRFIGHT_RemoveProjectileAimingAircraft(const aircraft_t* aircraft); 74 75 bool AIRFIGHT_SaveXML(xmlNode_t* parent); 76 bool AIRFIGHT_LoadXML(xmlNode_t* parent); 77 void AIRFIGHT_InitStartup(void); 78