58 while ((base =
B_GetNext(base)) !=
nullptr) {
59 if (base->
radar.range) {
67 CP_AddRadarCoverage(installation->pos, installation->radar.range, installation->radar.trackingRange,
true);
116 if (aircraft->radar.numUFOs)
121 while ((base =
B_GetNext(base)) !=
nullptr) {
122 if (base->
radar.numUFOs)
127 if (installation->radar.numUFOs)
140 for (
int i = 0;
i <
radar->numUFOs;
i++)
141 if (
radar->ufos[
i] == ufo)
154 cgi->Com_Printf(
"RADAR_AddUFO: Aircraft already in radar range\n");
177 for (
i = 0;
i <
radar->numUFOs;
i++)
178 if (
radar->ufos[
i] == ufo)
197 for (
int i = 0;
i <
radar->numUFOs;
i++)
198 if (
radar->ufos[
i] == ufo) {
202 }
else if (destroyed && (
radar->ufos[
i] > ufo))
218 while ((base =
B_GetNext(base)) !=
nullptr) {
241 const int oldrange =
radar->range;
245 radar->trackingRange = 0.0f;
253 assert(
radar->numUFOs >= 0);
255 if (updateSourceRadarMap && !
EQUAL(
radar->range, oldrange)) {
283 if (
cgi->Cmd_Argc() < 2) {
284 cgi->Com_Printf(
"Usage: %s <baseIdx> <buildingType>\n",
cgi->Cmd_Argv(0));
288 baseIdx = atoi(
cgi->Cmd_Argv(1));
290 if (baseIdx < 0 || baseIdx >=
MAX_BASES) {
291 cgi->Com_Printf(
"RADAR_UpdateBaseRadarCoverage_f: %i is outside bounds\n", baseIdx);
315 cgi->Com_Error(
ERR_DROP,
"RADAR_UpdateInstallationRadarCoverage: No installation or no template!\n");
344 if (dist <= aircraft->
radar.trackingRange)
349 while ((base =
B_GetNext(base)) !=
nullptr) {
353 if (dist <= base->
radar.trackingRange)
360 if (!installation->radar.trackingRange)
366 if (dist <= ufo->
radar.trackingRange)
381 while ((base =
B_GetNext(base)) !=
nullptr) {
383 if (dist <= base->
radar.range)
391 if (dist <= installation->
radar.range)
419 if ((detected ?
radar->trackingRange :
radar->range) > dist) {
421 if (!ufoIsSensored) {
430 assert(ufoIsSensored ==
false);
432 if (
frand() <=
radar->ufoDetectionProbability) {
Share stuff between the different cgame implementations.
#define REMOVE_ELEM(array, index, n)
bool AIR_IsAircraftOnGeoscape(const aircraft_t *aircraft)
Checks whether given aircraft is on geoscape.
#define AIR_Foreach(var)
iterates trough all aircraft
#define AIR_ForeachFromBase(var, base)
iterates trough all aircraft from a specific homebase
base_t * B_GetFoundedBaseByIDX(int baseIdx)
Array bound check for the base index.
base_t * B_GetNext(base_t *lastBase)
Iterates through founded bases.
float B_GetMaxBuildingLevel(const base_t *base, const buildingType_t type)
Get the maximum level of a building type in a base.
const int DETECTION_INTERVAL
delay between actions that must be executed independently of time scale
Header file for single player campaign control.
const cgame_import_t * cgi
void GEO_SetOverlay(const char *overlayID, int status)
Turn overlay on/off.
bool GEO_IsRadarOverlayActivated(void)
void GEO_UpdateGeoscapeDock(void)
Will add missions and UFOs to the geoscape dock panel.
Header for Geoscape management.
void CP_UpdateMissionVisibleOnGeoscape(void)
Update all mission visible on geoscape (in base radar range).
Campaign missions headers.
void CP_InitializeRadarOverlay(bool source)
Initialize radar overlay on geoscape.
void CP_UploadRadarCoverage(void)
Smooth radar coverage.
void CP_AddRadarCoverage(const vec2_t pos, float innerRadius, float outerRadius, bool source)
Add a radar coverage (base or aircraft) to radar overlay.
Functions to generate and render overlay for geoscape.
void RADAR_DeactivateRadarOverlay(void)
Deactivate Radar overlay if there is no more UFO on geoscape.
void RADAR_Initialise(radar_t *radar, float range, float trackingRange, float level, bool updateSourceRadarMap)
Set radar range to new value.
static void RADAR_DrawCoverage(const radar_t *radar, const vec2_t pos)
Update map radar coverage with moving radar.
void RADAR_UpdateWholeRadarOverlay(void)
Update radar overlay of base, installation and aircraft range.
static void RADAR_NotifyUFORemovedFromOneRadar(radar_t *radar, const aircraft_t *ufo, bool destroyed)
Notify that the specified ufo has been removed from geoscape to one radar.
const float RADAR_BASETRACKINGRANGE
const float RADAR_INSTALLATIONLEVEL
const float RADAR_BASERANGE
void RADAR_InitialiseUFOs(radar_t *radar)
Reset UFO sensored on radar.
void RADAR_NotifyUFORemoved(const aircraft_t *ufo, bool destroyed)
Notify to every radar that the specified ufo has been removed from geoscape.
void RADAR_UpdateStaticRadarCoverage(void)
Update every static radar drawing (radar that don't move: base and installation radar).
static bool RADAR_AddUFO(radar_t *radar, const aircraft_t *ufo)
Add a UFO in the list of sensored UFOs.
bool RADAR_CheckRadarSensored(const vec2_t pos)
Check if the specified position is within base radar range.
bool RADAR_CheckUFOSensored(radar_t *radar, const vec2_t posRadar, const aircraft_t *ufo, bool detected)
Check if the specified UFO is inside the sensor range of the given radar.
void RADAR_SetRadarAfterLoading(void)
Set radar to proper values after loading.
static void RADAR_RemoveUFO(radar_t *radar, const aircraft_t *ufo)
UFO will no more be referenced by radar.
static bool RADAR_IsUFOSensored(const radar_t *radar, const aircraft_t *ufo)
Check if UFO is in the sensored list.
static const float RADAR_UPGRADE_MULTIPLIER
this is the multiplier applied to the radar range when the radar levels up
void RADAR_AddDetectedUFOToEveryRadar(const aircraft_t *ufo)
Adds detected UFO to any radar in range (if not already detected).
void RADAR_UpdateBaseRadarCoverage_f(void)
Update radar coverage when building/destroying new radar.
void RADAR_UpdateInstallationRadarCoverage(installation_t *installation, const float radarRange, const float trackingRadarRange)
Update radar coverage when building/destroying new radar.
#define MAX_UFOONGEOSCAPE
aircraft_t * UFO_GetNext(aircraft_t *lastUFO)
Iterates through the UFOs.
double GetDistanceOnGlobe(const vec2_t pos1, const vec2_t pos2)
Calculate distance on the geoscape.
float frand(void)
Return random values between 0 and 1.
An aircraft with all it's data.
A base with all it's data.
A installation with all it's data.
const installationTemplate_t * installationTemplate
installationStatus_t installationStatus