CDispCollTree::AABBTree_TreeTrisRayTest
0x000cbdf0 · 1001 bytes · __thiscall
_ZN13CDispCollTree24AABBTree_TreeTrisRayTestERK5Ray_tRK6VectoriP10CBaseTracebPP12CDispCollTri
Decompiled
undefined (7 params)
/* CDispCollTree::AABBTree_TreeTrisRayTest(Ray_t const&, Vector const&, int, CBaseTrace*, bool,
CDispCollTri**) */
void __thiscall
CDispCollTree::AABBTree_TreeTrisRayTest
(CDispCollTree *this,Ray_t *param_1,Vector *param_2,int param_3,CBaseTrace *param_4,
bool param_5,CDispCollTri **param_6)
{
short *psVar1;
CDispCollTri *pCVar2;
CDispCollTri *pCVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
int iVar10;
int iVar11;
float *pfVar12;
uint uVar13;
int iVar14;
int iVar15;
longdouble lVar16;
float fVar17;
undefined1 auVar18 [16];
float fVar19;
float fVar20;
float fVar21;
float fVar22;
float fVar23;
float fVar24;
undefined1 auVar25 [16];
float fVar26;
float fVar27;
float fVar28;
float fVar29;
undefined1 auVar30 [16];
undefined1 auVar31 [16];
undefined1 auVar32 [16];
undefined1 auVar33 [16];
undefined1 auVar34 [16];
undefined1 auVar35 [16];
undefined1 auVar36 [16];
undefined1 auVar37 [16];
float fVar38;
float fVar39;
float fVar40;
float fVar41;
int local_58c [351];
iVar11 = 0;
fVar4 = *(float *)param_2;
fVar5 = *(float *)(param_2 + 4);
fVar6 = *(float *)(param_2 + 8);
fVar7 = *(float *)param_1;
fVar8 = *(float *)(param_1 + 4);
fVar9 = *(float *)(param_1 + 8);
fVar19 = *(float *)(param_1 + 0x30) + 0.03125;
fVar20 = *(float *)(param_1 + 0x34) + 0.03125;
fVar17 = *(float *)(param_1 + 0x38) + 0.03125;
iVar15 = 0;
iVar14 = *(int *)(this + 0x98);
local_58c[0] = param_3;
while( true ) {
if (iVar14 <= param_3) {
if (iVar11 < iVar15) {
return;
}
while( true ) {
psVar1 = (short *)(*(int *)(this + 0xa0) + (param_3 - iVar14) * 4);
pCVar2 = (CDispCollTri *)(*(int *)(this + 0x80) + psVar1[1] * 0x18);
pCVar3 = (CDispCollTri *)(*(int *)(this + 0x80) + *psVar1 * 0x18);
iVar14 = *(int *)(this + 0x70);
lVar16 = (longdouble)
IntersectRayWithTriangle
(param_1,(Vector *)(iVar14 + (*(ushort *)pCVar3 & 0x1ff) * 0xc),
(Vector *)(iVar14 + (*(ushort *)(pCVar3 + 4) & 0x1ff) * 0xc),
(Vector *)(iVar14 + (*(ushort *)(pCVar3 + 2) & 0x1ff) * 0xc),param_5);
fVar4 = (float)lVar16;
if ((0.0 <= fVar4) && (fVar4 < *(float *)(param_4 + 0x2c))) {
*(float *)(param_4 + 0x2c) = fVar4;
*param_6 = pCVar3;
}
iVar14 = *(int *)(this + 0x70);
lVar16 = (longdouble)
IntersectRayWithTriangle
(param_1,(Vector *)(iVar14 + (*(ushort *)pCVar2 & 0x1ff) * 0xc),
(Vector *)(iVar14 + (*(ushort *)(pCVar2 + 4) & 0x1ff) * 0xc),
(Vector *)(iVar14 + (*(ushort *)(pCVar2 + 2) & 0x1ff) * 0xc),param_5);
fVar4 = (float)lVar16;
if ((0.0 <= fVar4) && (fVar4 < *(float *)(param_4 + 0x2c))) {
*(float *)(param_4 + 0x2c) = fVar4;
*param_6 = pCVar2;
}
iVar15 = iVar15 + 1;
if (iVar11 < iVar15) break;
param_3 = local_58c[iVar15];
iVar14 = *(int *)(this + 0x98);
}
return;
}
iVar15 = iVar15 + 1;
pfVar12 = (float *)(param_3 * 0x60 + *(int *)(this + 0x90));
fVar26 = ((pfVar12[4] - fVar8) - fVar20) * fVar5;
fVar27 = ((pfVar12[5] - fVar8) - fVar20) * fVar5;
fVar28 = ((pfVar12[6] - fVar8) - fVar20) * fVar5;
fVar29 = ((pfVar12[7] - fVar8) - fVar20) * fVar5;
fVar38 = ((*pfVar12 - fVar7) - fVar19) * fVar4;
fVar39 = ((pfVar12[1] - fVar7) - fVar19) * fVar4;
fVar40 = ((pfVar12[2] - fVar7) - fVar19) * fVar4;
fVar41 = ((pfVar12[3] - fVar7) - fVar19) * fVar4;
auVar33._0_4_ = ((pfVar12[0x10] - fVar8) + fVar20) * fVar5;
auVar33._4_4_ = ((pfVar12[0x11] - fVar8) + fVar20) * fVar5;
auVar33._8_4_ = ((pfVar12[0x12] - fVar8) + fVar20) * fVar5;
auVar33._12_4_ = ((pfVar12[0x13] - fVar8) + fVar20) * fVar5;
auVar37._0_4_ = ((pfVar12[0xc] - fVar7) + fVar19) * fVar4;
auVar37._4_4_ = ((pfVar12[0xd] - fVar7) + fVar19) * fVar4;
auVar37._8_4_ = ((pfVar12[0xe] - fVar7) + fVar19) * fVar4;
auVar37._12_4_ = ((pfVar12[0xf] - fVar7) + fVar19) * fVar4;
fVar21 = ((pfVar12[8] - fVar9) - fVar17) * fVar6;
fVar22 = ((pfVar12[9] - fVar9) - fVar17) * fVar6;
fVar23 = ((pfVar12[10] - fVar9) - fVar17) * fVar6;
fVar24 = ((pfVar12[0xb] - fVar9) - fVar17) * fVar6;
auVar34._4_4_ = fVar27;
auVar34._0_4_ = fVar26;
auVar34._8_4_ = fVar28;
auVar34._12_4_ = fVar29;
auVar18._0_4_ = ((pfVar12[0x14] - fVar9) + fVar17) * fVar6;
auVar18._4_4_ = ((pfVar12[0x15] - fVar9) + fVar17) * fVar6;
auVar18._8_4_ = ((pfVar12[0x16] - fVar9) + fVar17) * fVar6;
auVar18._12_4_ = ((pfVar12[0x17] - fVar9) + fVar17) * fVar6;
auVar31._4_4_ = fVar39;
auVar31._0_4_ = fVar38;
auVar31._8_4_ = fVar40;
auVar31._12_4_ = fVar41;
auVar35 = maxps(auVar34,auVar33);
auVar32 = maxps(auVar31,auVar37);
auVar25._4_4_ = fVar27;
auVar25._0_4_ = fVar26;
auVar25._8_4_ = fVar28;
auVar25._12_4_ = fVar29;
auVar25 = minps(auVar33,auVar25);
auVar30._4_4_ = fVar39;
auVar30._0_4_ = fVar38;
auVar30._8_4_ = fVar40;
auVar30._12_4_ = fVar41;
auVar30 = minps(auVar37,auVar30);
auVar36._4_4_ = fVar22;
auVar36._0_4_ = fVar21;
auVar36._8_4_ = fVar23;
auVar36._12_4_ = fVar24;
auVar37 = maxps(auVar36,auVar18);
auVar33 = minps(auVar32,auVar35);
auVar32._4_4_ = fVar22;
auVar32._0_4_ = fVar21;
auVar32._8_4_ = fVar23;
auVar32._12_4_ = fVar24;
auVar32 = minps(auVar18,auVar32);
auVar25 = maxps(auVar30,auVar25);
auVar30 = minps(auVar33,auVar37);
auVar32 = maxps(auVar25,auVar32);
auVar25 = minps(auVar30,Four_Ones);
auVar32 = maxps(auVar32,Four_Zeros);
auVar35._4_4_ = -(uint)(auVar32._4_4_ <= auVar25._4_4_);
auVar35._0_4_ = -(uint)(auVar32._0_4_ <= auVar25._0_4_);
auVar35._8_4_ = -(uint)(auVar32._8_4_ <= auVar25._8_4_);
auVar35._12_4_ = -(uint)(auVar32._12_4_ <= auVar25._12_4_);
uVar13 = movmskps(pfVar12,auVar35);
if (uVar13 != 0) {
iVar10 = param_3 * 4;
if ((uVar13 & 1) != 0) {
iVar11 = iVar11 + 1;
local_58c[iVar11] = iVar10 + 1;
}
if ((uVar13 & 2) != 0) {
iVar11 = iVar11 + 1;
local_58c[iVar11] = iVar10 + 2;
}
if ((uVar13 & 4) != 0) {
iVar11 = iVar11 + 1;
local_58c[iVar11] = iVar10 + 3;
}
if ((uVar13 & 8) != 0) {
iVar11 = iVar11 + 1;
local_58c[iVar11] = iVar10 + 4;
}
}
if (iVar11 < iVar15) break;
param_3 = local_58c[iVar15];
}
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.