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;
int UseForcedFixedCamera;
int NumberCameras;
int SniperCameraActive;
int BinocularRange;
int BinocularOn;
CAMERA_TYPE BinocularOldCamera;
int LaserSight;
int PhdPerspective;
short CurrentFOV;
int GetLaraOnLOS;
int RumbleTimer = 0;
int RumbleCounter = 0;

View file

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

View file

@ -212,12 +212,12 @@ GAME_STATUS ControlPhase(int numFrames, int demoMode)
// Handle lasersight and binocular
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)))
{
if (BinocularRange == 0)
{
if (SniperCameraActive || UseSpotCam || TrackCameraInit)
if (UseSpotCam || TrackCameraInit)
TrInput &= ~IN_LOOK;
}
else

View file

@ -298,26 +298,19 @@ int GetTargetOnLOS(GAME_VECTOR* src, GAME_VECTOR* dest, int DrawTarget, int firi
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;
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)
{
@ -334,17 +327,23 @@ 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
&& (item->objectNumber != ID_LARA
&& Objects[item->objectNumber].collision != NULL
|| item->objectNumber == ID_LARA
&& GetLaraOnLOS))
{
box = GetBoundsAccurate(item);
if ((item->status == ITEM_DEACTIVATED) || (item->status == ITEM_INVISIBLE))
continue;
if ((priorityObject != GAME_OBJECT_ID::ID_NO_OBJECT) && (item->objectNumber != priorityObject))
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;
@ -357,7 +356,6 @@ int ObjectOnLOS2(GAME_VECTOR* start, GAME_VECTOR* end, PHD_VECTOR* vec, MESH_INF
}
}
}
}
vec->x = ClosestCoord.x;
vec->y = ClosestCoord.y;

View file

@ -1,6 +1,7 @@
#pragma once
#include "room.h"
#include "Specific\phd_global.h"
#include "objectslist.h"
#include "Specific/phd_global.h"
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 ClipTarget(GAME_VECTOR* start, GAME_VECTOR* target);
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);

View file

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

View file

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