Files
2026-08-09 01:29:43 -07:00

61 lines
2.2 KiB
C++

#pragma once
#include "cm/jobs/collisionquery.h"
enum collisionFeature_t : int {
COLLISION_FEATURE_INVALID = 0,
COLLISION_FEATURE_VERTEX = 1,
COLLISION_FEATURE_EDGE = 2,
COLLISION_FEATURE_POLYGON = 3,
COLLISION_FEATURE_POLYTOPE = 4
};
struct slideMoveState_t {
idVec3 velocity;
idVec3 endVelocity;
contactInfo_t firstContact;
float fractionRemaining;
float steppedUp;
idVec3 startNormal;
idVec3 planes[4];
int numPlanes;
int pad;
};
bool ClipVelocity(idVec3& velocity, const idVec3* planes, int numPlanes);
class idCollisionDetectionMerge {
public:
static void MergeContentsResults(queryResults_t* finalResult,
const queryResults_t* mergeResults, int numMergeResults,
int resultSize);
static void MergeMotionResults(trace_t* result, const trace_t* rotation,
const trace_t* translation);
static void MergeStepMoveResults(trace_t* result, const trace_t* down,
const trace_t* forward2, const trace_t* forward1, bool slideMove);
static void InitSlideMoveState(slideMoveState_t* state,
const idVec3& velocity, const idVec3& gravityVector);
static bool UpdateSlideMoveState(slideMoveState_t* state,
trace_t* trace);
static void FinishSlideMoveState(slideMoveState_t* state,
trace_t* trace);
static void MergeTraceResults(queryResults_t* finalResult,
const queryResults_t* mergeResults, int numMergeResults,
int resultSize);
static void MergeContactsResults(queryResults_t* finalResult,
const queryResults_t* mergeResults, int numMergeResults,
int resultSize);
static void MergeClipResults(queryResults_t* finalResult,
const queryResults_t* mergeResults, int numMergeResults,
int resultSize);
static void MergeQueryResults(queryResults_t* finalResult,
int resultSize, traceType_t type,
const queryResults_t* mergeResults, int numMergeResults,
slideMoveState_t* slideMoveState, dependencyType_t dependencyType,
const queryResults_t* dependency1,
const queryResults_t* dependency2);
};
static_assert(sizeof(slideMoveState_t) == 176,
"Recovered slideMoveState_t ABI changed");