IsBoxIntersectingTriangle
0x0058db50 · 2125 bytes · __cdecl
_Z25IsBoxIntersectingTriangleRK6VectorS1_S1_S1_S1_RK8cplane_tf
Decompiled
undefined (7 params)
/* IsBoxIntersectingTriangle(Vector const&, Vector const&, Vector const&, Vector const&, Vector
const&, cplane_t const&, float) */
bool IsBoxIntersectingTriangle
(Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,Vector *param_5,
cplane_t *param_6,float param_7)
{
float fVar1;
float fVar2;
float fVar3;
int iVar4;
bool bVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
float fVar10;
float fVar11;
float fVar12;
float fVar13;
float fVar14;
float fVar15;
float fVar16;
float fVar17;
float fVar18;
float fVar19;
float fVar20;
float local_34;
float local_30;
float local_2c;
float local_28;
float local_24;
float local_20;
bVar5 = false;
local_28 = *(float *)param_1;
fVar7 = *(float *)param_4 - local_28;
fVar6 = *(float *)param_3 - local_28;
fVar8 = *(float *)param_5 - local_28;
fVar2 = fVar7;
if (fVar6 <= fVar7) {
fVar2 = fVar6;
}
fVar1 = *(float *)param_2;
if (fVar8 <= fVar2) {
fVar2 = fVar8;
}
if (fVar2 <= param_7 + fVar1) {
fVar2 = fVar7;
if (fVar7 <= fVar6) {
fVar2 = fVar6;
}
if (fVar2 <= fVar8) {
fVar2 = fVar8;
}
if (-(param_7 + fVar1) <= fVar2) {
fVar2 = *(float *)(param_1 + 4);
fVar16 = *(float *)(param_3 + 4) - fVar2;
fVar9 = *(float *)(param_4 + 4) - fVar2;
fVar3 = fVar9;
if (fVar16 <= fVar9) {
fVar3 = fVar16;
}
fVar17 = *(float *)(param_5 + 4) - fVar2;
local_24 = *(float *)(param_2 + 4);
if (fVar17 <= fVar3) {
fVar3 = fVar17;
}
if (fVar3 <= local_24 + param_7) {
fVar3 = fVar16;
if (fVar16 <= fVar9) {
fVar3 = fVar9;
}
if (fVar3 <= fVar17) {
fVar3 = fVar17;
}
if (-(local_24 + param_7) <= fVar3) {
fVar3 = *(float *)(param_1 + 8);
fVar18 = *(float *)(param_5 + 8) - fVar3;
fVar10 = *(float *)(param_3 + 8) - fVar3;
fVar11 = *(float *)(param_4 + 8) - fVar3;
fVar12 = fVar11;
if (fVar10 <= fVar11) {
fVar12 = fVar10;
}
local_20 = *(float *)(param_2 + 8);
if (fVar18 <= fVar12) {
fVar12 = fVar18;
}
if (fVar12 <= local_20 + param_7) {
fVar12 = fVar11;
if (fVar11 <= fVar10) {
fVar12 = fVar10;
}
if (fVar12 <= fVar18) {
fVar12 = fVar18;
}
if (-(local_20 + param_7) <= fVar12) {
fVar12 = fVar9 - fVar16;
fVar13 = fVar11 - fVar10;
fVar14 = fVar13 * fVar16 - fVar12 * fVar10;
fVar15 = fVar13 * fVar17 - fVar12 * fVar18;
fVar19 = param_7 + ABS(fVar12) * local_20 + ABS(fVar13) * local_24;
if (fVar14 < fVar15) {
if (fVar19 < fVar14) {
return false;
}
if (fVar15 < -fVar19) {
return false;
}
}
else {
if (fVar19 < fVar15) {
return false;
}
if (fVar14 < -fVar19) {
return false;
}
}
fVar14 = fVar7 - fVar6;
fVar15 = fVar14 * fVar10 + -fVar13 * fVar6;
fVar19 = -fVar13 * fVar8 + fVar14 * fVar18;
fVar13 = local_20 * ABS(fVar14) + ABS(fVar13) * fVar1;
if (fVar19 <= fVar15) {
fVar13 = fVar13 + param_7;
if (fVar13 < fVar19) {
return false;
}
if (fVar15 < -fVar13) {
return false;
}
}
else {
fVar13 = fVar13 + param_7;
if (fVar13 < fVar15) {
return false;
}
if (fVar19 < -fVar13) {
return false;
}
}
fVar13 = fVar12 * fVar7 - fVar14 * fVar9;
fVar15 = fVar12 * fVar8 - fVar14 * fVar17;
fVar12 = ABS(fVar14) * local_24 + ABS(fVar12) * fVar1;
if (fVar13 <= fVar15) {
fVar12 = fVar12 + param_7;
if (fVar12 < fVar13) {
return false;
}
if (fVar15 < -fVar12) {
return false;
}
}
else {
fVar12 = fVar12 + param_7;
if (fVar12 < fVar15) {
return false;
}
if (fVar13 < -fVar12) {
return false;
}
}
fVar15 = fVar17 - fVar9;
fVar19 = fVar18 - fVar11;
fVar12 = fVar19 * fVar16 - fVar15 * fVar10;
fVar13 = fVar19 * fVar9 - fVar15 * fVar11;
fVar14 = local_20 * ABS(fVar15) + ABS(fVar19) * local_24;
if (fVar13 <= fVar12) {
fVar14 = fVar14 + param_7;
if (fVar14 < fVar13) {
return false;
}
if (fVar12 < -fVar14) {
return false;
}
}
else {
fVar14 = fVar14 + param_7;
if (fVar14 < fVar12) {
return false;
}
if (fVar13 < -fVar14) {
return false;
}
}
fVar20 = fVar8 - fVar7;
fVar13 = fVar20 * fVar10 + -fVar19 * fVar6;
fVar12 = fVar20 * fVar11 + -fVar19 * fVar7;
fVar14 = ABS(fVar20) * local_20 + ABS(fVar19) * fVar1;
if (fVar12 <= fVar13) {
fVar14 = fVar14 + param_7;
if (fVar14 < fVar12) {
return false;
}
if (fVar13 < -fVar14) {
return false;
}
}
else {
fVar14 = fVar14 + param_7;
if (fVar14 < fVar13) {
return false;
}
if (fVar12 < -fVar14) {
return false;
}
}
fVar14 = fVar15 * fVar6 - fVar20 * fVar16;
fVar13 = fVar15 * fVar8 - fVar20 * fVar17;
fVar12 = ABS(fVar20) * local_24 + ABS(fVar15) * fVar1;
if (fVar13 <= fVar14) {
fVar12 = fVar12 + param_7;
if (fVar12 < fVar13) {
return false;
}
if (fVar14 < -fVar12) {
return false;
}
}
else {
fVar12 = fVar12 + param_7;
if (fVar12 < fVar14) {
return false;
}
if (fVar13 < -fVar12) {
return false;
}
}
fVar14 = fVar16 - fVar17;
fVar18 = fVar10 - fVar18;
fVar13 = fVar16 * fVar18 - fVar14 * fVar10;
fVar12 = fVar18 * fVar9 - fVar11 * fVar14;
fVar16 = ABS(fVar14) * local_20 + ABS(fVar18) * local_24;
if (fVar12 <= fVar13) {
fVar16 = fVar16 + param_7;
if (fVar16 < fVar12) {
return false;
}
if (fVar13 < -fVar16) {
return false;
}
}
else {
fVar16 = fVar16 + param_7;
if (fVar16 < fVar13) {
return false;
}
if (fVar12 < -fVar16) {
return false;
}
}
fVar13 = fVar6 - fVar8;
fVar6 = fVar10 * fVar13 + fVar6 * -fVar18;
fVar12 = -fVar18 * fVar7 + fVar11 * fVar13;
fVar16 = ABS(fVar13) * local_20 + ABS(fVar18) * fVar1;
if (fVar12 <= fVar6) {
fVar16 = param_7 + fVar16;
if (fVar16 < fVar12) {
return false;
}
if (fVar6 < -fVar16) {
return false;
}
}
else {
fVar16 = param_7 + fVar16;
if (fVar16 < fVar6) {
return false;
}
if (fVar12 < -fVar16) {
return false;
}
}
fVar9 = fVar7 * fVar14 - fVar9 * fVar13;
fVar7 = fVar8 * fVar14 - fVar17 * fVar13;
fVar6 = ABS(fVar13) * local_24 + ABS(fVar14) * fVar1;
if (fVar9 <= fVar7) {
fVar6 = fVar6 + param_7;
if (fVar6 < fVar9) {
return false;
}
if (fVar7 < -fVar6) {
return false;
}
}
else {
fVar6 = fVar6 + param_7;
if (fVar6 < fVar7) {
return false;
}
if (fVar9 < -fVar6) {
return false;
}
}
local_34 = local_28 - fVar1;
local_28 = local_28 + fVar1;
local_30 = fVar2 - local_24;
local_2c = fVar3 - local_20;
local_24 = local_24 + fVar2;
local_20 = local_20 + fVar3;
iVar4 = BoxOnPlaneSide(&local_34,&local_28,param_6);
bVar5 = iVar4 == 3;
}
}
}
}
}
}
return bVar5;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
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.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.