mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-08 03:28:03 +03:00
Remove more unused globals, refactor ObjectOnLOS
This commit is contained in:
parent
5d3e58e85e
commit
27a9009f33
7 changed files with 37 additions and 44 deletions
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue