CDispCollTree::AABBTree_TreeTrisRayBarycentricTest
0x000cb5f0 · 1169 bytes · __thiscall
_ZN13CDispCollTree35AABBTree_TreeTrisRayBarycentricTestERK5Ray_tRK6VectoriR15RayDispOutput_tPP12CDispCollTri
Decompiled
undefined (6 params)
/* CDispCollTree::AABBTree_TreeTrisRayBarycentricTest(Ray_t const&, Vector const&, int,
RayDispOutput_t&, CDispCollTri**) */
void __thiscall
CDispCollTree::AABBTree_TreeTrisRayBarycentricTest
(CDispCollTree *this,Ray_t *param_1,Vector *param_2,int param_3,RayDispOutput_t *param_4,
CDispCollTri **param_5)
{
short *psVar1;
CDispCollTri *pCVar2;
CDispCollTri *pCVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
char cVar10;
int iVar11;
int iVar12;
float *pfVar13;
uint uVar14;
int iVar15;
int iVar16;
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;
float local_628;
float local_624;
float local_620 [37];
int local_58c [351];
iVar12 = 0;
fVar4 = *(float *)param_2;
fVar5 = *(float *)(param_2 + 4);
fVar19 = *(float *)(param_1 + 0x30) + 0.03125;
fVar6 = *(float *)(param_2 + 8);
fVar7 = *(float *)param_1;
fVar8 = *(float *)(param_1 + 4);
fVar20 = *(float *)(param_1 + 0x34) + 0.03125;
fVar9 = *(float *)(param_1 + 8);
fVar17 = *(float *)(param_1 + 0x38) + 0.03125;
iVar16 = 0;
local_58c[0] = param_3;
iVar15 = *(int *)(this + 0x98);
while( true ) {
if (iVar15 <= param_3) {
if (iVar16 <= iVar12) {
while( true ) {
psVar1 = (short *)(*(int *)(this + 0xa0) + (param_3 - iVar15) * 4);
pCVar2 = (CDispCollTri *)(*(int *)(this + 0x80) + psVar1[1] * 0x18);
pCVar3 = (CDispCollTri *)(*(int *)(this + 0x80) + *psVar1 * 0x18);
iVar15 = *(int *)(this + 0x70);
cVar10 = ComputeIntersectionBarycentricCoordinates
(param_1,(Vector *)(iVar15 + (*(ushort *)pCVar3 & 0x1ff) * 0xc),
(Vector *)(iVar15 + (*(ushort *)(pCVar3 + 4) & 0x1ff) * 0xc),
(Vector *)(iVar15 + (*(ushort *)(pCVar3 + 2) & 0x1ff) * 0xc),
&local_628,&local_624,local_620);
if ((((cVar10 != '\0') && (0.0 <= local_628)) && (0.0 <= local_624)) &&
(((local_624 + local_628 <= 1.0 && (0.0 < local_620[0])) &&
(local_620[0] < *(float *)(param_4 + 0x10))))) {
*param_5 = pCVar3;
*(float *)(param_4 + 8) = local_628;
*(float *)(param_4 + 0xc) = local_624;
*(float *)(param_4 + 0x10) = local_620[0];
}
iVar15 = *(int *)(this + 0x70);
cVar10 = ComputeIntersectionBarycentricCoordinates
(param_1,(Vector *)(iVar15 + (*(ushort *)pCVar2 & 0x1ff) * 0xc),
(Vector *)(iVar15 + (*(ushort *)(pCVar2 + 4) & 0x1ff) * 0xc),
(Vector *)(iVar15 + (*(ushort *)(pCVar2 + 2) & 0x1ff) * 0xc),
&local_628,&local_624,local_620);
if (((cVar10 != '\0') && (0.0 <= local_628)) &&
((0.0 <= local_624 &&
(((local_624 + local_628 <= 1.0 && (0.0 < local_620[0])) &&
(local_620[0] < *(float *)(param_4 + 0x10))))))) {
*param_5 = pCVar2;
*(float *)(param_4 + 8) = local_628;
*(float *)(param_4 + 0xc) = local_624;
*(float *)(param_4 + 0x10) = local_620[0];
}
iVar16 = iVar16 + 1;
if (iVar12 < iVar16) break;
param_3 = local_58c[iVar16];
iVar15 = *(int *)(this + 0x98);
}
}
/* WARNING: Read-only address (ram,0x002cf7a0) is written */
/* WARNING: Read-only address (ram,0x002cf7b0) is written */
return;
}
iVar16 = iVar16 + 1;
pfVar13 = (float *)(param_3 * 0x60 + *(int *)(this + 0x90));
fVar26 = ((pfVar13[4] - fVar8) - fVar20) * fVar5;
fVar27 = ((pfVar13[5] - fVar8) - fVar20) * fVar5;
fVar28 = ((pfVar13[6] - fVar8) - fVar20) * fVar5;
fVar29 = ((pfVar13[7] - fVar8) - fVar20) * fVar5;
fVar38 = ((*pfVar13 - fVar7) - fVar19) * fVar4;
fVar39 = ((pfVar13[1] - fVar7) - fVar19) * fVar4;
fVar40 = ((pfVar13[2] - fVar7) - fVar19) * fVar4;
fVar41 = ((pfVar13[3] - fVar7) - fVar19) * fVar4;
auVar33._0_4_ = ((pfVar13[0x10] - fVar8) + fVar20) * fVar5;
auVar33._4_4_ = ((pfVar13[0x11] - fVar8) + fVar20) * fVar5;
auVar33._8_4_ = ((pfVar13[0x12] - fVar8) + fVar20) * fVar5;
auVar33._12_4_ = ((pfVar13[0x13] - fVar8) + fVar20) * fVar5;
auVar37._0_4_ = ((pfVar13[0xc] - fVar7) + fVar19) * fVar4;
auVar37._4_4_ = ((pfVar13[0xd] - fVar7) + fVar19) * fVar4;
auVar37._8_4_ = ((pfVar13[0xe] - fVar7) + fVar19) * fVar4;
auVar37._12_4_ = ((pfVar13[0xf] - fVar7) + fVar19) * fVar4;
fVar21 = ((pfVar13[8] - fVar9) - fVar17) * fVar6;
fVar22 = ((pfVar13[9] - fVar9) - fVar17) * fVar6;
fVar23 = ((pfVar13[10] - fVar9) - fVar17) * fVar6;
fVar24 = ((pfVar13[0xb] - fVar9) - fVar17) * fVar6;
auVar34._4_4_ = fVar27;
auVar34._0_4_ = fVar26;
auVar34._8_4_ = fVar28;
auVar34._12_4_ = fVar29;
auVar18._0_4_ = ((pfVar13[0x14] - fVar9) + fVar17) * fVar6;
auVar18._4_4_ = ((pfVar13[0x15] - fVar9) + fVar17) * fVar6;
auVar18._8_4_ = ((pfVar13[0x16] - fVar9) + fVar17) * fVar6;
auVar18._12_4_ = ((pfVar13[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_);
uVar14 = movmskps(pfVar13,auVar35);
if (uVar14 != 0) {
iVar11 = param_3 * 4;
if ((uVar14 & 1) != 0) {
iVar12 = iVar12 + 1;
local_58c[iVar12] = iVar11 + 1;
}
if ((uVar14 & 2) != 0) {
iVar12 = iVar12 + 1;
local_58c[iVar12] = iVar11 + 2;
}
if ((uVar14 & 4) != 0) {
iVar12 = iVar12 + 1;
local_58c[iVar12] = iVar11 + 3;
}
if ((uVar14 & 8) != 0) {
iVar12 = iVar12 + 1;
local_58c[iVar12] = iVar11 + 4;
}
}
if (iVar12 < iVar16) break;
param_3 = local_58c[iVar16];
}
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.