TombEngine/TR5Main/Game/collide.h

129 lines
3.7 KiB
C
Raw Normal View History

2018-08-19 09:46:58 +02:00
#pragma once
#include "phd_global.h"
#include "level.h"
2018-08-19 09:46:58 +02:00
// used by coll->badPos
#define NO_BAD_POS (-NO_HEIGHT)
// used by coll->badNeg
#define NO_BAD_NEG NO_HEIGHT
struct BOUNDING_BOX
{
short X1;
short X2;
short Y1;
short Y2;
short Z1;
short Z2;
};
struct COLL_FLOOR
{
int floor;
int ceiling;
int type;
int splitFloor;
int splitCeiling;
};
struct COLL_INFO
{
/*
COLL_FLOOR middle; // mid
COLL_FLOOR middle_left; // left
COLL_FLOOR middle_right; // right
COLL_FLOOR front; // front
COLL_FLOOR front_left; // left2
COLL_FLOOR front_right; // right2
*/
int midFloor;
int midCeiling;
int midType;
int midSplitFloor;
int midSplitCeil;
int frontFloor;
int frontCeiling;
int frontType;
int frontSplitFloor;
int frontSplitCeil;
int leftFloor;
int leftCeiling;
int leftType;
int leftSplitFloor;
int leftSplitCeil;
int rightFloor;
int rightCeiling;
int rightType;
int rightSplitFloor;
int rightSplitCeil;
int leftFloor2;
int leftCeiling2;
int leftType2;
int leftSplitFloor2;
int leftSplitCeil2;
int rightFloor2;
int rightCeiling2;
int rightType2;
int rightSplitFloor2;
int rightSplitCeil2;
int radius;
int badPos;
int badNeg;
int badCeiling;
PHD_VECTOR shift;
PHD_VECTOR old;
short oldAnimState;
short oldAnimNumber;
short oldFrameNumber;
short facing;
short quadrant;
short collType; // CT_enum
short* trigger;
signed char tiltX;
signed char tiltZ;
bool hitByBaddie;
bool hitStatic;
bool slopesAreWalls;
bool slopesArePits;
bool lavaIsPit;
bool enableBaddiePush;
bool enableSpaz;
bool hitCeiling;
};
extern BOUNDING_BOX GlobalCollisionBounds;
constexpr auto MAX_ITEMS = 1024;
extern ITEM_INFO* CollidedItems[MAX_ITEMS];
extern MESH_INFO* CollidedMeshes[MAX_ITEMS];
2018-08-19 09:46:58 +02:00
void GenericSphereBoxCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll);
int CollideStaticObjects(COLL_INFO* coll, int x, int y, int z, short roomNumber, int hite);
int GetCollidedObjects(ITEM_INFO* collidingItem, int radius, int flag1, ITEM_INFO** collidedItems, MESH_INFO** collidedMeshes, int flag2);
int TestWithGlobalCollisionBounds(ITEM_INFO* item, ITEM_INFO* lara, COLL_INFO* coll);
void TrapCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* c);
void TestForObjectOnLedge(ITEM_INFO* item, COLL_INFO* coll);
void ShiftItem(ITEM_INFO* item, COLL_INFO* coll);
void UpdateLaraRoom(ITEM_INFO* item, int height);
short GetTiltType(FLOOR_INFO* floor, int x, int y, int z);
int FindGridShift(int x, int z);
int TestBoundsCollideStatic(short* bounds, PHD_3DPOS* pos, int radius);
int ItemPushLaraStatic(ITEM_INFO* item, short* bounds, PHD_3DPOS* pos, COLL_INFO* coll);
void AIPickupCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* c);
void ObjectCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* c);
void AlignLaraPosition(PHD_VECTOR* vec, ITEM_INFO* item, ITEM_INFO* l);
void TriggerLaraBlood();
int ItemPushLara(ITEM_INFO* item, ITEM_INFO* l, COLL_INFO* coll, int spazon, char bigpush);
int TestLaraPosition(short* bounds, ITEM_INFO* item, ITEM_INFO* l);
int Move3DPosTo3DPos(PHD_3DPOS* src, PHD_3DPOS* dest, int velocity, short angAdd);
int MoveLaraPosition(PHD_VECTOR* pos, ITEM_INFO* item, ITEM_INFO* l);
int TestBoundsCollide(ITEM_INFO* item, ITEM_INFO* l, int radius);
void CreatureCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll);
2019-12-29 01:40:55 -03:00
void GetCollisionInfo(COLL_INFO* coll, int xPos, int yPos, int zPos, int roomNumber, int objectHeight);
2019-12-08 08:01:55 +01:00
void LaraBaddieCollision(ITEM_INFO* item, COLL_INFO* coll);
void CalcItemToFloorRotation(ITEM_INFO* item, short rotY, int radiusZ, int radiusX); // new function for rotating item along XZ slopes