Remove more unused globals, refactor ObjectOnLOS

This commit is contained in:
Lwmte 2021-11-04 20:23:26 +03:00
parent 5d3e58e85e
commit 27a9009f33
7 changed files with 37 additions and 44 deletions

View file

@ -57,14 +57,12 @@ CAMERA_INFO Camera;
GAME_VECTOR ForcedFixedCamera; GAME_VECTOR ForcedFixedCamera;
int UseForcedFixedCamera; int UseForcedFixedCamera;
int NumberCameras; int NumberCameras;
int SniperCameraActive;
int BinocularRange; int BinocularRange;
int BinocularOn; int BinocularOn;
CAMERA_TYPE BinocularOldCamera; CAMERA_TYPE BinocularOldCamera;
int LaserSight; int LaserSight;
int PhdPerspective; int PhdPerspective;
short CurrentFOV; short CurrentFOV;
int GetLaraOnLOS;
int RumbleTimer = 0; int RumbleTimer = 0;
int RumbleCounter = 0; int RumbleCounter = 0;

View file

@ -57,14 +57,12 @@ extern CAMERA_INFO Camera;
extern GAME_VECTOR ForcedFixedCamera; extern GAME_VECTOR ForcedFixedCamera;
extern int UseForcedFixedCamera; extern int UseForcedFixedCamera;
extern int NumberCameras; extern int NumberCameras;
extern int SniperCameraActive;
extern int BinocularRange; extern int BinocularRange;
extern int BinocularOn; extern int BinocularOn;
extern CAMERA_TYPE BinocularOldCamera; extern CAMERA_TYPE BinocularOldCamera;
extern int LaserSight; extern int LaserSight;
extern int PhdPerspective; extern int PhdPerspective;
extern short CurrentFOV; extern short CurrentFOV;
extern int GetLaraOnLOS;
void LookAt(CAMERA_INFO* cam, short roll); void LookAt(CAMERA_INFO* cam, short roll);
void AlterFOV(int value); void AlterFOV(int value);

View file

