CDispCollTree::SweepAABBTriIntersect
0x000cd1d0 · 1182 bytes · __thiscall
_ZN13CDispCollTree21SweepAABBTriIntersectERK5Ray_tRK6VectoriP12CDispCollTriP10CBaseTrace
Decompiled
undefined (6 params)
/* CDispCollTree::SweepAABBTriIntersect(Ray_t const&, Vector const&, int, CDispCollTri*,
CBaseTrace*) */
void __thiscall
CDispCollTree::SweepAABBTriIntersect
(CDispCollTree *this,Ray_t *param_1,Vector *param_2,int param_3,CDispCollTri *param_4,
CBaseTrace *param_5)
{
ushort *puVar1;
float fVar2;
char cVar3;
bool bVar4;
int iVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
float fVar10;
Vector *local_40;
float local_34;
float local_30;
undefined4 local_2c;
undefined4 local_28;
undefined4 local_24;
undefined4 local_20;
local_30 = 1.0;
local_34 = -99999.9;
if (*(float *)(param_1 + 0x14) * *(float *)(param_4 + 0xc) +
*(float *)(param_1 + 0x10) * *(float *)(param_4 + 8) +
*(float *)(param_1 + 0x18) * *(float *)(param_4 + 0x10) <= 0.03125) {
local_40 = (Vector *)
(AxisPlanesXYZ(Ray_t_const&,CDispCollTri*,CDispCollHelper*)::g_ImpactNormalVecs +
0x18);
iVar5 = 2;
do {
fVar7 = *(float *)(param_1 + iVar5 * 4);
fVar8 = *(float *)(param_1 + iVar5 * 4 + 0x30);
fVar2 = *(float *)(param_1 + iVar5 * 4 + 0x10);
fVar10 = *(float *)(*(int *)(this + 0x70) +
(*(ushort *)(param_4 + ((byte)param_4[iVar5 * 2 + 1] >> 1 & 3) * 2) &
0x1ff) * 0xc + iVar5 * 4);
fVar6 = (fVar10 - fVar8) - fVar7;
cVar3 = ResolveRayPlaneIntersect
(this,fVar6,fVar6 - fVar2,local_40,fVar10,(CDispCollHelper *)&local_34);
if (cVar3 == '\0') {
return;
}
fVar10 = *(float *)(*(int *)(this + 0x70) +
(*(ushort *)(param_4 + ((byte)param_4[iVar5 * 2 + 1] >> 3 & 3) * 2) &
0x1ff) * 0xc + iVar5 * 4);
fVar7 = (fVar7 - fVar8) - fVar10;
cVar3 = ResolveRayPlaneIntersect
(this,fVar7,fVar2 + fVar7,local_40 + 0x24,fVar10,
(CDispCollHelper *)&local_34);
if (cVar3 == '\0') {
return;
}
local_40 = local_40 + -0xc;
iVar5 = iVar5 + -1;
} while (iVar5 != -1);
puVar1 = (ushort *)(*(int *)(this + 0xb0) + param_3 * 0x12);
bVar4 = EdgeCrossAxis<0>(this,param_1,*puVar1,(CDispCollHelper *)&local_34);
if (((((bVar4) &&
(bVar4 = EdgeCrossAxis<0>(this,param_1,puVar1[1],(CDispCollHelper *)&local_34), bVar4)) &&
(bVar4 = EdgeCrossAxis<0>(this,param_1,puVar1[2],(CDispCollHelper *)&local_34), bVar4)) &&
(((bVar4 = EdgeCrossAxis<1>(this,param_1,puVar1[3],(CDispCollHelper *)&local_34), bVar4 &&
(bVar4 = EdgeCrossAxis<1>(this,param_1,puVar1[4],(CDispCollHelper *)&local_34), bVar4)) &&
((bVar4 = EdgeCrossAxis<1>(this,param_1,puVar1[5],(CDispCollHelper *)&local_34), bVar4 &&
((bVar4 = EdgeCrossAxis<2>(this,param_1,puVar1[6],(CDispCollHelper *)&local_34), bVar4 &&
(bVar4 = EdgeCrossAxis<2>(this,param_1,puVar1[7],(CDispCollHelper *)&local_34), bVar4))))
)))) && (bVar4 = EdgeCrossAxis<2>(this,param_1,puVar1[8],(CDispCollHelper *)&local_34),
bVar4)) {
fVar7 = *(float *)(param_4 + 8);
fVar8 = *(float *)(param_1 + 0x30);
if (0.0 <= fVar7) {
fVar8 = -fVar8;
}
fVar2 = *(float *)(param_4 + 0xc);
fVar10 = *(float *)(param_1 + 0x34);
if (0.0 <= fVar2) {
fVar10 = -fVar10;
}
fVar6 = *(float *)(param_4 + 0x10);
fVar9 = *(float *)(param_1 + 0x38);
if (0.0 <= fVar6) {
fVar9 = -fVar9;
}
fVar8 = ((*(float *)(param_4 + 0x14) - fVar8 * fVar7) - fVar10 * fVar2) - fVar9 * fVar6;
cVar3 = ResolveRayPlaneIntersect
(this,(fVar2 * *(float *)(param_1 + 4) + fVar7 * *(float *)param_1 +
fVar6 * *(float *)(param_1 + 8)) - fVar8,
((*(float *)(param_1 + 0x14) + *(float *)(param_1 + 4)) * fVar2 +
(*(float *)(param_1 + 0x10) + *(float *)param_1) * fVar7 +
(*(float *)(param_1 + 8) + *(float *)(param_1 + 0x18)) * fVar6) - fVar8,
(Vector *)(param_4 + 8),*(float *)(param_4 + 0x14),
(CDispCollHelper *)&local_34);
if (((cVar3 != '\0') &&
(((local_34 < local_30 || (ABS(local_34 - local_30) < 0.001)) && (local_34 != -99999.9))))
&& (local_34 < *(float *)(param_5 + 0x2c))) {
if (local_34 < 0.0) {
local_34 = 0.0;
}
*(float *)(param_5 + 0x2c) = local_34;
*(undefined4 *)(param_5 + 0x18) = local_2c;
*(undefined4 *)(param_5 + 0x1c) = local_28;
*(undefined4 *)(param_5 + 0x20) = local_24;
*(undefined4 *)(param_5 + 0x24) = local_20;
*(ushort *)(param_5 + 0x34) = *(ushort *)(param_4 + 6) >> 6 & 0x1f;
}
}
}
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.