diff --git a/src/structure.c b/src/structure.c index d43cc741c..8dd7dabfc 100644 --- a/src/structure.c +++ b/src/structure.c @@ -7270,72 +7270,68 @@ BOOL structSensorDroidWeapon(STRUCTURE *psStruct, DROID *psDroid) /*checks if the structure has a Counter Battery sensor attached - returns true if it has*/ -BOOL structCBSensor(STRUCTURE *psStruct) +BOOL structCBSensor(const STRUCTURE* psStruct) { - if (psStruct->pStructureType->pSensor) + // Super Sensor works as any type + if (psStruct->pStructureType->pSensor + && (psStruct->pStructureType->pSensor->type == INDIRECT_CB_SENSOR + || psStruct->pStructureType->pSensor->type == SUPER_SENSOR) + && psStruct->pStructureType->pSensor->location == LOC_TURRET) { - //Super Sensor works as any type - if ((psStruct->pStructureType->pSensor->type == INDIRECT_CB_SENSOR || - psStruct->pStructureType->pSensor->type == SUPER_SENSOR) && - psStruct->pStructureType->pSensor->location == LOC_TURRET) - { - return true; - } + return true; } + return false; } /*checks if the structure has a Standard Turret sensor attached - returns true if it has*/ -BOOL structStandardSensor(STRUCTURE *psStruct) +BOOL structStandardSensor(const STRUCTURE* psStruct) { - if (psStruct->pStructureType->pSensor) + // Super Sensor works as any type + if (psStruct->pStructureType->pSensor + && (psStruct->pStructureType->pSensor->type == STANDARD_SENSOR + || psStruct->pStructureType->pSensor->type == SUPER_SENSOR) + && psStruct->pStructureType->pSensor->location == LOC_TURRET) { - /*Super Sensor works as any type*/ - if ((psStruct->pStructureType->pSensor->type == STANDARD_SENSOR || - psStruct->pStructureType->pSensor->type == SUPER_SENSOR) && - psStruct->pStructureType->pSensor->location == LOC_TURRET) - { - return true; - } + return true; } + return false; } /*checks if the structure has a VTOL Intercept sensor attached - returns true if it has*/ -BOOL structVTOLSensor(STRUCTURE *psStruct) +BOOL structVTOLSensor(const STRUCTURE* psStruct) { - if (psStruct->pStructureType->pSensor) + // Super Sensor works as any type + if (psStruct->pStructureType->pSensor + && (psStruct->pStructureType->pSensor->type == VTOL_INTERCEPT_SENSOR + || psStruct->pStructureType->pSensor->type == SUPER_SENSOR) + && psStruct->pStructureType->pSensor->location == LOC_TURRET) { - //Super Sensor works as any type - if ((psStruct->pStructureType->pSensor->type == VTOL_INTERCEPT_SENSOR || - psStruct->pStructureType->pSensor->type == SUPER_SENSOR) && - psStruct->pStructureType->pSensor->location == LOC_TURRET) - { - return true; - } + return true; } + return false; } /*checks if the structure has a VTOL Counter Battery sensor attached - returns true if it has*/ -BOOL structVTOLCBSensor(STRUCTURE *psStruct) +BOOL structVTOLCBSensor(const STRUCTURE* psStruct) { - if (psStruct->pStructureType->pSensor) + // Super Sensor works as any type + if (psStruct->pStructureType->pSensor + && (psStruct->pStructureType->pSensor->type == VTOL_CB_SENSOR + || psStruct->pStructureType->pSensor->type == SUPER_SENSOR) + && psStruct->pStructureType->pSensor->location == LOC_TURRET) { - //Super Sensor works as any type - if ((psStruct->pStructureType->pSensor->type == VTOL_CB_SENSOR || - psStruct->pStructureType->pSensor->type == SUPER_SENSOR) && - psStruct->pStructureType->pSensor->location == LOC_TURRET) - { - return true; - } + return true; } + return false; } diff --git a/src/structure.h b/src/structure.h index 4c9ec7b66..0cbab6d1e 100644 --- a/src/structure.h +++ b/src/structure.h @@ -339,18 +339,18 @@ extern BOOL structSensorDroidWeapon(STRUCTURE *psStruct, DROID *psDroid); /*checks if the structure has a Counter Battery sensor attached - returns true if it has*/ -extern BOOL structCBSensor(STRUCTURE *psStruct); +extern BOOL structCBSensor(const STRUCTURE* psStruct); /*checks if the structure has a Standard Turret sensor attached - returns true if it has*/ -extern BOOL structStandardSensor(STRUCTURE *psStruct); +extern BOOL structStandardSensor(const STRUCTURE* psStruct); /*checks if the structure has a VTOL Intercept sensor attached - returns true if it has*/ -extern BOOL structVTOLSensor(STRUCTURE *psStruct); +extern BOOL structVTOLSensor(const STRUCTURE* psStruct); /*checks if the structure has a VTOL Counter Battery sensor attached - returns true if it has*/ -extern BOOL structVTOLCBSensor(STRUCTURE *psStruct); +extern BOOL structVTOLCBSensor(const STRUCTURE* psStruct); // return the nearest rearm pad // if bClear is true it tries to find the nearest clear rearm pad in diff --git a/src/visibility.c b/src/visibility.c index e5ae66388..4485c7c4a 100644 --- a/src/visibility.c +++ b/src/visibility.c @@ -98,7 +98,7 @@ void visUpdateLevel(void) visLevelDecAcc -= visLevelDec; } -static SDWORD visObjHeight(BASE_OBJECT *psObject) +static SDWORD visObjHeight(const BASE_OBJECT * const psObject) { SDWORD height; @@ -284,13 +284,12 @@ void visTilesUpdate(BASE_OBJECT *psObj) * psTarget can be any type of BASE_OBJECT (e.g. a tree). * struckBlock controls whether structures block LOS */ -BOOL visibleObject(BASE_OBJECT *psViewer, BASE_OBJECT *psTarget) +BOOL visibleObject(const BASE_OBJECT* psViewer, const BASE_OBJECT* psTarget) { SDWORD x,y, ray; SDWORD xdiff,ydiff, rangeSquared; SDWORD range = objSensorRange(psViewer); SDWORD tarG, top; - STRUCTURE *psStruct; ASSERT(psViewer != NULL, "Invalid viewer pointer!"); @@ -298,13 +297,18 @@ BOOL visibleObject(BASE_OBJECT *psViewer, BASE_OBJECT *psTarget) switch (psViewer->type) { case OBJ_DROID: - if (((DROID*)psViewer)->droidType == DROID_COMMAND) + { + const DROID * const psDroid = (const DROID *)psViewer; + + if (psDroid->droidType == DROID_COMMAND) { range = 3 * range / 2; } break; + } case OBJ_STRUCTURE: - psStruct = (STRUCTURE *)psViewer; + { + const STRUCTURE * const psStruct = (const STRUCTURE *)psViewer; // a structure that is being built cannot see anything if (psStruct->status != SS_BUILT) @@ -312,15 +316,15 @@ BOOL visibleObject(BASE_OBJECT *psViewer, BASE_OBJECT *psTarget) return false; } - if ((psStruct->pStructureType->type == REF_WALL) || - (psStruct->pStructureType->type == REF_WALLCORNER)) + if (psStruct->pStructureType->type == REF_WALL + || psStruct->pStructureType->type == REF_WALLCORNER) { return false; } - if ((structCBSensor((STRUCTURE *)psViewer) || - structVTOLCBSensor((STRUCTURE *)psViewer)) && - ((STRUCTURE *)psViewer)->psTarget[0] == psTarget) + if ((structCBSensor(psStruct) + || structVTOLCBSensor(psStruct)) + && psStruct->psTarget[0] == psTarget) { // if a unit is targetted by a counter battery sensor // it is automatically seen @@ -329,13 +333,14 @@ BOOL visibleObject(BASE_OBJECT *psViewer, BASE_OBJECT *psTarget) // increase the sensor range for AA sites // AA sites are defensive structures that can only shoot in the air - if ( (psStruct->pStructureType->type == REF_DEFENSE) && - (asWeaponStats[psStruct->asWeaps[0].nStat].surfaceToAir == SHOOT_IN_AIR) ) + if (psStruct->pStructureType->type == REF_DEFENSE + && asWeaponStats[psStruct->asWeaps[0].nStat].surfaceToAir == SHOOT_IN_AIR) { range = 3 * range / 2; } break; + } default: ASSERT( false, "visibleObject: visibility checking is only implemented for" @@ -351,7 +356,7 @@ BOOL visibleObject(BASE_OBJECT *psViewer, BASE_OBJECT *psTarget) } /* First see if the target is in sensor range */ - x = (SDWORD)psViewer->pos.x; + x = psViewer->pos.x; xdiff = x - (SDWORD)psTarget->pos.x; if (xdiff < 0) { @@ -363,7 +368,7 @@ BOOL visibleObject(BASE_OBJECT *psViewer, BASE_OBJECT *psTarget) return false; } - y = (SDWORD)psViewer->pos.y; + y = psViewer->pos.y; ydiff = y - (SDWORD)psTarget->pos.y; if (ydiff < 0) { @@ -422,7 +427,7 @@ BOOL visibleObjWallBlock(BASE_OBJECT *psViewer, BASE_OBJECT *psTarget) } // Find the wall that is blocking LOS to a target (if any) -STRUCTURE* visGetBlockingWall(BASE_OBJECT* psViewer, BASE_OBJECT* psTarget) +STRUCTURE* visGetBlockingWall(const BASE_OBJECT* psViewer, const BASE_OBJECT* psTarget) { blockingWall = true; numWalls = 0; diff --git a/src/visibility.h b/src/visibility.h index 8a5372ac8..577e47f0a 100644 --- a/src/visibility.h +++ b/src/visibility.h @@ -36,7 +36,7 @@ extern void visTilesUpdate(BASE_OBJECT *psObj); * currently droids and structures. * psTarget can be any type of BASE_OBJECT (e.g. a tree). */ -extern BOOL visibleObject(BASE_OBJECT *psViewer, BASE_OBJECT *psTarget); +extern BOOL visibleObject(const BASE_OBJECT* psViewer, const BASE_OBJECT* psTarget); /* Check whether psViewer can see psTarget. * struckBlock controls whether structures block LOS @@ -48,7 +48,7 @@ extern BOOL visibleObjectBlock(BASE_OBJECT *psViewer, BASE_OBJECT *psTarget, extern BOOL visibleObjWallBlock(BASE_OBJECT *psViewer, BASE_OBJECT *psTarget); // Find the wall that is blocking LOS to a target (if any) -extern STRUCTURE* visGetBlockingWall(BASE_OBJECT* psViewer, BASE_OBJECT* psTarget); +extern STRUCTURE* visGetBlockingWall(const BASE_OBJECT* psViewer, const BASE_OBJECT* psTarget); extern void processVisibility(BASE_OBJECT *psCurr); @@ -99,27 +99,27 @@ static inline BOOL visObjInRange(BASE_OBJECT *psObj1, BASE_OBJECT *psObj2, SDWOR return true; } -static inline int objSensorRange(BASE_OBJECT *psObj) +static inline int objSensorRange(const BASE_OBJECT* psObj) { return psObj->sensorRange; } -static inline int objSensorPower(BASE_OBJECT *psObj) +static inline int objSensorPower(const BASE_OBJECT* psObj) { return psObj->sensorPower; } -static inline int objJammerPower(BASE_OBJECT *psObj) +static inline int objJammerPower(const BASE_OBJECT* psObj) { return 0; } -static inline int objJammerRange(BASE_OBJECT *psObj) +static inline int objJammerRange(const BASE_OBJECT* psObj) { return 0; } -static inline int objConcealment(BASE_OBJECT *psObj) +static inline int objConcealment(const BASE_OBJECT* psObj) { return psObj->ECMMod; }