61 lines
2.2 KiB
C++
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");
|