@ -212,12 +212,12 @@ GAME_STATUS ControlPhase(int numFrames, int demoMode)
// Handle lasersight and binocular // Handle lasersight and binocular
if (CurrentLevel != 0) if (CurrentLevel != 0)
{ {
if (!(TrInput & IN_LOOK) || SniperCameraActive || UseSpotCam || TrackCameraInit || if (!(TrInput & IN_LOOK) || UseSpotCam || TrackCameraInit ||
((LaraItem->currentAnimState != LS_STOP || LaraItem->animNumber != LA_STAND_IDLE) && (!Lara.isDucked || TrInput & IN_DUCK || LaraItem->animNumber != LA_CROUCH_IDLE || LaraItem->goalAnimState != LS_CROUCH_IDLE))) ((LaraItem->currentAnimState != LS_STOP || LaraItem->animNumber != LA_STAND_IDLE) && (!Lara.isDucked || TrInput & IN_DUCK || LaraItem->animNumber != LA_CROUCH_IDLE || LaraItem->goalAnimState != LS_CROUCH_IDLE)))
{ {
if (BinocularRange == 0) if (BinocularRange == 0)
{ {
if (SniperCameraActive || UseSpotCam || TrackCameraInit) if (UseSpotCam || TrackCameraInit)
TrInput &= ~IN_LOOK; TrInput &= ~IN_LOOK;
} }
else else

View file

@ -298,26 +298,19 @@ int GetTargetOnLOS(GAME_VECTOR* src, GAME_VECTOR* dest, int DrawTarget, int firi
return hit; return hit;
} }
int ObjectOnLOS2(GAME_VECTOR* start, GAME_VECTOR* end, PHD_VECTOR* vec, MESH_INFO** mesh) int ObjectOnLOS2(GAME_VECTOR* start, GAME_VECTOR* end, PHD_VECTOR* vec, MESH_INFO** mesh, GAME_OBJECT_ID priorityObject)
{ {
int r, m;
ROOM_INFO* room;
short linknum;
ITEM_INFO* item;
PHD_3DPOS pos;
MESH_INFO* meshp;
BOUNDING_BOX* box;
ClosestItem = NO_LOS_ITEM; ClosestItem = NO_LOS_ITEM;
ClosestDist = SQUARE(end->x - start->x) + SQUARE(end->y - start->y) + SQUARE(end->z - start->z); ClosestDist = SQUARE(end->x - start->x) + SQUARE(end->y - start->y) + SQUARE(end->z - start->z);
for (r = 0; r < NumberLosRooms; ++r) for (int r = 0; r < NumberLosRooms; ++r)
{ {
room = &g_Level.Rooms[LosRooms[r]]; PHD_3DPOS pos;
auto room = &g_Level.Rooms[LosRooms[r]];
for (m = 0; m < room->mesh.size(); m++) for (int m = 0; m < room->mesh.size(); m++)
{ {
meshp = &room->mesh[m]; auto meshp = &room->mesh[m];
if (meshp->flags & StaticMeshFlags::SM_VISIBLE) if (meshp->flags & StaticMeshFlags::SM_VISIBLE)
{ {
@ -334,27 +327,32 @@ int ObjectOnLOS2(GAME_VECTOR* start, GAME_VECTOR* end, PHD_VECTOR* vec, MESH_INF
} }
} }
for (linknum = room->itemNumber; linknum != NO_ITEM; linknum = g_Level.Items[linknum].nextItem) for (short linknum = room->itemNumber; linknum != NO_ITEM; linknum = g_Level.Items[linknum].nextItem)
{ {
item = &g_Level.Items[linknum]; auto item = &g_Level.Items[linknum];
if (item->status != ITEM_DEACTIVATED && item->status != ITEM_INVISIBLE if ((item->status == ITEM_DEACTIVATED) || (item->status == ITEM_INVISIBLE))
&& (item->objectNumber != ID_LARA continue;
&& Objects[item->objectNumber].collision != NULL
|| item->objectNumber == ID_LARA if ((priorityObject != GAME_OBJECT_ID::ID_NO_OBJECT) && (item->objectNumber != priorityObject))
&& GetLaraOnLOS)) continue;
if ((item->objectNumber != ID_LARA) && (Objects[item->objectNumber].collision == NULL))
continue;
if ((item->objectNumber == ID_LARA) && (priorityObject != ID_LARA))
continue;
auto box = GetBoundsAccurate(item);
pos.xPos = item->pos.xPos;
pos.yPos = item->pos.yPos;
pos.zPos = item->pos.zPos;
pos.yRot = item->pos.yRot;
if (DoRayBox(start, end, box, &pos, vec, linknum))
{ {
box = GetBoundsAccurate(item); end->roomNumber = LosRooms[r];
pos.xPos = item->pos.xPos;
pos.yPos = item->pos.yPos;
pos.zPos = item->pos.zPos;
pos.yRot = item->pos.yRot;
if (DoRayBox(start, end, box, &pos, vec, linknum))
{
end->roomNumber = LosRooms[r];
}
} }
} }
} }

View file

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "room.h" #include "room.h"
#include "Specific\phd_global.h" #include "objectslist.h"
#include "Specific/phd_global.h"
constexpr auto NO_LOS_ITEM = INT_MAX; constexpr auto NO_LOS_ITEM = INT_MAX;
@ -9,5 +10,5 @@ int xLOS(GAME_VECTOR* start, GAME_VECTOR* end);
int zLOS(GAME_VECTOR* start, GAME_VECTOR* end); int zLOS(GAME_VECTOR* start, GAME_VECTOR* end);
int ClipTarget(GAME_VECTOR* start, GAME_VECTOR* target); int ClipTarget(GAME_VECTOR* start, GAME_VECTOR* target);
int GetTargetOnLOS(GAME_VECTOR* src, GAME_VECTOR* dest, int DrawTarget, int firing); int GetTargetOnLOS(GAME_VECTOR* src, GAME_VECTOR* dest, int DrawTarget, int firing);
int ObjectOnLOS2(GAME_VECTOR* start, GAME_VECTOR* end, PHD_VECTOR* vec, MESH_INFO** mesh); int ObjectOnLOS2(GAME_VECTOR* start, GAME_VECTOR* end, PHD_VECTOR* vec, MESH_INFO** mesh, GAME_OBJECT_ID priorityObject = GAME_OBJECT_ID::ID_NO_OBJECT);
int DoRayBox(GAME_VECTOR* start, GAME_VECTOR* end, BOUNDING_BOX* box, PHD_3DPOS* itemOrStaticPos, PHD_VECTOR* hitPos, short closesItemNumber); int DoRayBox(GAME_VECTOR* start, GAME_VECTOR* end, BOUNDING_BOX* box, PHD_3DPOS* itemOrStaticPos, PHD_VECTOR* hitPos, short closesItemNumber);

View file

@ -79,13 +79,9 @@ void ControlGunShip(short itemNumber)
if (!(GlobalCounter & 1)) if (!(GlobalCounter & 1))
return AnimateItem(item); return AnimateItem(item);
GetLaraOnLOS = 1;
PHD_VECTOR hitPos; PHD_VECTOR hitPos;
MESH_INFO* hitMesh = NULL; MESH_INFO* hitMesh = NULL;
int objOnLos = ObjectOnLOS2(&start, &end, &hitPos, &hitMesh); int objOnLos = ObjectOnLOS2(&start, &end, &hitPos, &hitMesh, GAME_OBJECT_ID::ID_LARA);
GetLaraOnLOS = 0;
if (objOnLos == NO_LOS_ITEM || objOnLos < 0) if (objOnLos == NO_LOS_ITEM || objOnLos < 0)
{ {

View file

@ -2,6 +2,8 @@
enum GAME_OBJECT_ID : short enum GAME_OBJECT_ID : short
{ {
ID_NO_OBJECT = -1,
/* Lara Primary Slot */ /* Lara Primary Slot */
ID_LARA, ID_LARA,
ID_LARA_EXTRA_ANIMS, ID_LARA_EXTRA_ANIMS,