CEdgeList::ReduceActiveEdgeList
0x001cda50 · 968 bytes · __thiscall
_ZN9CEdgeList20ReduceActiveEdgeListER15CWingedEdgeListff
Decompiled
undefined (4 params)
/* CEdgeList::ReduceActiveEdgeList(CWingedEdgeList&, float, float) */
void __thiscall
CEdgeList::ReduceActiveEdgeList
(CEdgeList *this,CWingedEdgeList *param_1,float param_2,float param_3)
{
float fVar1;
float fVar2;
float fVar3;
CEdgeList *pCVar4;
Edge_t *pEVar5;
int iVar6;
Edge_t *pEVar7;
int iVar8;
int iVar9;
float *pfVar10;
int iVar11;
int iVar12;
float *pfVar13;
float fVar14;
float fVar15;
undefined2 local_28;
int local_20;
local_20 = -1;
pEVar5 = *(Edge_t **)(this + 0x70);
fVar1 = *(float *)(*(Edge_t **)(this + 0x70) + 0x20);
joined_r0x001cda7f:
do {
do {
pEVar7 = pEVar5;
if (pEVar7 == (Edge_t *)(this + 0x74)) {
return;
}
fVar14 = *(float *)(pEVar7 + 0x20);
if (fVar14 != fVar1) {
for (pCVar4 = *(CEdgeList **)(this + 0xe8); pCVar4 != this + 0xf4;
pCVar4 = *(CEdgeList **)(pCVar4 + 0x1c)) {
*(float *)(pCVar4 + 0x14) =
(*(float *)(pCVar4 + 0xc) - *(float *)pCVar4 * fVar14) -
*(float *)(pCVar4 + 4) * param_2;
}
}
IntroduceSingleActiveEdge(this,pEVar7,param_2);
pEVar5 = *(Edge_t **)(pEVar7 + 0x2c);
fVar14 = *(float *)(pEVar7 + 0x20);
fVar1 = *(float *)(pEVar5 + 0x20);
} while (((fVar1 == fVar14) && (*(float *)(pEVar7 + 0x18) == *(float *)(pEVar5 + 0x18))) ||
(iVar6 = *(int *)(*(int *)(this + 0xe8) + 0x20), fVar1 = fVar14, local_20 == iVar6));
iVar8 = iVar6;
if (iVar6 == -1) {
iVar8 = local_20;
}
iVar12 = *(int *)(this + 0x138) + -1;
iVar11 = iVar12 * 8;
for (; -1 < iVar12; iVar12 = iVar12 + -1) {
iVar9 = *(short *)(*(int *)(this + 0x130) + iVar11 + 2) * 0x30 + *(int *)(param_1 + 0x7c);
if (((*(short *)(iVar9 + 0x24) == local_20) && (*(short *)(iVar9 + 0x26) == iVar6)) &&
((*(float *)(iVar9 + 0x18) == *(float *)(pEVar7 + 0x18) &&
(ABS(*(float *)(iVar9 + 0xc) - fVar14) < 0.001)))) {
pfVar10 = *(float **)(*(int *)(this + 0x130) + iVar11 + 4);
fVar14 = *pfVar10;
fVar15 = pfVar10[3];
fVar2 = pfVar10[1];
fVar3 = pfVar10[7];
*(float *)(iVar9 + 0x10) = param_3;
fVar14 = (fVar15 - fVar14) * fVar3 * (param_3 - fVar2) + fVar14;
*(float *)(iVar9 + 0xc) = fVar14;
pfVar10 = (float *)(*(int *)(this + 0xa4) + iVar8 * 0x28);
*(float *)(iVar9 + 0x14) = (pfVar10[3] - fVar14 * *pfVar10) - pfVar10[1] * param_3;
local_20 = iVar6;
if (param_3 < *(float *)(pEVar7 + 0x10)) {
iVar8 = *(int *)(this + 300) + *(int *)(this + 0x134) * 8;
*(int *)(this + 0x134) = *(int *)(this + 0x134) + 1;
*(undefined4 *)(iVar8 + 4) = *(undefined4 *)(*(int *)(this + 0x130) + 4 + iVar11);
*(undefined2 *)(iVar8 + 2) = *(undefined2 *)(*(int *)(this + 0x130) + 2 + iVar11);
}
goto joined_r0x001cda7f;
}
iVar11 = iVar11 + -8;
}
iVar12 = *(int *)(param_1 + 0x88);
CUtlVector<CWingedEdgeList::WingedEdge_t,CUtlMemory<CWingedEdgeList::WingedEdge_t,int>>::
GrowVector((CUtlVector<CWingedEdgeList::WingedEdge_t,CUtlMemory<CWingedEdgeList::WingedEdge_t,int>>
*)(param_1 + 0x7c),1);
CUtlVector<CWingedEdgeList::WingedEdge_t,CUtlMemory<CWingedEdgeList::WingedEdge_t,int>>::
ShiftElementsRight((CUtlVector<CWingedEdgeList::WingedEdge_t,CUtlMemory<CWingedEdgeList::WingedEdge_t,int>>
*)(param_1 + 0x7c),iVar12,1);
iVar9 = iVar12 * 0x30;
local_28 = (undefined2)iVar6;
iVar11 = *(int *)(param_1 + 0x7c);
*(undefined4 *)(iVar11 + iVar9 + 0x28) = 0;
*(undefined4 *)(iVar11 + iVar9 + 0x2c) = 0;
pfVar10 = (float *)(*(int *)(param_1 + 0x7c) + iVar9);
*(undefined2 *)(pfVar10 + 9) = (undefined2)local_20;
*(undefined2 *)((int)pfVar10 + 0x26) = local_28;
pfVar10[6] = *(float *)(pEVar7 + 0x18);
fVar14 = *(float *)pEVar7;
fVar15 = *(float *)(pEVar7 + 0xc);
fVar2 = *(float *)(pEVar7 + 4);
fVar3 = *(float *)(pEVar7 + 0x1c);
pfVar10[1] = param_2;
fVar14 = (fVar15 - fVar14) * fVar3 * (param_2 - fVar2) + fVar14;
*pfVar10 = fVar14;
pfVar13 = (float *)(*(int *)(this + 0xa4) + iVar8 * 0x28);
pfVar10[2] = (pfVar13[3] - *pfVar13 * fVar14) - pfVar13[1] * param_2;
fVar15 = (*(float *)(pEVar7 + 0xc) - *(float *)pEVar7) * *(float *)(pEVar7 + 0x1c) *
(param_3 - *(float *)(pEVar7 + 4)) + *(float *)pEVar7;
pfVar10[3] = fVar15;
pfVar10[4] = param_3;
pfVar13 = (float *)(iVar8 * 0x28 + *(int *)(this + 0xa4));
pfVar10[5] = (pfVar13[3] - fVar15 * *pfVar13) - pfVar13[1] * param_3;
if (((iVar12 != 0) &&
(pfVar13 = (float *)(*(int *)(param_1 + 0x7c) + -0x30 + iVar9), param_2 == pfVar13[1])) &&
(fVar15 = *pfVar13, fVar14 < fVar15)) {
*pfVar10 = fVar15;
}
local_20 = iVar6;
if (param_3 < *(float *)(pEVar7 + 0x10)) {
iVar8 = *(int *)(this + 300) + *(int *)(this + 0x134) * 8;
*(int *)(this + 0x134) = *(int *)(this + 0x134) + 1;
*(short *)(iVar8 + 2) = (short)iVar12;
*(Edge_t **)(iVar8 + 4) = pEVar7;
}
} while( true );
}
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.